ZGlmZiAtLWdpdCBhL0FuZHJvaWQuYnAgYi9BbmRyb2lkLmJwCmluZGV4IDczOWNiNmQuLmY2YWFjZDIgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQuYnAKKysrIGIvQW5kcm9pZC5icApAQCAtMiw2ICsyLDE1IEBACiAKIGNjX2xpYnJhcnlfaGVhZGVycyB7CiAgICAgbmFtZTogImxpYmhhcmR3YXJlX2hlYWRlcnMiLAorICAgIGhlYWRlcl9saWJzOiBbCisgICAgICAgICJsaWJhdWRpb19zeXN0ZW1faGVhZGVycyIsCisgICAgICAgICJsaWJzeXN0ZW1faGVhZGVycyIsCisgICAgXSwKKyAgICBleHBvcnRfaGVhZGVyX2xpYl9oZWFkZXJzOiBbCisgICAgICAgICJsaWJhdWRpb19zeXN0ZW1faGVhZGVycyIsCisgICAgICAgICJsaWJzeXN0ZW1faGVhZGVycyIKKyAgICBdLAorCiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCiAgICAgdmVuZG9yX2F2YWlsYWJsZTogdHJ1ZSwKIH0KQEAgLTE1LDkgKzI0LDExIEBACiAgICAgICAgICJsaWJsb2ciLAogICAgICAgICAibGliZGwiLAogICAgIF0sCi0gICAgaGVhZGVyX2xpYnM6IFsibGlic3lzdGVtX2hlYWRlcnMiXSwKICAgICBjZmxhZ3M6IFsiLURRRU1VX0hBUkRXQVJFIl0sCi0gICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCisKKyAgICBoZWFkZXJfbGliczogWyJsaWJoYXJkd2FyZV9oZWFkZXJzIl0sCisgICAgZXhwb3J0X2hlYWRlcl9saWJfaGVhZGVyczogWyJsaWJoYXJkd2FyZV9oZWFkZXJzIl0sCisKICAgICB2ZW5kb3JfYXZhaWxhYmxlOiB0cnVlLAogfQogCmRpZmYgLS1naXQgYS9DbGVhblNwZWMubWsgYi9DbGVhblNwZWMubWsKaW5kZXggYjg0ZTFiNi4uMWM2NGJmYyAxMDA2NDQKLS0tIGEvQ2xlYW5TcGVjLm1rCisrKyBiL0NsZWFuU3BlYy5tawpAQCAtNDcsMyArNDcsMTMgQEAKICMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAjIE5FV0VSIENMRUFOIFNURVBTIE1VU1QgQkUgQVQgVEhFIEVORCBPRiBUSEUgTElTVAogIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtZiAkKFBST0RVQ1RfT1VUKS9zeXN0ZW0vbGliL2xpYmR5bmFtaWNfc2Vuc29yX2V4dC5zbykKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLWYgJChQUk9EVUNUX09VVCkvc3lzdGVtL2xpYjY0L2xpYmR5bmFtaWNfc2Vuc29yX2V4dC5zbykKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLWYgJChQUk9EVUNUX09VVCkvc3lzdGVtL2xpYi9ody9zZW5zb3JzLmR5bmFtaWNfc2Vuc29yX2hhbC5zbykKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLWYgJChQUk9EVUNUX09VVCkvc3lzdGVtL2xpYjY0L2h3L3NlbnNvcnMuZHluYW1pY19zZW5zb3JfaGFsLnNvKQorCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyBORVdFUiBDTEVBTiBTVEVQUyBNVVNUIEJFIEFUIFRIRSBFTkQgT0YgVEhFIExJU1QKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW8uaCBiL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW8uaAppbmRleCBjOTVhZDA5Li4yZDZlYjMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpby5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KIAogI2luY2x1ZGUgPGN1dGlscy9iaXRvcHMuaD4KIApAQCAtNTksMTkgKzYwLDYgQEAKIC8qIE1pbmltYWwgYXVkaW8gSEFMIHZlcnNpb24gc3VwcG9ydGVkIGJ5IHRoZSBhdWRpbyBmcmFtZXdvcmsgKi8KICNkZWZpbmUgQVVESU9fREVWSUNFX0FQSV9WRVJTSU9OX01JTiBBVURJT19ERVZJQ0VfQVBJX1ZFUlNJT05fMl8wCiAKLS8qKgotICogTGlzdCBvZiBrbm93biBhdWRpbyBIQUwgbW9kdWxlcy4gVGhpcyBpcyB0aGUgYmFzZSBuYW1lIG9mIHRoZSBhdWRpbyBIQUwKLSAqIGxpYnJhcnkgY29tcG9zZWQgb2YgdGhlICJhdWRpby4iIHByZWZpeCwgb25lIG9mIHRoZSBiYXNlIG5hbWVzIGJlbG93IGFuZAotICogYSBzdWZmaXggc3BlY2lmaWMgdG8gdGhlIGRldmljZS4KLSAqIGUuZzogYXVkaW8ucHJpbWFyeS5nb2xkZmlzaC5zbyBvciBhdWRpby5hMmRwLmRlZmF1bHQuc28KLSAqLwotCi0jZGVmaW5lIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9QUklNQVJZICJwcmltYXJ5IgotI2RlZmluZSBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfQTJEUCAiYTJkcCIKLSNkZWZpbmUgQVVESU9fSEFSRFdBUkVfTU9EVUxFX0lEX1VTQiAidXNiIgotI2RlZmluZSBBVURJT19IQVJEV0FSRV9NT0RVTEVfSURfUkVNT1RFX1NVQk1JWCAicl9zdWJtaXgiCi0jZGVmaW5lIEFVRElPX0hBUkRXQVJFX01PRFVMRV9JRF9DT0RFQ19PRkZMT0FEICJjb2RlY19vZmZsb2FkIgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qKgpAQCAtODIsMTEgKzcwLDYgQEAKICAqICBhdWRpbyBkZXZpY2UgcGFyYW1ldGVycwogICovCiAKLS8qIEJUIFNDTyBOb2lzZSBSZWR1Y3Rpb24gKyBFY2hvIENhbmNlbGxhdGlvbiBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9LRVlfQlRfTlJFQyAiYnRfaGVhZHNldF9ucmVjIgotI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfT04gIm9uIgotI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfT0ZGICJvZmYiCi0KIC8qIFRUWSBtb2RlIHNlbGVjdGlvbiAqLwogI2RlZmluZSBBVURJT19QQVJBTUVURVJfS0VZX1RUWV9NT0RFICJ0dHlfbW9kZSIKICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1ZBTFVFX1RUWV9PRkYgInR0eV9vZmYiCkBAIC05NCw4ICs3Nyw3IEBACiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9WQUxVRV9UVFlfSENPICJ0dHlfaGNvIgogI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfVFRZX0ZVTEwgInR0eV9mdWxsIgogCi0vKiBIZWFyaW5nIEFpZCBDb21wYXRpYmlsaXR5IC0gVGVsZWNvaWwgKEhBQy1UKSBtb2RlIG9uL29mZgotICAgU3RyaW5ncyBtdXN0IGJlIGluIHN5bmMgd2l0aCBDYWxsRmVhdHVyZXNTZXR0aW5nLmphdmEgKi8KKy8qIEhlYXJpbmcgQWlkIENvbXBhdGliaWxpdHkgLSBUZWxlY29pbCAoSEFDLVQpIG1vZGUgb24vb2ZmICovCiAjZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9LRVlfSEFDICJIQUNTZXR0aW5nIgogI2RlZmluZSBBVURJT19QQVJBTUVURVJfVkFMVUVfSEFDX09OICJPTiIKICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1ZBTFVFX0hBQ19PRkYgIk9GRiIKQEAgLTEwNiw2MyArODgsMTUgQEAKIC8qIEEyRFAgc291cmNlIGFkZHJlc3Mgc2V0IGJ5IGZyYW1ld29yayAqLwogI2RlZmluZSBBVURJT19QQVJBTUVURVJfQTJEUF9TT1VSQ0VfQUREUkVTUyAiYTJkcF9zb3VyY2VfYWRkcmVzcyIKIAotLyogU2NyZWVuIHN0YXRlICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9LRVlfU0NSRUVOX1NUQVRFICJzY3JlZW5fc3RhdGUiCi0KIC8qIEJsdWV0b290aCBTQ08gd2lkZWJhbmQgKi8KICNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9CVF9TQ09fV0IgImJ0X3dicyIKIAotLyogR2V0IGEgbmV3IEhXIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgaWRlbnRpZmllci4KLSAqIFJldHVybiBhIHZhbGlkIHNvdXJjZSAocG9zaXRpdmUgaW50ZWdlcikgb3IgQVVESU9fSFdfU1lOQ19JTlZBTElEIGlmIGFuIGVycm9yIG9jY3VycwotICogb3Igbm8gSFcgc3luYyBpcyBhdmFpbGFibGUuICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9IV19BVl9TWU5DICJod19hdl9zeW5jIgotCiAvKioKICAqICBhdWRpbyBzdHJlYW0gcGFyYW1ldGVycwogICovCiAKLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9ST1VUSU5HICJyb3V0aW5nIiAgICAgICAgICAgICAvKiBhdWRpb19kZXZpY2VzX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9GT1JNQVQgImZvcm1hdCIgICAgICAgICAgICAgICAvKiBhdWRpb19mb3JtYXRfdCAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX0NIQU5ORUxTICJjaGFubmVscyIgICAgICAgICAgIC8qIGF1ZGlvX2NoYW5uZWxfbWFza190ICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fRlJBTUVfQ09VTlQgImZyYW1lX2NvdW50IiAgICAgLyogc2l6ZV90ICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fSU5QVVRfU09VUkNFICJpbnB1dF9zb3VyY2UiICAgLyogYXVkaW9fc291cmNlX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9TQU1QTElOR19SQVRFICJzYW1wbGluZ19yYXRlIiAvKiB1aW50MzJfdCAqLwotCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9ERVZJQ0VfQ09OTkVDVCAiY29ubmVjdCIgICAgICAgICAgICAvKiBhdWRpb19kZXZpY2VzX3QgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0RFVklDRV9ESVNDT05ORUNUICJkaXNjb25uZWN0IiAgICAgIC8qIGF1ZGlvX2RldmljZXNfdCAqLwotCi0vKiBRdWVyeSBzdXBwb3J0ZWQgZm9ybWF0cy4gVGhlIHJlc3BvbnNlIGlzIGEgJ3wnIHNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MgZnJvbQotICogYXVkaW9fZm9ybWF0X3QgZW51bSBlLmc6ICJzdXBfZm9ybWF0cz1BVURJT19GT1JNQVRfUENNXzE2X0JJVCIgKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX1NUUkVBTV9TVVBfRk9STUFUUyAic3VwX2Zvcm1hdHMiCi0vKiBRdWVyeSBzdXBwb3J0ZWQgY2hhbm5lbCBtYXNrcy4gVGhlIHJlc3BvbnNlIGlzIGEgJ3wnIHNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MgZnJvbQotICogYXVkaW9fY2hhbm5lbF9tYXNrX3QgZW51bSBlLmc6ICJzdXBfY2hhbm5lbHM9QVVESU9fQ0hBTk5FTF9PVVRfU1RFUkVPfEFVRElPX0NIQU5ORUxfT1VUX01PTk8iICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fU1VQX0NIQU5ORUxTICJzdXBfY2hhbm5lbHMiCi0vKiBRdWVyeSBzdXBwb3J0ZWQgc2FtcGxpbmcgcmF0ZXMuIFRoZSByZXNwb25zZSBpcyBhICd8JyBzZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcyBlLmc6Ci0gKiAic3VwX3NhbXBsaW5nX3JhdGVzPTQ0MTAwfDQ4MDAwIiAqLwotI2RlZmluZSBBVURJT19QQVJBTUVURVJfU1RSRUFNX1NVUF9TQU1QTElOR19SQVRFUyAic3VwX3NhbXBsaW5nX3JhdGVzIgotCi0vKiBTZXQgdGhlIEhXIHN5bmNocm9uaXphdGlvbiBzb3VyY2UgZm9yIGFuIG91dHB1dCBzdHJlYW0uICovCi0jZGVmaW5lIEFVRElPX1BBUkFNRVRFUl9TVFJFQU1fSFdfQVZfU1lOQyAiaHdfYXZfc3luYyIKLQotLyogRW5hYmxlIG1vbm8gYXVkaW8gcGxheWJhY2sgaWYgMSwgZWxzZSBzaG91bGQgYmUgMC4gKi8KLSNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX01PTk9fT1VUUFVUICJtb25vX291dHB1dCIKLQotLyoqCi0gKiBhdWRpbyBjb2RlYyBwYXJhbWV0ZXJzCi0gKi8KLQotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX1BBUkFNUyAibXVzaWNfb2ZmbG9hZF9jb2RlY19wYXJhbSIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19CSVRfUEVSX1NBTVBMRSAibXVzaWNfb2ZmbG9hZF9iaXRfcGVyX3NhbXBsZSIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19CSVRfUkFURSAibXVzaWNfb2ZmbG9hZF9iaXRfcmF0ZSIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19BVkdfQklUX1JBVEUgIm11c2ljX29mZmxvYWRfYXZnX2JpdF9yYXRlIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0lEICJtdXNpY19vZmZsb2FkX2NvZGVjX2lkIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0JMT0NLX0FMSUdOICJtdXNpY19vZmZsb2FkX2Jsb2NrX2FsaWduIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX1NBTVBMRV9SQVRFICJtdXNpY19vZmZsb2FkX3NhbXBsZV9yYXRlIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0VOQ09ERV9PUFRJT04gIm11c2ljX29mZmxvYWRfZW5jb2RlX29wdGlvbiIKLSNkZWZpbmUgQVVESU9fT0ZGTE9BRF9DT0RFQ19OVU1fQ0hBTk5FTCAgIm11c2ljX29mZmxvYWRfbnVtX2NoYW5uZWxzIgotI2RlZmluZSBBVURJT19PRkZMT0FEX0NPREVDX0RPV05fU0FNUExJTkcgICJtdXNpY19vZmZsb2FkX2Rvd25fc2FtcGxpbmciCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfREVMQVlfU0FNUExFUyAgImRlbGF5X3NhbXBsZXMiCi0jZGVmaW5lIEFVRElPX09GRkxPQURfQ09ERUNfUEFERElOR19TQU1QTEVTICAicGFkZGluZ19zYW1wbGVzIgorLyogRW5hYmxlIEFBTkMgKi8KKyNkZWZpbmUgQVVESU9fUEFSQU1FVEVSX0tFWV9BQU5DICJhYW5jX2VuYWJsZWQiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMzk5LDYgKzMzMyw2NSBAQAogICAgIGludCAoKmdldF9wcmVzZW50YXRpb25fcG9zaXRpb24pKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0ICpzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgKmZyYW1lcywgc3RydWN0IHRpbWVzcGVjICp0aW1lc3RhbXApOwogCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gc3RhcnQgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKiBjcmVhdGVfbW1hcF9idWZmZXIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgc3RhcnQoKQorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzLgorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIG9yIG9uIG5vbiBtbWFwIHN0cmVhbQorICAgICAqLworICAgIGludCAoKnN0YXJ0KShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX291dCogc3RyZWFtKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRvIHN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBzdGFydCgpCisgICAgICoKKyAgICAgKiBcbm90ZSBGdW5jdGlvbiBvbmx5IGltcGxlbWVudGVkIGJ5IHN0cmVhbXMgb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxwYXJhbVtpbl0gc3RyZWFtIHRoZSBzdHJlYW0gb2JqZWN0LgorICAgICAqIFxyZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MuCisgICAgICogICAgICAgICAtRU5PU1lTIGlmIGNhbGxlZCBvdXQgb2Ygc2VxdWVuY2Ugb3Igb24gbm9uIG1tYXAgc3RyZWFtCisgICAgICovCisgICAgaW50ICgqc3RvcCkoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9vdXQqIHN0cmVhbSk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgdGhlIGZyYW1ld29yayB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgbW1hcCBidWZmZXIgdXNlZCBmb3IgYXVkaW8KKyAgICAgKiBzYW1wbGVzIHRyYW5zZmVyLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccGFyYW1baW5dIG1pbl9zaXplX2ZyYW1lcyBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVlc3RlZC4gVGhlIGFjdHVhbCBidWZmZXIKKyAgICAgKiAgICAgICAgc2l6ZSByZXR1cm5lZCBpbiBzdHJ1Y3QgYXVkaW9fbW1hcF9idWZmZXJfaW5mbyBjYW4gYmUgbGFyZ2VyLgorICAgICAqIFxwYXJhbVtvdXRdIGluZm8gYWRkcmVzcyBhdCB3aGljaCB0aGUgbW1hcCBidWZmZXIgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogXHJldHVybiAwIGlmIHRoZSBidWZmZXIgd2FzIGFsbG9jYXRlZC4KKyAgICAgKiAgICAgICAgIC1FTk9ERVYgaW4gY2FzZSBvZiBpbml0aWFsaXphdGlvbiBlcnJvcgorICAgICAqICAgICAgICAgLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHRvbyBsYXJnZQorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgb3V0IG9mIHNlcXVlbmNlIChlLmcuIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCkKKyAgICAgKi8KKyAgICBpbnQgKCpjcmVhdGVfbW1hcF9idWZmZXIpKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0ICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG1pbl9zaXplX2ZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRvIHJlYWQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgorICAgICAqIHdpdGggYXNzb2NpYXRlZCB0aW1lIHN0YW1wLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccGFyYW1bb3V0XSBwb3NpdGlvbiBhZGRyZXNzIGF0IHdoaWNoIHRoZSBtbWFwIHJlYWQvd3JpdGUgcG9zaXRpb24gc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogXHJldHVybiAwIGlmIHRoZSBwb3NpdGlvbiBpcyBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuCisgICAgICogICAgICAgICAtRU5PREFUQSBpZiB0aGUgcG9zaXRpb24gY2Fubm90IGJlIHJldHJpZXZlZAorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgYmVmb3JlIGNyZWF0ZV9tbWFwX2J1ZmZlcigpCisgICAgICovCisgICAgaW50ICgqZ2V0X21tYXBfcG9zaXRpb24pKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1fb3V0ICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX3Bvc2l0aW9uICpwb3NpdGlvbik7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgYXVkaW9fc3RyZWFtX291dCBhdWRpb19zdHJlYW1fb3V0X3Q7CiAKQEAgLTQ0OSw2ICs0NDIsNjUgQEAKICAgICAgKi8KICAgICBpbnQgKCpnZXRfY2FwdHVyZV9wb3NpdGlvbikoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiAqc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90ICpmcmFtZXMsIGludDY0X3QgKnRpbWUpOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gc3RhcnQgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKiBjcmVhdGVfbW1hcF9idWZmZXIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgc3RhcnQoKQorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccmV0dXJuIDAgaW4gY2FzZSBvZmYgc3VjY2Vzcy4KKyAgICAgKiAgICAgICAgIC1FTk9TWVMgaWYgY2FsbGVkIG91dCBvZiBzZXF1ZW5jZSBvciBvbiBub24gbW1hcCBzdHJlYW0KKyAgICAgKi8KKyAgICBpbnQgKCpzdGFydCkoY29uc3Qgc3RydWN0IGF1ZGlvX3N0cmVhbV9pbiogc3RyZWFtKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRvIHN0b3AgYSBzdHJlYW0gb3BlcmF0aW5nIGluIG1tYXAgbW9kZS4KKyAgICAgKgorICAgICAqIFxub3RlIEZ1bmN0aW9uIG9ubHkgaW1wbGVtZW50ZWQgYnkgc3RyZWFtcyBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqCisgICAgICogXHBhcmFtW2luXSBzdHJlYW0gdGhlIHN0cmVhbSBvYmplY3QuCisgICAgICogXHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KKyAgICAgKiAgICAgICAgIC1FTk9TWVMgaWYgY2FsbGVkIG91dCBvZiBzZXF1ZW5jZSBvciBvbiBub24gbW1hcCBzdHJlYW0KKyAgICAgKi8KKyAgICBpbnQgKCpzdG9wKShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luKiBzdHJlYW0pOworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gb24gdGhlIG1tYXAgYnVmZmVyIHVzZWQgZm9yIGF1ZGlvCisgICAgICogc2FtcGxlcyB0cmFuc2Zlci4KKyAgICAgKgorICAgICAqIFxub3RlIEZ1bmN0aW9uIG9ubHkgaW1wbGVtZW50ZWQgYnkgc3RyZWFtcyBvcGVyYXRpbmcgaW4gbW1hcCBtb2RlLgorICAgICAqCisgICAgICogXHBhcmFtW2luXSBzdHJlYW0gdGhlIHN0cmVhbSBvYmplY3QuCisgICAgICogXHBhcmFtW2luXSBtaW5fc2l6ZV9mcmFtZXMgbWluaW11bSBidWZmZXIgc2l6ZSByZXF1ZXN0ZWQuIFRoZSBhY3R1YWwgYnVmZmVyCisgICAgICogICAgICAgIHNpemUgcmV0dXJuZWQgaW4gc3RydWN0IGF1ZGlvX21tYXBfYnVmZmVyX2luZm8gY2FuIGJlIGxhcmdlci4KKyAgICAgKiBccGFyYW1bb3V0XSBpbmZvIGFkZHJlc3MgYXQgd2hpY2ggdGhlIG1tYXAgYnVmZmVyIGluZm9ybWF0aW9uIHNob3VsZCBiZSByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIFxyZXR1cm4gMCBpZiB0aGUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQuCisgICAgICogICAgICAgICAtRU5PREVWIGluIGNhc2Ugb2YgaW5pdGlhbGl6YXRpb24gZXJyb3IKKyAgICAgKiAgICAgICAgIC1FSU5WQUwgaWYgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpcyB0b28gbGFyZ2UKKyAgICAgKiAgICAgICAgIC1FTk9TWVMgaWYgY2FsbGVkIG91dCBvZiBzZXF1ZW5jZSAoZS5nLiBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQpCisgICAgICovCisgICAgaW50ICgqY3JlYXRlX21tYXBfYnVmZmVyKShjb25zdCBzdHJ1Y3QgYXVkaW9fc3RyZWFtX2luICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IG1pbl9zaXplX2ZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhdWRpb19tbWFwX2J1ZmZlcl9pbmZvICppbmZvKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRvIHJlYWQgY3VycmVudCByZWFkL3dyaXRlIHBvc2l0aW9uIGluIHRoZSBtbWFwIGJ1ZmZlcgorICAgICAqIHdpdGggYXNzb2NpYXRlZCB0aW1lIHN0YW1wLgorICAgICAqCisgICAgICogXG5vdGUgRnVuY3Rpb24gb25seSBpbXBsZW1lbnRlZCBieSBzdHJlYW1zIG9wZXJhdGluZyBpbiBtbWFwIG1vZGUuCisgICAgICoKKyAgICAgKiBccGFyYW1baW5dIHN0cmVhbSB0aGUgc3RyZWFtIG9iamVjdC4KKyAgICAgKiBccGFyYW1bb3V0XSBwb3NpdGlvbiBhZGRyZXNzIGF0IHdoaWNoIHRoZSBtbWFwIHJlYWQvd3JpdGUgcG9zaXRpb24gc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAqCisgICAgICogXHJldHVybiAwIGlmIHRoZSBwb3NpdGlvbiBpcyBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuCisgICAgICogICAgICAgICAtRU5PREFUQSBpZiB0aGUgcG9zaXRpb24gY2Fubm90IGJlIHJldHJlaXZlZAorICAgICAqICAgICAgICAgLUVOT1NZUyBpZiBjYWxsZWQgYmVmb3JlIG1tYXBfcmVhZF9wb3NpdGlvbigpCisgICAgICovCisgICAgaW50ICgqZ2V0X21tYXBfcG9zaXRpb24pKGNvbnN0IHN0cnVjdCBhdWRpb19zdHJlYW1faW4gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX21tYXBfcG9zaXRpb24gKnBvc2l0aW9uKTsKIH07CiB0eXBlZGVmIHN0cnVjdCBhdWRpb19zdHJlYW1faW4gYXVkaW9fc3RyZWFtX2luX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW9fYWxzYW9wcy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19hbHNhb3BzLmgKaW5kZXggZjgzOTQxZS4uNmExN2EzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19hbHNhb3BzLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19hbHNhb3BzLmgKQEAgLTM4LDcgKzM4LDcgQEAKIHN0YXRpYyBpbmxpbmUgZW51bSBwY21fZm9ybWF0IHBjbV9mb3JtYXRfZnJvbV9hdWRpb19mb3JtYXQoYXVkaW9fZm9ybWF0X3QgZm9ybWF0KQogewogICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0jaWZkZWYgSEFWRV9CSUdfRU5ESUFOCisjaWYgSEFWRV9CSUdfRU5ESUFOCiAgICAgY2FzZSBBVURJT19GT1JNQVRfUENNXzE2X0JJVDoKICAgICAgICAgcmV0dXJuIFBDTV9GT1JNQVRfUzE2X0JFOwogICAgIGNhc2UgQVVESU9fRk9STUFUX1BDTV8yNF9CSVRfUEFDS0VEOgpAQCAtNzMsNyArNzMsNyBAQAogc3RhdGljIGlubGluZSBhdWRpb19mb3JtYXRfdCBhdWRpb19mb3JtYXRfZnJvbV9wY21fZm9ybWF0KGVudW0gcGNtX2Zvcm1hdCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSNpZmRlZiBIQVZFX0JJR19FTkRJQU4KKyNpZiBIQVZFX0JJR19FTkRJQU4KICAgICBjYXNlIFBDTV9GT1JNQVRfUzE2X0JFOgogICAgICAgICByZXR1cm4gQVVESU9fRk9STUFUX1BDTV8xNl9CSVQ7CiAgICAgY2FzZSBQQ01fRk9STUFUX1MyNF8zQkU6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2VmZmVjdC5oIGIvaW5jbHVkZS9oYXJkd2FyZS9hdWRpb19lZmZlY3QuaAppbmRleCA4YTg4NDE0Li4zMzY2ZTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2F1ZGlvX2VmZmVjdC5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvYXVkaW9fZWZmZWN0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGN1dGlscy9iaXRvcHMuaD4KIAotI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorI2luY2x1ZGUgPHN5c3RlbS9hdWRpb19lZmZlY3QuaD4KIAogCiBfX0JFR0lOX0RFQ0xTCkBAIC0zNiwyMzEgKzM2LDExIEBACiAvLyAgICAgIENvbW1vbiBEZWZpbml0aW9ucwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0vLwotLy8tLS0gRWZmZWN0IGRlc2NyaXB0b3Igc3RydWN0dXJlIGVmZmVjdF9kZXNjcmlwdG9yX3QKLS8vCi0KLS8vIFVuaXF1ZSBlZmZlY3QgSUQgKGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNpdGU6Ci0vLyAgaHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL2FzbjEvdXVpZC5odG1sKQotLy8gVGhpcyBmb3JtYXQgaXMgdXNlZCBmb3IgYm90aCAidHlwZSIgYW5kICJ1dWlkIiBmaWVsZHMgb2YgdGhlIGVmZmVjdCBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLS8vIC0gV2hlbiB1c2VkIGZvciBlZmZlY3QgdHlwZSBhbmQgdGhlIGVuZ2luZSBpcyBpbXBsZW1lbnRpbmcgYW5kIGVmZmVjdCBjb3JyZXNwb25kaW5nIHRvIGEgc3RhbmRhcmQKLS8vIE9wZW5TTCBFUyBpbnRlcmZhY2UsIHRoaXMgSUQgbXVzdCBiZSB0aGUgb25lIGRlZmluZWQgaW4gT3BlblNMRVNfSUlELmggZm9yIHRoYXQgaW50ZXJmYWNlLgotLy8gLSBXaGVuIHVzZWQgYXMgdXVpZCwgaXQgc2hvdWxkIGJlIGEgdW5pcXVlIFVVSUQgZm9yIHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4KLXR5cGVkZWYgc3RydWN0IGVmZmVjdF91dWlkX3MgewotICAgIHVpbnQzMl90IHRpbWVMb3c7Ci0gICAgdWludDE2X3QgdGltZU1pZDsKLSAgICB1aW50MTZfdCB0aW1lSGlBbmRWZXJzaW9uOwotICAgIHVpbnQxNl90IGNsb2NrU2VxOwotICAgIHVpbnQ4X3Qgbm9kZVs2XTsKLX0gZWZmZWN0X3V1aWRfdDsKLQotLy8gTWF4aW11bSBsZW5ndGggb2YgY2hhcmFjdGVyIHN0cmluZ3MgaW4gc3RydWN0dXJlcyBkZWZpbmVzIGJ5IHRoaXMgQVBJLgotI2RlZmluZSBFRkZFQ1RfU1RSSU5HX0xFTl9NQVggNjQKLQotLy8gTlVMTCBVVUlEIGRlZmluaXRpb24gKG1hdGNoZXMgU0xfSUlEX05VTExfKQotI2RlZmluZSBFRkZFQ1RfVVVJRF9JTklUSUFMSVpFUiB7IDB4ZWM3MTc4ZWMsIDB4ZTVlMSwgMHg0NDMyLCAweGEzZjQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IDB4NDYsIDB4NTcsIDB4ZTYsIDB4NzksIDB4NTIsIDB4MTAgfSB9Ci1zdGF0aWMgY29uc3QgZWZmZWN0X3V1aWRfdCBFRkZFQ1RfVVVJRF9OVUxMXyA9IEVGRkVDVF9VVUlEX0lOSVRJQUxJWkVSOwotc3RhdGljIGNvbnN0IGVmZmVjdF91dWlkX3QgKiBjb25zdCBFRkZFQ1RfVVVJRF9OVUxMID0gJkVGRkVDVF9VVUlEX05VTExfOwotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBFRkZFQ1RfVVVJRF9OVUxMX1NUUiA9ICJlYzcxNzhlYy1lNWUxLTQ0MzItYTNmNC00NjU3ZTY3OTUyMTAiOwotCi0KLS8vIFRoZSBlZmZlY3QgZGVzY3JpcHRvciBjb250YWlucyBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gZmFjaWxpdGF0ZSB0aGUgZW51bWVyYXRpb24gb2YgdGhlIGVmZmVjdAotLy8gZW5naW5lcyBwcmVzZW50IGluIGEgbGlicmFyeS4KLXR5cGVkZWYgc3RydWN0IGVmZmVjdF9kZXNjcmlwdG9yX3MgewotICAgIGVmZmVjdF91dWlkX3QgdHlwZTsgICAgIC8vIFVVSUQgb2YgdG8gdGhlIE9wZW5TTCBFUyBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgdGhpcyBlZmZlY3QKLSAgICBlZmZlY3RfdXVpZF90IHV1aWQ7ICAgICAvLyBVVUlEIGZvciB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24KLSAgICB1aW50MzJfdCBhcGlWZXJzaW9uOyAgICAvLyBWZXJzaW9uIG9mIHRoZSBlZmZlY3QgY29udHJvbCBBUEkgaW1wbGVtZW50ZWQKLSAgICB1aW50MzJfdCBmbGFnczsgICAgICAgICAvLyBlZmZlY3QgZW5naW5lIGNhcGFiaWxpdGllcy9yZXF1aXJlbWVudHMgZmxhZ3MgKHNlZSBiZWxvdykKLSAgICB1aW50MTZfdCBjcHVMb2FkOyAgICAgICAvLyBDUFUgbG9hZCBpbmRpY2F0aW9uIChzZWUgYmVsb3cpCi0gICAgdWludDE2X3QgbWVtb3J5VXNhZ2U7ICAgLy8gRGF0YSBNZW1vcnkgdXNhZ2UgKHNlZSBiZWxvdykKLSAgICBjaGFyICAgIG5hbWVbRUZGRUNUX1NUUklOR19MRU5fTUFYXTsgICAvLyBodW1hbiByZWFkYWJsZSBlZmZlY3QgbmFtZQotICAgIGNoYXIgICAgaW1wbGVtZW50b3JbRUZGRUNUX1NUUklOR19MRU5fTUFYXTsgICAgLy8gaHVtYW4gcmVhZGFibGUgZWZmZWN0IGltcGxlbWVudG9yIG5hbWUKLX0gZWZmZWN0X2Rlc2NyaXB0b3JfdDsKLQotLy8gQ1BVIGxvYWQgYW5kIG1lbW9yeSB1c2FnZSBpbmRpY2F0aW9uOiBlYWNoIGVmZmVjdCBpbXBsZW1lbnRhdGlvbiBtdXN0IHByb3ZpZGUgYW4gaW5kaWNhdGlvbiBvZgotLy8gaXRzIENQVSBhbmQgbWVtb3J5IHVzYWdlIGZvciB0aGUgYXVkaW8gZWZmZWN0IGZyYW1ld29yayB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGVmZmVjdHMKLS8vIGluc3RhbnRpYXRlZCBhdCBhIGdpdmVuIHRpbWUgb24gYSBnaXZlbiBwbGF0Zm9ybS4KLS8vIFRoZSBDUFUgbG9hZCBpcyBleHByZXNzZWQgaW4gMC4xIE1JUFMgdW5pdHMgYXMgZXN0aW1hdGVkIG9uIGFuIEFSTTlFIGNvcmUgKEFSTXY1VEUpIHdpdGggMCBXUy4KLS8vIFRoZSBtZW1vcnkgdXNhZ2UgaXMgZXhwcmVzc2VkIGluIEtCIGFuZCBpbmNsdWRlcyBvbmx5IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkKLQotLy8gRGVmaW5pdGlvbnMgZm9yIGZsYWdzIGZpZWxkIG9mIGVmZmVjdCBkZXNjcmlwdG9yLgotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IGRlc2NyaXB0aW9uICAgICAgICAgICAgICAgfCBiaXRzICAgICAgfCB2YWx1ZXMKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBjb25uZWN0aW9uIG1vZGUgICAgICAgICAgIHwgMC4uMiAgICAgIHwgMCBpbnNlcnQ6IGFmdGVyIHRyYWNrIHByb2Nlc3MKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIGF1eGlsaWFyeTogY29ubmVjdCB0byB0cmFjayBhdXhpbGlhcnkKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgb3V0cHV0IGFuZCB1c2Ugc2VuZCBsZXZlbAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIgcmVwbGFjZTogcmVwbGFjZXMgdHJhY2sgcHJvY2VzcyBmdW5jdGlvbjsKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIG11c3QgaW1wbGVtZW50IFNSQywgdm9sdW1lIGFuZCBtb25vIHRvIHN0ZXJlby4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAzIHByZSBwcm9jZXNzaW5nOiBhcHBsaWVkIGJlbG93IGF1ZGlvIEhBTCBvbiBpbnB1dAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDQgcG9zdCBwcm9jZXNzaW5nOiBhcHBsaWVkIGJlbG93IGF1ZGlvIEhBTCBvbiBvdXRwdXQKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCA1IC0gNyByZXNlcnZlZAotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IGluc2VydGlvbiBwcmVmZXJlbmNlICAgICAgfCAzLi41ICAgICAgfCAwIG5vbmUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIGZpcnN0IG9mIHRoZSBjaGFpbgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIgbGFzdCBvZiB0aGUgY2hhaW4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAzIGV4Y2x1c2l2ZSAob25seSBlZmZlY3QgaW4gdGhlIGluc2VydCBjaGFpbikKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCA0Li43IHJlc2VydmVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgVm9sdW1lIG1hbmFnZW1lbnQgICAgICAgICB8IDYuLjggICAgICB8IDAgbm9uZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgaW1wbGVtZW50cyB2b2x1bWUgY29udHJvbAotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIgcmVxdWlyZXMgdm9sdW1lIGluZGljYXRpb24KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCA0IHJlc2VydmVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgRGV2aWNlIGluZGljYXRpb24gICAgICAgICB8IDkuLjExICAgICB8IDAgbm9uZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDEgcmVxdWlyZXMgZGV2aWNlIHVwZGF0ZXMKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAyLCA0IHJlc2VydmVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgU2FtcGxlIGlucHV0IG1vZGUgICAgICAgICB8IDEyLi4xMyAgICB8IDEgZGlyZWN0OiBwcm9jZXNzKCkgZnVuY3Rpb24gb3IgRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBjb21tYW5kIG11c3Qgc3BlY2lmeSBhIGJ1ZmZlciBkZXNjcmlwdG9yCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMiBwcm92aWRlcjogcHJvY2VzcygpIGZ1bmN0aW9uIHVzZXMgdGhlCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBidWZmZXJQcm92aWRlciBpbmRpY2F0ZWQgYnkgdGhlCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBFRkZFQ1RfQ01EX1NFVF9DT05GSUcgY29tbWFuZCB0byByZXF1ZXN0IGlucHV0LgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgYnVmZmVycy4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAzIGJvdGg6IGJvdGggaW5wdXQgbW9kZXMgYXJlIHN1cHBvcnRlZAotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IFNhbXBsZSBvdXRwdXQgbW9kZSAgICAgICAgfCAxNC4uMTUgICAgfCAxIGRpcmVjdDogcHJvY2VzcygpIGZ1bmN0aW9uIG9yIEVGRkVDVF9DTURfU0VUX0NPTkZJRwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgY29tbWFuZCBtdXN0IHNwZWNpZnkgYSBidWZmZXIgZGVzY3JpcHRvcgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIgcHJvdmlkZXI6IHByb2Nlc3MoKSBmdW5jdGlvbiB1c2VzIHRoZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgYnVmZmVyUHJvdmlkZXIgaW5kaWNhdGVkIGJ5IHRoZQotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgRUZGRUNUX0NNRF9TRVRfQ09ORklHIGNvbW1hbmQgdG8gcmVxdWVzdCBvdXRwdXQKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGJ1ZmZlcnMuCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMyBib3RoOiBib3RoIG91dHB1dCBtb2RlcyBhcmUgc3VwcG9ydGVkCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgSGFyZHdhcmUgYWNjZWxlcmF0aW9uICAgICB8IDE2Li4xNyAgICB8IDAgTm8gaGFyZHdhcmUgYWNjZWxlcmF0aW9uCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSBub24gdHVubmVsZWQgaHcgYWNjZWxlcmF0aW9uOiB0aGUgcHJvY2VzcygpIGZ1bmN0aW9uCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICByZWFkcyB0aGUgc2FtcGxlcywgc2VuZCB0aGVtIHRvIEhXIGFjY2VsZXJhdGVkCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBlZmZlY3QgcHJvY2Vzc29yLCByZWFkcyBiYWNrIHRoZSBwcm9jZXNzZWQgc2FtcGxlcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgYW5kIHJldHVybnMgdGhlbSB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAyIHR1bm5lbGVkIGh3IGFjY2VsZXJhdGlvbjogdGhlIHByb2Nlc3MoKSBmdW5jdGlvbiBpcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgdHJhbnNwYXJlbnQuIFRoZSBlZmZlY3QgaW50ZXJmYWNlIGlzIG9ubHkgdXNlZCB0bwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgY29udHJvbCB0aGUgZWZmZWN0IGVuZ2luZS4gVGhpcyBtb2RlIGlzIHJlbGV2YW50IGZvcgotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgZ2xvYmFsIGVmZmVjdHMgYWN0dWFsbHkgYXBwbGllZCBieSB0aGUgYXVkaW8KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGhhcmR3YXJlIG9uIHRoZSBvdXRwdXQgc3RyZWFtLgotLy8gICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICB8IEF1ZGlvIE1vZGUgaW5kaWNhdGlvbiAgICAgfCAxOC4uMTkgICAgfCAwIG5vbmUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIHJlcXVpcmVzIGF1ZGlvIG1vZGUgdXBkYXRlcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIuLjMgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBBdWRpbyBzb3VyY2UgaW5kaWNhdGlvbiAgIHwgMjAuLjIxICAgIHwgMCBub25lCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSByZXF1aXJlcyBhdWRpbyBzb3VyY2UgdXBkYXRlcwotLy8gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8IDIuLjMgcmVzZXJ2ZWQKLS8vICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgfCBFZmZlY3Qgb2ZmbG9hZCBzdXBwb3J0ZWQgIHwgMjIgICAgICAgIHwgMCBUaGUgZWZmZWN0IGNhbm5vdCBiZSBvZmZsb2FkZWQgdG8gYW4gYXVkaW8gRFNQCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgMSBUaGUgZWZmZWN0IGNhbiBiZSBvZmZsb2FkZWQgdG8gYW4gYXVkaW8gRFNQCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIHwgUHJvY2VzcyBmdW5jdGlvbiBub3QgICAgICB8IDIzICAgICAgICB8IDAgVGhlIGVmZmVjdCBpbXBsZW1lbnRzIGEgcHJvY2VzcyBmdW5jdGlvbi4KLS8vICB8IGltcGxlbWVudGVkICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAxIFRoZSBlZmZlY3QgZG9lcyBub3QgaW1wbGVtZW50IGEgcHJvY2VzcyBmdW5jdGlvbjoKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIGVuYWJsaW5nIHRoZSBlZmZlY3QgaGFzIG5vIGltcGFjdCBvbiBsYXRlbmN5IG9yCi0vLyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICBDUFUgbG9hZC4KLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIEVmZmVjdCBpbXBsZW1lbnRhdGlvbnMgc2V0dGluZyB0aGlzIGZsYWcgZG8gbm90IGhhdmUKLS8vICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgIHRvIGltcGxlbWVudCBhIHByb2Nlc3MgZnVuY3Rpb24uCi0vLyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBJbnNlcnQgbW9kZQotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX1NISUZUICAgICAgICAgIDAKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9TSVpFICAgICAgICAgICAzCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfTUFTSyAgICAgICAgICAgKCgoMSA8PCBFRkZFQ1RfRkxBR19UWVBFX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfSU5TRVJUICAgICAgICAgKDAgPDwgRUZGRUNUX0ZMQUdfVFlQRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9BVVhJTElBUlkgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19UWVBFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19UWVBFX1JFUExBQ0UgICAgICAgICgyIDw8IEVGRkVDVF9GTEFHX1RZUEVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1RZUEVfUFJFX1BST0MgICAgICAgKDMgPDwgRUZGRUNUX0ZMQUdfVFlQRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVFlQRV9QT1NUX1BST0MgICAgICAoNCA8PCBFRkZFQ1RfRkxBR19UWVBFX1NISUZUKQotCi0vLyBJbnNlcnQgcHJlZmVyZW5jZQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQgICAgICAgIChFRkZFQ1RfRkxBR19UWVBFX1NISUZUICsgRUZGRUNUX0ZMQUdfVFlQRV9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfU0laRSAgICAgICAgIDMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5TRVJUX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0lOU0VSVF9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9BTlkgICAgICAgICAgKDAgPDwgRUZGRUNUX0ZMQUdfSU5TRVJUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlNFUlRfRklSU1QgICAgICAgICgxIDw8IEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5TRVJUX0xBU1QgICAgICAgICAoMiA8PCBFRkZFQ1RfRkxBR19JTlNFUlRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOU0VSVF9FWENMVVNJVkUgICAgKDMgPDwgRUZGRUNUX0ZMQUdfSU5TRVJUX1NISUZUKQotCi0KLS8vIFZvbHVtZSBjb250cm9sCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX0lOU0VSVF9TSElGVCArIEVGRkVDVF9GTEFHX0lOU0VSVF9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19WT0xVTUVfU0laRSAgICAgICAgIDMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVk9MVU1FX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX1ZPTFVNRV9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19WT0xVTUVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX1ZPTFVNRV9DVFJMICAgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfVk9MVU1FX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19WT0xVTUVfSU5EICAgICAgICAgICgyIDw8IEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfVk9MVU1FX05PTkUgICAgICAgICAoMCA8PCBFRkZFQ1RfRkxBR19WT0xVTUVfU0hJRlQpCi0KLS8vIERldmljZSBpbmRpY2F0aW9uCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0RFVklDRV9TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX1ZPTFVNRV9TSElGVCArIEVGRkVDVF9GTEFHX1ZPTFVNRV9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19ERVZJQ0VfU0laRSAgICAgICAgIDMKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfREVWSUNFX01BU0sgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0RFVklDRV9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBFRkZFQ1RfRkxBR19ERVZJQ0VfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0RFVklDRV9JTkQgICAgICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfREVWSUNFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19ERVZJQ0VfTk9ORSAgICAgICAgICgwIDw8IEVGRkVDVF9GTEFHX0RFVklDRV9TSElGVCkKLQotLy8gU2FtcGxlIGlucHV0IG1vZGVzCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0lOUFVUX1NISUZUICAgICAgICAgKEVGRkVDVF9GTEFHX0RFVklDRV9TSElGVCArIEVGRkVDVF9GTEFHX0RFVklDRV9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlBVVF9TSVpFICAgICAgICAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSU5QVVRfTUFTSyAgICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0lOUFVUX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX0lOUFVUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlBVVF9ESVJFQ1QgICAgICAgICgxIDw8IEVGRkVDVF9GTEFHX0lOUFVUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlBVVF9QUk9WSURFUiAgICAgICgyIDw8IEVGRkVDVF9GTEFHX0lOUFVUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19JTlBVVF9CT1RIICAgICAgICAgICgzIDw8IEVGRkVDVF9GTEFHX0lOUFVUX1NISUZUKQotCi0vLyBTYW1wbGUgb3V0cHV0IG1vZGVzCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09VVFBVVF9TSElGVCAgICAgICAgKEVGRkVDVF9GTEFHX0lOUFVUX1NISUZUICsgRUZGRUNUX0ZMQUdfSU5QVVRfU0laRSkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX1NJWkUgICAgICAgICAyCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09VVFBVVF9NQVNLICAgICAgICAgKCgoMSA8PCBFRkZFQ1RfRkxBR19PVVRQVVRfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfT1VUUFVUX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19PVVRQVVRfRElSRUNUICAgICAgICgxIDw8IEVGRkVDVF9GTEFHX09VVFBVVF9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT1VUUFVUX1BST1ZJREVSICAgICAoMiA8PCBFRkZFQ1RfRkxBR19PVVRQVVRfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09VVFBVVF9CT1RIICAgICAgICAgKDMgPDwgRUZGRUNUX0ZMQUdfT1VUUFVUX1NISUZUKQotCi0vLyBIYXJkd2FyZSBhY2NlbGVyYXRpb24gbW9kZQotI2RlZmluZSBFRkZFQ1RfRkxBR19IV19BQ0NfU0hJRlQgICAgICAgIChFRkZFQ1RfRkxBR19PVVRQVVRfU0hJRlQgKyBFRkZFQ1RfRkxBR19PVVRQVVRfU0laRSkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSFdfQUNDX1NJWkUgICAgICAgICAyCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0hXX0FDQ19NQVNLICAgICAgICAgKCgoMSA8PCBFRkZFQ1RfRkxBR19IV19BQ0NfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfSFdfQUNDX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19IV19BQ0NfU0lNUExFICAgICAgICgxIDw8IEVGRkVDVF9GTEFHX0hXX0FDQ19TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfSFdfQUNDX1RVTk5FTCAgICAgICAoMiA8PCBFRkZFQ1RfRkxBR19IV19BQ0NfU0hJRlQpCi0KLS8vIEF1ZGlvIG1vZGUgaW5kaWNhdGlvbgotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NISUZUICAgIChFRkZFQ1RfRkxBR19IV19BQ0NfU0hJRlQgKyBFRkZFQ1RfRkxBR19IV19BQ0NfU0laRSkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9TSVpFICAgICAyCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX01PREVfTUFTSyAgICAgKCgoMSA8PCBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NJWkUpIC0xKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX0FVRElPX01PREVfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX0FVRElPX01PREVfSU5EICAgICAgKDEgPDwgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9OT05FICAgICAoMCA8PCBFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NISUZUKQotCi0vLyBBdWRpbyBzb3VyY2UgaW5kaWNhdGlvbgotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0hJRlQgIChFRkZFQ1RfRkxBR19BVURJT19NT0RFX1NISUZUICsgRUZGRUNUX0ZMQUdfQVVESU9fTU9ERV9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0laRSAgIDIKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX01BU0sgICAoKCgxIDw8IEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NISUZUKQotI2RlZmluZSBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfSU5EICAgICgxIDw8IEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX05PTkUgICAoMCA8PCBFRkZFQ1RfRkxBR19BVURJT19TT1VSQ0VfU0hJRlQpCi0KLS8vIEVmZmVjdCBvZmZsb2FkIGluZGljYXRpb24KLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSElGVCAgICAgICAoRUZGRUNUX0ZMQUdfQVVESU9fU09VUkNFX1NISUZUICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGRkVDVF9GTEFHX0FVRElPX1NPVVJDRV9TSVpFKQotI2RlZmluZSBFRkZFQ1RfRkxBR19PRkZMT0FEX1NJWkUgICAgICAgIDEKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9NQVNLICAgICAgICAoKCgxIDw8IEVGRkVDVF9GTEFHX09GRkxPQURfU0laRSkgLTEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IEVGRkVDVF9GTEFHX09GRkxPQURfU0hJRlQpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX09GRkxPQURfU1VQUE9SVEVEICAgKDEgPDwgRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSElGVCkKLQotLy8gRWZmZWN0IGhhcyBubyBwcm9jZXNzIGluZGljYXRpb24KLSNkZWZpbmUgRUZGRUNUX0ZMQUdfTk9fUFJPQ0VTU19TSElGVCAgICAgICAoRUZGRUNUX0ZMQUdfT0ZGTE9BRF9TSElGVCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRkZFQ1RfRkxBR19PRkZMT0FEX1NJWkUpCi0jZGVmaW5lIEVGRkVDVF9GTEFHX05PX1BST0NFU1NfU0laRSAgICAgICAgMQotI2RlZmluZSBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX01BU0sgICAgICAgICgoKDEgPDwgRUZGRUNUX0ZMQUdfTk9fUFJPQ0VTU19TSVpFKSAtMSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgRUZGRUNUX0ZMQUdfTk9fUFJPQ0VTU19TSElGVCkKLSNkZWZpbmUgRUZGRUNUX0ZMQUdfTk9fUFJPQ0VTUyAgICAgICAgICAoMSA8PCBFRkZFQ1RfRkxBR19OT19QUk9DRVNTX1NISUZUKQotCiAjZGVmaW5lIEVGRkVDVF9NQUtFX0FQSV9WRVJTSU9OKE0sIG0pICAoKChNKTw8MTYpIHwgKChtKSAmIDB4RkZGRikpCiAjZGVmaW5lIEVGRkVDVF9BUElfVkVSU0lPTl9NQUpPUih2KSAgICAoKHYpPj4xNikKICNkZWZpbmUgRUZGRUNUX0FQSV9WRVJTSU9OX01JTk9SKHYpICAgICgobSkgJiAweEZGRkYpCiAKIAotCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyAgICAgIEVmZmVjdCBjb250cm9sIGludGVyZmFjZQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjg4LDE1ICs2OCw2IEBACiAvLyB0eXBlIGFuZCByZXR1cm4gaXRzIGFkZHJlc3MgYXMgZWZmZWN0X2hhbmRsZV90CiB0eXBlZGVmIHN0cnVjdCBlZmZlY3RfaW50ZXJmYWNlX3MgKiplZmZlY3RfaGFuZGxlX3Q7CiAKLQotLy8gRm9yd2FyZCBkZWZpbml0aW9uIG9mIHR5cGUgYXVkaW9fYnVmZmVyX3QKLXR5cGVkZWYgc3RydWN0IGF1ZGlvX2J1ZmZlcl9zIGF1ZGlvX2J1ZmZlcl90OwotCi0KLQotCi0KLQogLy8gRWZmZWN0IGNvbnRyb2wgaW50ZXJmYWNlIGRlZmluaXRpb24KIHN0cnVjdCBlZmZlY3RfaW50ZXJmYWNlX3MgewogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC00MjgsNDk5ICsxOTksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX2J1ZmZlcl90ICpvdXRCdWZmZXIpOwogfTsKIAotCi0vLwotLy8tLS0gU3RhbmRhcmRpemVkIGNvbW1hbmQgY29kZXMgZm9yIGNvbW1hbmQoKSBmdW5jdGlvbgotLy8KLWVudW0gZWZmZWN0X2NvbW1hbmRfZSB7Ci0gICBFRkZFQ1RfQ01EX0lOSVQsICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIGVmZmVjdCBlbmdpbmUKLSAgIEVGRkVDVF9DTURfU0VUX0NPTkZJRywgICAgICAgICAgIC8vIGNvbmZpZ3VyZSBlZmZlY3QgZW5naW5lIChzZWUgZWZmZWN0X2NvbmZpZ190KQotICAgRUZGRUNUX0NNRF9SRVNFVCwgICAgICAgICAgICAgICAgLy8gcmVzZXQgZWZmZWN0IGVuZ2luZQotICAgRUZGRUNUX0NNRF9FTkFCTEUsICAgICAgICAgICAgICAgLy8gZW5hYmxlIGVmZmVjdCBwcm9jZXNzCi0gICBFRkZFQ1RfQ01EX0RJU0FCTEUsICAgICAgICAgICAgICAvLyBkaXNhYmxlIGVmZmVjdCBwcm9jZXNzCi0gICBFRkZFQ1RfQ01EX1NFVF9QQVJBTSwgICAgICAgICAgICAvLyBzZXQgcGFyYW1ldGVyIGltbWVkaWF0ZWx5IChzZWUgZWZmZWN0X3BhcmFtX3QpCi0gICBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9ERUZFUlJFRCwgICAvLyBzZXQgcGFyYW1ldGVyIGRlZmVycmVkCi0gICBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9DT01NSVQsICAgICAvLyBjb21taXQgcHJldmlvdXMgc2V0IHBhcmFtZXRlciBkZWZlcnJlZAotICAgRUZGRUNUX0NNRF9HRVRfUEFSQU0sICAgICAgICAgICAgLy8gZ2V0IHBhcmFtZXRlcgotICAgRUZGRUNUX0NNRF9TRVRfREVWSUNFLCAgICAgICAgICAgLy8gc2V0IGF1ZGlvIGRldmljZSAoc2VlIGF1ZGlvLmgsIGF1ZGlvX2RldmljZXNfdCkKLSAgIEVGRkVDVF9DTURfU0VUX1ZPTFVNRSwgICAgICAgICAgIC8vIHNldCB2b2x1bWUKLSAgIEVGRkVDVF9DTURfU0VUX0FVRElPX01PREUsICAgICAgIC8vIHNldCB0aGUgYXVkaW8gbW9kZSAobm9ybWFsLCByaW5nLCAuLi4pCi0gICBFRkZFQ1RfQ01EX1NFVF9DT05GSUdfUkVWRVJTRSwgICAvLyBjb25maWd1cmUgZWZmZWN0IGVuZ2luZSByZXZlcnNlIHN0cmVhbShzZWUgZWZmZWN0X2NvbmZpZ190KQotICAgRUZGRUNUX0NNRF9TRVRfSU5QVVRfREVWSUNFLCAgICAgLy8gc2V0IGNhcHR1cmUgZGV2aWNlIChzZWUgYXVkaW8uaCwgYXVkaW9fZGV2aWNlc190KQotICAgRUZGRUNUX0NNRF9HRVRfQ09ORklHLCAgICAgICAgICAgLy8gcmVhZCBlZmZlY3QgZW5naW5lIGNvbmZpZ3VyYXRpb24KLSAgIEVGRkVDVF9DTURfR0VUX0NPTkZJR19SRVZFUlNFLCAgIC8vIHJlYWQgY29uZmlndXJlIGVmZmVjdCBlbmdpbmUgcmV2ZXJzZSBzdHJlYW0gY29uZmlndXJhdGlvbgotICAgRUZGRUNUX0NNRF9HRVRfRkVBVFVSRV9TVVBQT1JURURfQ09ORklHUywvLyBnZXQgYWxsIHN1cHBvcnRlZCBjb25maWd1cmF0aW9ucyBmb3IgYSBmZWF0dXJlLgotICAgRUZGRUNUX0NNRF9HRVRfRkVBVFVSRV9DT05GSUcsICAgLy8gZ2V0IGN1cnJlbnQgZmVhdHVyZSBjb25maWd1cmF0aW9uCi0gICBFRkZFQ1RfQ01EX1NFVF9GRUFUVVJFX0NPTkZJRywgICAvLyBzZXQgY3VycmVudCBmZWF0dXJlIGNvbmZpZ3VyYXRpb24KLSAgIEVGRkVDVF9DTURfU0VUX0FVRElPX1NPVVJDRSwgICAgIC8vIHNldCB0aGUgYXVkaW8gc291cmNlIChzZWUgYXVkaW8uaCwgYXVkaW9fc291cmNlX3QpCi0gICBFRkZFQ1RfQ01EX09GRkxPQUQsICAgICAgICAgICAgICAvLyBzZXQgaWYgZWZmZWN0IHRocmVhZCBpcyBhbiBvZmZsb2FkIG9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbmQgdGhlIGlvSGFuZGxlIG9mIHRoZSBlZmZlY3QgdGhyZWFkCi0gICBFRkZFQ1RfQ01EX0ZJUlNUX1BST1BSSUVUQVJZID0gMHgxMDAwMCAvLyBmaXJzdCBwcm9wcmlldGFyeSBjb21tYW5kIGNvZGUKLX07Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfSU5JVAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgSW5pdGlhbGl6ZSBlZmZlY3QgZW5naW5lOiBBbGwgY29uZmlndXJhdGlvbnMgcmV0dXJuIHRvIGRlZmF1bHQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoaW50KQotLy8gIGRhdGE6IHN0YXR1cwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfQ09ORklHCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBBcHBseSBuZXcgYXVkaW8gcGFyYW1ldGVycyBjb25maWd1cmF0aW9ucyBmb3IgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X2NvbmZpZ190KQotLy8gIGRhdGE6IGVmZmVjdF9jb25maWdfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1JFU0VUCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBSZXNldCB0aGUgZWZmZWN0IGVuZ2luZS4gS2VlcCBjb25maWd1cmF0aW9uIGJ1dCByZXNldHMgc3RhdGUgYW5kIGJ1ZmZlciBjb250ZW50Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9FTkFCTEUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIEVuYWJsZSB0aGUgcHJvY2Vzcy4gQ2FsbGVkIGJ5IHRoZSBmcmFtZXdvcmsgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIHByb2Nlc3MoKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0RJU0FCTEUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIERpc2FibGUgdGhlIHByb2Nlc3MuIENhbGxlZCBieSB0aGUgZnJhbWV3b3JrIGFmdGVyIHRoZSBsYXN0IGNhbGwgdG8gcHJvY2VzcygpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGludCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX1BBUkFNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBTZXQgYSBwYXJhbWV0ZXIgYW5kIGFwcGx5IGl0IGltbWVkaWF0ZWx5Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X3BhcmFtX3QpICsgc2l6ZSBvZiBwYXJhbSBhbmQgdmFsdWUKLS8vICBkYXRhOiBlZmZlY3RfcGFyYW1fdCArIHBhcmFtICsgdmFsdWUuIFNlZSBlZmZlY3RfcGFyYW1fdCBkZWZpbml0aW9uIGJlbG93IGZvciB2YWx1ZSBvZmZzZXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoaW50KQotLy8gIGRhdGE6IHN0YXR1cwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfUEFSQU1fREVGRVJSRUQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldCBhIHBhcmFtZXRlciBidXQgYXBwbHkgaXQgb25seSB3aGVuIHJlY2VpdmluZyBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9DT01NSVQgY29tbWFuZAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGVmZmVjdF9wYXJhbV90KSArIHNpemUgb2YgcGFyYW0gYW5kIHZhbHVlCi0vLyAgZGF0YTogZWZmZWN0X3BhcmFtX3QgKyBwYXJhbSArIHZhbHVlLiBTZWUgZWZmZWN0X3BhcmFtX3QgZGVmaW5pdGlvbiBiZWxvdyBmb3IgdmFsdWUgb2Zmc2V0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfUEFSQU1fQ09NTUlUCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBBcHBseSBhbGwgcHJldmlvdXNseSByZWNlaXZlZCBFRkZFQ1RfQ01EX1NFVF9QQVJBTV9ERUZFUlJFRCBjb21tYW5kcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9QQVJBTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgR2V0IGEgcGFyYW1ldGVyIHZhbHVlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X3BhcmFtX3QpICsgc2l6ZSBvZiBwYXJhbQotLy8gIGRhdGE6IGVmZmVjdF9wYXJhbV90ICsgcGFyYW0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X3BhcmFtX3QpICsgc2l6ZSBvZiBwYXJhbSBhbmQgdmFsdWUKLS8vICBkYXRhOiBlZmZlY3RfcGFyYW1fdCArIHBhcmFtICsgdmFsdWUuIFNlZSBlZmZlY3RfcGFyYW1fdCBkZWZpbml0aW9uIGJlbG93IGZvciB2YWx1ZSBvZmZzZXQKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX0RFVklDRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IHRoZSByZW5kZXJpbmcgZGV2aWNlIHRoZSBhdWRpbyBvdXRwdXQgcGF0aCBpcyBjb25uZWN0ZWQgdG8uIFNlZSBhdWRpby5oLCBhdWRpb19kZXZpY2VzX3QKLS8vICBmb3IgZGV2aWNlIHZhbHVlcy4KLS8vICBUaGUgZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3Qgc2V0IEVGRkVDVF9GTEFHX0RFVklDRV9JTkQgZmxhZyBpbiBpdHMgZGVzY3JpcHRvciB0byByZWNlaXZlIHRoaXMKLS8vICBjb21tYW5kIHdoZW4gdGhlIGRldmljZSBjaGFuZ2VzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpCi0vLyAgZGF0YTogdWludDMyX3QKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9WT0xVTUUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldCBhbmQgZ2V0IHZvbHVtZS4gVXNlZCBieSBhdWRpbyBmcmFtZXdvcmsgdG8gZGVsZWdhdGUgdm9sdW1lIGNvbnRyb2wgdG8gZWZmZWN0IGVuZ2luZS4KLS8vICBUaGUgZWZmZWN0IGltcGxlbWVudGF0aW9uIG11c3Qgc2V0IEVGRkVDVF9GTEFHX1ZPTFVNRV9JTkQgb3IgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgZmxhZyBpbgotLy8gIGl0cyBkZXNjcmlwdG9yIHRvIHJlY2VpdmUgdGhpcyBjb21tYW5kIGJlZm9yZSBldmVyeSBjYWxsIHRvIHByb2Nlc3MoKSBmdW5jdGlvbgotLy8gIElmIEVGRkVDVF9GTEFHX1ZPTFVNRV9DVFJMIGZsYWcgaXMgc2V0IGluIHRoZSBlZmZlY3QgZGVzY3JpcHRvciwgdGhlIGVmZmVjdCBlbmdpbmUgbXVzdCByZXR1cm4KLS8vICB0aGUgdm9sdW1lIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgYmVmb3JlIHRoZSBlZmZlY3QgaXMgcHJvY2Vzc2VkLiBUaGUgb3ZlcmFsbCB2b2x1bWUgKHRoZSB2b2x1bWUKLS8vICBhY3R1YWxseSBhcHBsaWVkIGJ5IHRoZSBlZmZlY3QgZW5naW5lIG11bHRpcGxpZWQgYnkgdGhlIHJldHVybmVkIHZhbHVlKSBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlCi0vLyAgaW5kaWNhdGVkIGluIHRoZSBjb21tYW5kLgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogbiAqIHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiB2b2x1bWUgZm9yIGVhY2ggY2hhbm5lbCBkZWZpbmVkIGluIGVmZmVjdF9jb25maWdfdCBmb3Igb3V0cHV0IGJ1ZmZlciBleHByZXNzZWQgaW4KLS8vICAgICAgOC4yNCBmaXhlZCBwb2ludCBmb3JtYXQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBuICogc2l6ZW9mKHVpbnQzMl90KSAvIDAKLS8vICBkYXRhOiAtIGlmIEVGRkVDVF9GTEFHX1ZPTFVNRV9DVFJMIGlzIHNldCBpbiBlZmZlY3QgZGVzY3JpcHRvcjoKLS8vICAgICAgICAgICAgICB2b2x1bWUgZm9yIGVhY2ggY2hhbm5lbCBkZWZpbmVkIGluIGVmZmVjdF9jb25maWdfdCBmb3Igb3V0cHV0IGJ1ZmZlciBleHByZXNzZWQgaW4KLS8vICAgICAgICAgICAgICA4LjI0IGZpeGVkIHBvaW50IGZvcm1hdAotLy8gICAgICAgIC0gaWYgRUZGRUNUX0ZMQUdfVk9MVU1FX0NUUkwgaXMgbm90IHNldCBpbiBlZmZlY3QgZGVzY3JpcHRvcjoKLS8vICAgICAgICAgICAgICBOL0EKLS8vICBJdCBpcyBsZWdhbCB0byByZWNlaXZlIGEgbnVsbCBwb2ludGVyIGFzIHBSZXBseURhdGEgaW4gd2hpY2ggY2FzZSB0aGUgZWZmZWN0IGZyYW1ld29yayBoYXMKLS8vICBkZWxlZ2F0ZWQgdm9sdW1lIGNvbnRyb2wgdG8gYW5vdGhlciBlZmZlY3QKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX0FVRElPX01PREUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldCB0aGUgYXVkaW8gbW9kZS4gVGhlIGVmZmVjdCBpbXBsZW1lbnRhdGlvbiBtdXN0IHNldCBFRkZFQ1RfRkxBR19BVURJT19NT0RFX0lORCBmbGFnIGluIGl0cwotLy8gIGRlc2NyaXB0b3IgdG8gcmVjZWl2ZSB0aGlzIGNvbW1hbmQgd2hlbiB0aGUgYXVkaW8gbW9kZSBjaGFuZ2VzLgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IGF1ZGlvX21vZGVfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX0NPTkZJR19SRVZFUlNFCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBBcHBseSBuZXcgYXVkaW8gcGFyYW1ldGVycyBjb25maWd1cmF0aW9ucyBmb3IgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIG9mIHJldmVyc2Ugc3RyZWFtLgotLy8gIEFuIGV4YW1wbGUgb2YgcmV2ZXJzZSBzdHJlYW0gaXMgdGhlIGVjaG8gcmVmZXJlbmNlIHN1cHBsaWVkIHRvIGFuIEFjb3VzdGljIEVjaG8gQ2FuY2VsZXIuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X2NvbmZpZ190KQotLy8gIGRhdGE6IGVmZmVjdF9jb25maWdfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihpbnQpCi0vLyAgZGF0YTogc3RhdHVzCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX1NFVF9JTlBVVF9ERVZJQ0UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldCB0aGUgY2FwdHVyZSBkZXZpY2UgdGhlIGF1ZGlvIGlucHV0IHBhdGggaXMgY29ubmVjdGVkIHRvLiBTZWUgYXVkaW8uaCwgYXVkaW9fZGV2aWNlc190Ci0vLyAgZm9yIGRldmljZSB2YWx1ZXMuCi0vLyAgVGhlIGVmZmVjdCBpbXBsZW1lbnRhdGlvbiBtdXN0IHNldCBFRkZFQ1RfRkxBR19ERVZJQ0VfSU5EIGZsYWcgaW4gaXRzIGRlc2NyaXB0b3IgdG8gcmVjZWl2ZSB0aGlzCi0vLyAgY29tbWFuZCB3aGVuIHRoZSBkZXZpY2UgY2hhbmdlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KQotLy8gIGRhdGE6IHVpbnQzMl90Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9HRVRfQ09ORklHCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZXNjcmlwdGlvbjoKLS8vICBSZWFkIGF1ZGlvIHBhcmFtZXRlcnMgY29uZmlndXJhdGlvbnMgZm9yIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMAotLy8gIGRhdGE6IE4vQQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZihlZmZlY3RfY29uZmlnX3QpCi0vLyAgZGF0YTogZWZmZWN0X2NvbmZpZ190Ci0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX0dFVF9DT05GSUdfUkVWRVJTRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgUmVhZCBhdWRpbyBwYXJhbWV0ZXJzIGNvbmZpZ3VyYXRpb25zIGZvciBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgb2YgcmV2ZXJzZSBzdHJlYW0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IDAKLS8vICBkYXRhOiBOL0EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YoZWZmZWN0X2NvbmZpZ190KQotLy8gIGRhdGE6IGVmZmVjdF9jb25maWdfdAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9HRVRfRkVBVFVSRV9TVVBQT1JURURfQ09ORklHUwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgUXVlcmllcyBmb3Igc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zIGZvciBhIHBhcnRpY3VsYXIgZmVhdHVyZSAoZS5nLiBnZXQgdGhlIHN1cHBvcnRlZAotLy8gY29tYmluYXRpb25zIG9mIG1haW4gYW5kIGF1eGlsaWFyeSBjaGFubmVscyBmb3IgYSBub2lzZSBzdXBwcmVzc29yKS4KLS8vIFRoZSBjb21tYW5kIHBhcmFtZXRlciBpcyB0aGUgZmVhdHVyZSBpZGVudGlmaWVyIChTZWUgZWZmZWN0X2ZlYXR1cmVfZSBmb3IgYSBsaXN0IG9mIGRlZmluZWQKLS8vIGZlYXR1cmVzKSBmb2xsb3dlZCBieSB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9yIHRvIHJldHVybi4KLS8vIFRoZSByZXBseSBpcyBjb21wb3NlZCBvZjoKLS8vICAtIHN0YXR1cyAodWludDMyX3QpOgotLy8gICAgICAgICAgLSAwIGlmIGZlYXR1cmUgaXMgc3VwcG9ydGVkCi0vLyAgICAgICAgICAtIC1FTk9TWVMgaWYgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCwKLS8vICAgICAgICAgIC0gLUVOT01FTSBpZiB0aGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnV0IHRoZSB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zCi0vLyAgICAgICAgICBleGNlZWRzIHRoZSBtYXhpbXVtIG51bWJlciBpbmRpY2F0ZWQgYnkgdGhlIGNhbGxlci4KLS8vICAtIHRvdGFsIG51bWJlciBvZiBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbnMgKHVpbnQzMl90KQotLy8gIC0gYW4gYXJyYXkgb2YgY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycy4KLS8vIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJldHVybmVkIG11c3Qgbm90IGV4Y2VlZCB0aGUgbWF4aW11bSBudW1iZXIgaW5kaWNhdGVkIGJ5Ci0vLyB0aGUgY2FsbGVyLgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogMiB4IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiBlZmZlY3RfZmVhdHVyZV9lICsgbWF4aW11bSBudW1iZXIgb2YgY29uZmlndXJhdGlvbnMgdG8gcmV0dXJuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogMiB4IHNpemVvZih1aW50MzJfdCkgKyBuIHggc2l6ZW9mICg8Y29uZmlnIGRlc2NyaXB0b3I+KQotLy8gIGRhdGE6IHN0YXR1cyArIHRvdGFsIG51bWJlciBvZiBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgKyBhcnJheSBvZiBuIGNvbmZpZyBkZXNjcmlwdG9ycwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9HRVRfRkVBVFVSRV9DT05GSUcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFJldHJpZXZlcyBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gZmVhdHVyZS4KLS8vIFRoZSByZXBseSBzdGF0dXMgaXM6Ci0vLyAgICAgIC0gMCBpZiBmZWF0dXJlIGlzIHN1cHBvcnRlZAotLy8gICAgICAtIC1FTk9TWVMgaWYgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCwKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbW1hbmQgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiBlZmZlY3RfZmVhdHVyZV9lCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyByZXBseSBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZiAoPGNvbmZpZyBkZXNjcmlwdG9yPikKLS8vICBkYXRhOiBzdGF0dXMgKyBjb25maWcgZGVzY3JpcHRvcgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9TRVRfRkVBVFVSRV9DT05GSUcKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIFNldHMgY3VycmVudCBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGZlYXR1cmUuCi0vLyBUaGUgcmVwbHkgc3RhdHVzIGlzOgotLy8gICAgICAtIDAgaWYgZmVhdHVyZSBpcyBzdXBwb3J0ZWQKLS8vICAgICAgLSAtRU5PU1lTIGlmIHRoZSBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQsCi0vLyAgICAgIC0gLUVJTlZBTCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mICg8Y29uZmlnIGRlc2NyaXB0b3I+KQotLy8gIGRhdGE6IGVmZmVjdF9mZWF0dXJlX2UgKyBjb25maWcgZGVzY3JpcHRvcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiBzdGF0dXMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGNvbW1hbmQ6IEVGRkVDVF9DTURfU0VUX0FVRElPX1NPVVJDRQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgU2V0IHRoZSBhdWRpbyBzb3VyY2UgdGhlIGNhcHR1cmUgcGF0aCBpcyBjb25maWd1cmVkIGZvciAoQ2FtY29yZGVyLCB2b2ljZSByZWNvZ25pdGlvbi4uLikuCi0vLyAgU2VlIGF1ZGlvLmgsIGF1ZGlvX3NvdXJjZV90IGZvciB2YWx1ZXMuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb21tYW5kIGZvcm1hdDoKLS8vICBzaXplOiBzaXplb2YodWludDMyX3QpCi0vLyAgZGF0YTogdWludDMyX3QKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHJlcGx5IGZvcm1hdDoKLS8vICBzaXplOiAwCi0vLyAgZGF0YTogTi9BCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBjb21tYW5kOiBFRkZFQ1RfQ01EX09GRkxPQUQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlc2NyaXB0aW9uOgotLy8gIDEuaW5kaWNhdGUgaWYgdGhlIHBsYXliYWNrIHRocmVhZCB0aGUgZWZmZWN0IGlzIGF0dGFjaGVkIHRvIGlzIG9mZmxvYWRlZCBvciBub3QKLS8vICAyLnVwZGF0ZSB0aGUgaW8gaGFuZGxlIG9mIHRoZSBwbGF5YmFjayB0aHJlYWQgdGhlIGVmZmVjdCBpcyBhdHRhY2hlZCB0bwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZCBmb3JtYXQ6Ci0vLyAgc2l6ZTogc2l6ZW9mKGVmZmVjdF9vZmZsb2FkX3BhcmFtX3QpCi0vLyAgZGF0YTogZWZmZWN0X29mZmxvYWRfcGFyYW1fdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gcmVwbHkgZm9ybWF0OgotLy8gIHNpemU6IHNpemVvZih1aW50MzJfdCkKLS8vICBkYXRhOiB1aW50MzJfdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29tbWFuZDogRUZGRUNUX0NNRF9GSVJTVF9QUk9QUklFVEFSWQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZGVzY3JpcHRpb246Ci0vLyAgQWxsIHByb3ByaWV0YXJ5IGVmZmVjdCBjb21tYW5kcyBtdXN0IHVzZSBjb21tYW5kIGNvZGVzIGFib3ZlIHRoaXMgdmFsdWUuIFRoZSBzaXplIGFuZCBmb3JtYXQgb2YKLS8vICBjb21tYW5kIGFuZCByZXNwb25zZSBmaWVsZHMgaXMgZnJlZSBpbiB0aGlzIGNhc2UKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0vLyBBdWRpbyBidWZmZXIgZGVzY3JpcHRvciB1c2VkIGJ5IHByb2Nlc3MoKSwgYnVmZmVyUHJvdmlkZXIoKSBmdW5jdGlvbnMgYW5kIGJ1ZmZlcl9jb25maWdfdAotLy8gc3RydWN0dXJlLiBNdWx0aS1jaGFubmVsIGF1ZGlvIGlzIGFsd2F5cyBpbnRlcmxlYXZlZC4gVGhlIGNoYW5uZWwgb3JkZXIgaXMgZnJvbSBMU0IgdG8gTVNCIHdpdGgKLS8vIHJlZ2FyZCB0byB0aGUgY2hhbm5lbCBtYXNrIGRlZmluaXRpb24gaW4gYXVkaW8uaCwgYXVkaW9fY2hhbm5lbF9tYXNrX3QgZS5nIDoKLS8vIFN0ZXJlbzogbGVmdCwgcmlnaHQKLS8vIDUgcG9pbnQgMTogZnJvbnQgbGVmdCwgZnJvbnQgcmlnaHQsIGZyb250IGNlbnRlciwgbG93IGZyZXF1ZW5jeSwgYmFjayBsZWZ0LCBiYWNrIHJpZ2h0Ci0vLyBUaGUgYnVmZmVyIHNpemUgaXMgZXhwcmVzc2VkIGluIGZyYW1lIGNvdW50LCBhIGZyYW1lIGJlaW5nIGNvbXBvc2VkIG9mIHNhbXBsZXMgZm9yIGFsbAotLy8gY2hhbm5lbHMgYXQgYSBnaXZlbiB0aW1lLiBGcmFtZSBzaXplIGZvciB1bnNwZWNpZmllZCBmb3JtYXQgKEFVRElPX0ZPUk1BVF9PVEhFUikgaXMgOCBiaXQgYnkKLS8vIGRlZmluaXRpb24KLXN0cnVjdCBhdWRpb19idWZmZXJfcyB7Ci0gICAgc2l6ZV90ICAgZnJhbWVDb3VudDsgICAgICAgIC8vIG51bWJlciBvZiBmcmFtZXMgaW4gYnVmZmVyCi0gICAgdW5pb24gewotICAgICAgICB2b2lkKiAgICAgICByYXc7ICAgICAgICAvLyByYXcgcG9pbnRlciB0byBzdGFydCBvZiBidWZmZXIKLSAgICAgICAgaW50MzJfdCogICAgczMyOyAgICAgICAgLy8gcG9pbnRlciB0byBzaWduZWQgMzIgYml0IGRhdGEgYXQgc3RhcnQgb2YgYnVmZmVyCi0gICAgICAgIGludDE2X3QqICAgIHMxNjsgICAgICAgIC8vIHBvaW50ZXIgdG8gc2lnbmVkIDE2IGJpdCBkYXRhIGF0IHN0YXJ0IG9mIGJ1ZmZlcgotICAgICAgICB1aW50OF90KiAgICB1ODsgICAgICAgICAvLyBwb2ludGVyIHRvIHVuc2lnbmVkIDggYml0IGRhdGEgYXQgc3RhcnQgb2YgYnVmZmVyCi0gICAgfTsKLX07Ci0KLS8vIFRoZSBidWZmZXJfcHJvdmlkZXJfcyBzdHJ1Y3R1cmUgY29udGFpbnMgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQKLS8vIGJ5IHRoZSBlZmZlY3QgZW5naW5lIHByb2Nlc3MoKSBmdW5jdGlvbiB0byBxdWVyeSBhbmQgcmVsZWFzZSBpbnB1dAotLy8gb3Igb3V0cHV0IGF1ZGlvIGJ1ZmZlci4KLS8vIFRoZSBnZXRCdWZmZXIoKSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmV0cmlldmUgYSBidWZmZXIgd2hlcmUgZGF0YQotLy8gc2hvdWxkIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGJ5IHByb2Nlc3MoKSBmdW5jdGlvbi4KLS8vIFRoZSByZWxlYXNlQnVmZmVyKCkgZnVuY3Rpb24gTVVTVCBiZSBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIHJldHJpZXZlZAotLy8gd2l0aCBnZXRCdWZmZXIoKSBpcyBub3QgbmVlZGVkIGFueW1vcmUuCi0vLyBUaGUgcHJvY2VzcyBmdW5jdGlvbiBzaG91bGQgdXNlIHRoZSBidWZmZXIgcHJvdmlkZXIgbWVjaGFuaXNtIHRvIHJldHJpZXZlCi0vLyBpbnB1dCBvciBvdXRwdXQgYnVmZmVyIGlmIHRoZSBpbkJ1ZmZlciBvciBvdXRCdWZmZXIgcGFzc2VkIGFzIGFyZ3VtZW50IGlzIE5VTEwKLS8vIGFuZCB0aGUgYnVmZmVyIGNvbmZpZ3VyYXRpb24gKGJ1ZmZlcl9jb25maWdfdCkgZ2l2ZW4gYnkgdGhlIEVGRkVDVF9DTURfU0VUX0NPTkZJRwotLy8gY29tbWFuZCBkaWQgbm90IHNwZWNpZnkgYW4gYXVkaW8gYnVmZmVyLgotCi10eXBlZGVmIGludDMyX3QgKCogYnVmZmVyX2Z1bmN0aW9uX3QpKHZvaWQgKmNvb2tpZSwgYXVkaW9fYnVmZmVyX3QgKmJ1ZmZlcik7Ci0KLXR5cGVkZWYgc3RydWN0IGJ1ZmZlcl9wcm92aWRlcl9zIHsKLSAgICBidWZmZXJfZnVuY3Rpb25fdCBnZXRCdWZmZXI7ICAgICAgIC8vIHJldHJpZXZlIG5leHQgYnVmZmVyCi0gICAgYnVmZmVyX2Z1bmN0aW9uX3QgcmVsZWFzZUJ1ZmZlcjsgICAvLyByZWxlYXNlIHVzZWQgYnVmZmVyCi0gICAgdm9pZCAgICAgICAqY29va2llOyAgICAgICAgICAgICAgICAvLyBmb3IgdXNlIGJ5IGNsaWVudCBvZiBidWZmZXIgcHJvdmlkZXIgZnVuY3Rpb25zCi19IGJ1ZmZlcl9wcm92aWRlcl90OwotCi0KLS8vIFRoZSBidWZmZXJfY29uZmlnX3Mgc3RydWN0dXJlIHNwZWNpZmllcyB0aGUgaW5wdXQgb3Igb3V0cHV0IGF1ZGlvIGZvcm1hdAotLy8gdG8gYmUgdXNlZCBieSB0aGUgZWZmZWN0IGVuZ2luZS4gSXQgaXMgcGFydCBvZiB0aGUgZWZmZWN0X2NvbmZpZ190Ci0vLyBzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGJvdGggaW5wdXQgYW5kIG91dHB1dCBidWZmZXIgY29uZmlndXJhdGlvbnMgYW5kIGlzCi0vLyBwYXNzZWQgYnkgdGhlIEVGRkVDVF9DTURfU0VUX0NPTkZJRyBvciBFRkZFQ1RfQ01EX1NFVF9DT05GSUdfUkVWRVJTRSBjb21tYW5kLgotdHlwZWRlZiBzdHJ1Y3QgYnVmZmVyX2NvbmZpZ19zIHsKLSAgICBhdWRpb19idWZmZXJfdCAgYnVmZmVyOyAgICAgLy8gYnVmZmVyIGZvciB1c2UgYnkgcHJvY2VzcygpIGZ1bmN0aW9uIGlmIG5vdCBwYXNzZWQgZXhwbGljaXRseQotICAgIHVpbnQzMl90ICAgc2FtcGxpbmdSYXRlOyAgICAvLyBzYW1wbGluZyByYXRlCi0gICAgdWludDMyX3QgICBjaGFubmVsczsgICAgICAgIC8vIGNoYW5uZWwgbWFzayAoc2VlIGF1ZGlvX2NoYW5uZWxfbWFza190IGluIGF1ZGlvLmgpCi0gICAgYnVmZmVyX3Byb3ZpZGVyX3QgYnVmZmVyUHJvdmlkZXI7ICAgLy8gYnVmZmVyIHByb3ZpZGVyCi0gICAgdWludDhfdCAgICBmb3JtYXQ7ICAgICAgICAgIC8vIEF1ZGlvIGZvcm1hdCAoc2VlIGF1ZGlvX2Zvcm1hdF90IGluIGF1ZGlvLmgpCi0gICAgdWludDhfdCAgICBhY2Nlc3NNb2RlOyAgICAgIC8vIHJlYWQvd3JpdGUgb3IgYWNjdW11bGF0ZSBpbiBidWZmZXIgKGVmZmVjdF9idWZmZXJfYWNjZXNzX2UpCi0gICAgdWludDE2X3QgICBtYXNrOyAgICAgICAgICAgIC8vIGluZGljYXRlcyB3aGljaCBvZiB0aGUgYWJvdmUgZmllbGRzIGlzIHZhbGlkCi19IGJ1ZmZlcl9jb25maWdfdDsKLQotLy8gVmFsdWVzIGZvciAiYWNjZXNzTW9kZSIgZmllbGQgb2YgYnVmZmVyX2NvbmZpZ190OgotLy8gICBvdmVyd3JpdGUsIHJlYWQgb25seSwgYWNjdW11bGF0ZSAocmVhZC9tb2RpZnkvd3JpdGUpCi1lbnVtIGVmZmVjdF9idWZmZXJfYWNjZXNzX2UgewotICAgIEVGRkVDVF9CVUZGRVJfQUNDRVNTX1dSSVRFLAotICAgIEVGRkVDVF9CVUZGRVJfQUNDRVNTX1JFQUQsCi0gICAgRUZGRUNUX0JVRkZFUl9BQ0NFU1NfQUNDVU1VTEFURQotCi19OwotCi0vLyBmZWF0dXJlIGlkZW50aWZpZXJzIGZvciBFRkZFQ1RfQ01EX0dFVF9GRUFUVVJFX1NVUFBPUlRFRF9DT05GSUdTIGNvbW1hbmQKLWVudW0gZWZmZWN0X2ZlYXR1cmVfZSB7Ci0gICAgRUZGRUNUX0ZFQVRVUkVfQVVYX0NIQU5ORUxTLCAvLyBzdXBwb3J0cyBhdXhpbGlhcnkgY2hhbm5lbHMgKGUuZy4gZHVhbCBtaWMgbm9pc2Ugc3VwcHJlc3NvcikKLSAgICBFRkZFQ1RfRkVBVFVSRV9DTlQKLX07Ci0KLS8vIEVGRkVDVF9GRUFUVVJFX0FVWF9DSEFOTkVMUyBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvci4gRGVzY3JpYmUgYSBjb21iaW5hdGlvbgotLy8gb2YgbWFpbiBhbmQgYXV4aWxpYXJ5IGNoYW5uZWxzIHN1cHBvcnRlZAotdHlwZWRlZiBzdHJ1Y3QgY2hhbm5lbF9jb25maWdfcyB7Ci0gICAgYXVkaW9fY2hhbm5lbF9tYXNrX3QgbWFpbl9jaGFubmVsczsgLy8gY2hhbm5lbCBtYXNrIGZvciBtYWluIGNoYW5uZWxzCi0gICAgYXVkaW9fY2hhbm5lbF9tYXNrX3QgYXV4X2NoYW5uZWxzOyAgLy8gY2hhbm5lbCBtYXNrIGZvciBhdXhpbGlhcnkgY2hhbm5lbHMKLX0gY2hhbm5lbF9jb25maWdfdDsKLQotCi0vLyBWYWx1ZXMgZm9yIGJpdCBmaWVsZCAibWFzayIgaW4gYnVmZmVyX2NvbmZpZ190LiBJZiBhIGJpdCBpcyBzZXQsIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkCi0vLyBpbiBidWZmZXJfY29uZmlnX3QgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBleGVjdXRpbmcgdGhlIEVGRkVDVF9DTURfU0VUX0NPTkZJRyBjb21tYW5kCi0jZGVmaW5lIEVGRkVDVF9DT05GSUdfQlVGRkVSICAgIDB4MDAwMSAgLy8gYnVmZmVyIGZpZWxkIG11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50Ci0jZGVmaW5lIEVGRkVDVF9DT05GSUdfU01QX1JBVEUgIDB4MDAwMiAgLy8gc2FtcGxpbmdSYXRlIGZpZWxkIG11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50Ci0jZGVmaW5lIEVGRkVDVF9DT05GSUdfQ0hBTk5FTFMgIDB4MDAwNCAgLy8gY2hhbm5lbHMgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19GT1JNQVQgICAgMHgwMDA4ICAvLyBmb3JtYXQgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19BQ0NfTU9ERSAgMHgwMDEwICAvLyBhY2Nlc3NNb2RlIGZpZWxkIG11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50Ci0jZGVmaW5lIEVGRkVDVF9DT05GSUdfUFJPVklERVIgIDB4MDAyMCAgLy8gYnVmZmVyUHJvdmlkZXIgZmllbGQgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQKLSNkZWZpbmUgRUZGRUNUX0NPTkZJR19BTEwgKEVGRkVDVF9DT05GSUdfQlVGRkVSIHwgRUZGRUNUX0NPTkZJR19TTVBfUkFURSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGRkVDVF9DT05GSUdfQ0hBTk5FTFMgfCBFRkZFQ1RfQ09ORklHX0ZPUk1BVCB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVGRkVDVF9DT05GSUdfQUNDX01PREUgfCBFRkZFQ1RfQ09ORklHX1BST1ZJREVSKQotCi0KLS8vIGVmZmVjdF9jb25maWdfcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBmb3JtYXQgb2YgdGhlIHBDbWREYXRhIGFyZ3VtZW50IG9mIEVGRkVDVF9DTURfU0VUX0NPTkZJRwotLy8gY29tbWFuZCB0byBjb25maWd1cmUgYXVkaW8gcGFyYW1ldGVycyBhbmQgYnVmZmVycyBmb3IgZWZmZWN0IGVuZ2luZSBpbnB1dCBhbmQgb3V0cHV0LgotdHlwZWRlZiBzdHJ1Y3QgZWZmZWN0X2NvbmZpZ19zIHsKLSAgICBidWZmZXJfY29uZmlnX3QgICBpbnB1dENmZzsKLSAgICBidWZmZXJfY29uZmlnX3QgICBvdXRwdXRDZmc7Ci19IGVmZmVjdF9jb25maWdfdDsKLQotCi0vLyBlZmZlY3RfcGFyYW1fcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBmb3JtYXQgb2YgdGhlIHBDbWREYXRhIGFyZ3VtZW50IG9mIEVGRkVDVF9DTURfU0VUX1BBUkFNCi0vLyBjb21tYW5kIGFuZCBwQ21kRGF0YSBhbmQgcFJlcGx5RGF0YSBvZiBFRkZFQ1RfQ01EX0dFVF9QQVJBTSBjb21tYW5kLgotLy8gcHNpemUgYW5kIHZzaXplIHJlcHJlc2VudCB0aGUgYWN0dWFsIHNpemUgb2YgcGFyYW1ldGVyIGFuZCB2YWx1ZS4KLS8vCi0vLyBOT1RFOiB0aGUgc3RhcnQgb2YgdmFsdWUgZmllbGQgaW5zaWRlIHRoZSBkYXRhIGZpZWxkIGlzIGFsd2F5cyBvbiBhIDMyIGJpdCBib3VuZGFyeToKLS8vCi0vLyAgKy0tLS0tLS0tLS0tKwotLy8gIHwgc3RhdHVzICAgIHwgc2l6ZW9mKGludCkKLS8vICArLS0tLS0tLS0tLS0rCi0vLyAgfCBwc2l6ZSAgICAgfCBzaXplb2YoaW50KQotLy8gICstLS0tLS0tLS0tLSsKLS8vICB8IHZzaXplICAgICB8IHNpemVvZihpbnQpCi0vLyAgKy0tLS0tLS0tLS0tKwotLy8gIHwgICAgICAgICAgIHwgICB8ICAgICAgICAgICB8Ci0vLyAgfiBwYXJhbWV0ZXIgfiAgID4gcHNpemUgICAgIHwKLS8vICB8ICAgICAgICAgICB8ICAgfCAgICAgICAgICAgPiAgKChwc2l6ZSAtIDEpL3NpemVvZihpbnQpICsgMSkgKiBzaXplb2YoaW50KQotLy8gICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICB8Ci0vLyAgfCBwYWRkaW5nICAgfCAgICAgICAgICAgICAgIHwKLS8vICArLS0tLS0tLS0tLS0rCi0vLyAgfCAgICAgICAgICAgfCAgIHwKLS8vICB+IHZhbHVlICAgICB+ICAgPiB2c2l6ZQotLy8gIHwgICAgICAgICAgIHwgICB8Ci0vLyAgKy0tLS0tLS0tLS0tKwotCi10eXBlZGVmIHN0cnVjdCBlZmZlY3RfcGFyYW1fcyB7Ci0gICAgaW50MzJfdCAgICAgc3RhdHVzOyAgICAgLy8gVHJhbnNhY3Rpb24gc3RhdHVzICh1bnVzZWQgZm9yIGNvbW1hbmQsIHVzZWQgZm9yIHJlcGx5KQotICAgIHVpbnQzMl90ICAgIHBzaXplOyAgICAgIC8vIFBhcmFtZXRlciBzaXplCi0gICAgdWludDMyX3QgICAgdnNpemU7ICAgICAgLy8gVmFsdWUgc2l6ZQotICAgIGNoYXIgICAgICAgIGRhdGFbXTsgICAgIC8vIFN0YXJ0IG9mIFBhcmFtZXRlciArIFZhbHVlIGRhdGEKLX0gZWZmZWN0X3BhcmFtX3Q7Ci0KLS8vIE1heGltdW0gZWZmZWN0X3BhcmFtX3Qgc2l6ZQotI2RlZmluZSBFRkZFQ1RfUEFSQU1fU0laRV9NQVggICAgICAgNjU1MzYKLQotLy8gc3RydWN0dXJlIHVzZWQgYnkgRUZGRUNUX0NNRF9PRkZMT0FEIGNvbW1hbmQKLXR5cGVkZWYgc3RydWN0IGVmZmVjdF9vZmZsb2FkX3BhcmFtX3MgewotICAgIGJvb2wgaXNPZmZsb2FkOyAgICAgICAgIC8vIHRydWUgaWYgdGhlIHBsYXliYWNrIHRocmVhZCB0aGUgZWZmZWN0IGlzIGF0dGFjaGVkIHRvIGlzIG9mZmxvYWRlZAotICAgIGludCBpb0hhbmRsZTsgICAgICAgICAgIC8vIGlvIGhhbmRsZSBvZiB0aGUgcGxheWJhY2sgdGhyZWFkIHRoZSBlZmZlY3QgaXMgYXR0YWNoZWQgdG8KLX0gZWZmZWN0X29mZmxvYWRfcGFyYW1fdDsKLQotCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyAgICAgIEVmZmVjdCBsaWJyYXJ5IGludGVyZmFjZQogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9jYW1lcmEzLmggYi9pbmNsdWRlL2hhcmR3YXJlL2NhbWVyYTMuaAppbmRleCBhN2RmMGVlLi5jZWMyYWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2NhbWVyYTMuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2NhbWVyYTMuaApAQCAtMTQ3OSw2ICsxNDc5LDEzIEBACiAgICAgICogICAgICBhbmRyb2lkLmxlbnMub3B0aWNhbFN0YWJpbGl6YXRpb25Nb2RlIChpZiBpdCBpcyBzdXBwb3J0ZWQpCiAgICAgICogICAgICBhbmRyb2lkLnNjYWxlci5jcm9wUmVnaW9uCiAgICAgICogICAgICBhbmRyb2lkLnN0YXRpc3RpY3MuZmFjZURldGVjdE1vZGUgKGlmIGl0IGlzIHN1cHBvcnRlZCkKKyAgICAgKiAgIDYuIFRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGRhdGEgcGFzc2VkIGFjcm9zcyBwcm9jZXNzIGJvdW5kYXJpZXMgYXQKKyAgICAgKiAgICAgIGhpZ2ggZnJhbWUgcmF0ZSwgd2l0aGluIG9uZSBiYXRjaCwgY2FtZXJhIGZyYW1ld29yayBvbmx5IHByb3BhZ2F0ZXMKKyAgICAgKiAgICAgIHRoZSBsYXN0IHNodXR0ZXIgbm90aWZ5IGFuZCB0aGUgbGFzdCBjYXB0dXJlIHJlc3VsdHMgKGluY2x1ZGluZyBwYXJ0aWFsCisgICAgICogICAgICByZXN1bHRzIGFuZCBmaW5hbCByZXN1bHQpIHRvIHRoZSBhcHAuIFRoZSBzaHV0dGVyIG5vdGlmaWVzIGFuZCBjYXB0dXJlCisgICAgICogICAgICByZXN1bHRzIGZvciB0aGUgb3RoZXIgcmVxdWVzdHMgaW4gdGhlIGJhdGNoIGFyZSBkZXJpdmVkIGJ5CisgICAgICogICAgICB0aGUgY2FtZXJhIGZyYW1ld29yay4gQXMgYSByZXN1bHQsIHRoZSBIQUwgY2FuIHJldHVybiBlbXB0eSBtZXRhZGF0YQorICAgICAqICAgICAgZXhjZXB0IGZvciB0aGUgbGFzdCByZXN1bHQgaW4gdGhlIGJhdGNoLgogICAgICAqCiAgICAgICogRm9yIG1vcmUgZGV0YWlscyBhYm91dCBoaWdoIHNwZWVkIHN0cmVhbSByZXF1aXJlbWVudHMsIHNlZQogICAgICAqIGFuZHJvaWQuY29udHJvbC5hdmFpbGFibGVIaWdoU3BlZWRWaWRlb0NvbmZpZ3VyYXRpb25zIGFuZCBDT05TVFJBSU5FRF9ISUdIX1NQRUVEX1ZJREVPCkBAIC0xNTk3LDYgKzE2MDQsMTMgQEAKICAgICAgKiAgIHZhbHVlIG9mIHRoaXMgaXMgMC4KICAgICAgKiAgIEZvciBhbGwgc3RyZWFtcyBwYXNzZWQgdmlhIGNvbmZpZ3VyZV9zdHJlYW1zKCksIHRoZSBIQUwgbXVzdCB3cml0ZQogICAgICAqICAgb3ZlciB0aGlzIGZpZWxkIHdpdGggaXRzIHVzYWdlIGZsYWdzLgorICAgICAqCisgICAgICogICBGcm9tIEFuZHJvaWQgTywgdGhlIHVzYWdlIGZsYWcgZm9yIGFuIG91dHB1dCBzdHJlYW0gbWF5IGJlIGJpdHdpc2UKKyAgICAgKiAgIGNvbWJpbmF0aW9uIG9mIHVzYWdlIGZsYWdzIGZvciBtdWx0aXBsZSBjb25zdW1lcnMsIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAqICAgc2hhcmluZyBvbmUgY2FtZXJhIHN0cmVhbSBiZXR3ZWVuIHRob3NlIGNvbnN1bWVycy4gVGhlIEhBTCBtdXN0IGZhaWwKKyAgICAgKiAgIGNvbmZpZ3VyZV9zdHJlYW1zIGNhbGwgd2l0aCAtRUlOVkFMIGlmIHRoZSBjb21iaW5lZCBmbGFncyBjYW5ub3QgYmUKKyAgICAgKiAgIHN1cHBvcnRlZCBkdWUgdG8gaW1jb21wYXRpYmxlIGJ1ZmZlciBmb3JtYXQsIGRhdGFTcGFjZSwgb3Igb3RoZXIgaGFyZHdhcmUKKyAgICAgKiAgIGxpbWl0YXRpb25zLgogICAgICAqLwogICAgIHVpbnQzMl90IHVzYWdlOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2NhbWVyYV9jb21tb24uaCBiL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhX2NvbW1vbi5oCmluZGV4IGM3NGQ3YmIuLjdiYWZhODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvY2FtZXJhX2NvbW1vbi5oCkBAIC0xNDMsOCArMTQzLDggQEAKICNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8xXzAgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDEsIDApIC8vIERFUFJFQ0FURUQKICNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8yXzAgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDIsIDApIC8vIE5PIExPTkdFUiBTVVBQT1JURUQKICNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8yXzEgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDIsIDEpIC8vIE5PIExPTkdFUiBTVVBQT1JURUQKLSNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzAgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDMsIDApCi0jZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18xIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCAxKQorI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMCBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMCkgLy8gTk8gTE9OR0VSIFNVUFBPUlRFRAorI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMSBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMSkgLy8gTk8gTE9OR0VSIFNVUFBPUlRFRAogI2RlZmluZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMiBIQVJEV0FSRV9ERVZJQ0VfQVBJX1ZFUlNJT04oMywgMikKICNkZWZpbmUgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzMgSEFSRFdBUkVfREVWSUNFX0FQSV9WRVJTSU9OKDMsIDMpCiAjZGVmaW5lIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM180IEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTigzLCA0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9maW5nZXJwcmludC5oIGIvaW5jbHVkZS9oYXJkd2FyZS9maW5nZXJwcmludC5oCmluZGV4IGI0NDY1YmEuLjg2Y2VkOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvZmluZ2VycHJpbnQuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2ZpbmdlcnByaW50LmgKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgRklOR0VSUFJJTlRfTU9EVUxFX0FQSV9WRVJTSU9OXzFfMCBIQVJEV0FSRV9NT0RVTEVfQVBJX1ZFUlNJT04oMSwgMCkKICNkZWZpbmUgRklOR0VSUFJJTlRfTU9EVUxFX0FQSV9WRVJTSU9OXzJfMCBIQVJEV0FSRV9NT0RVTEVfQVBJX1ZFUlNJT04oMiwgMCkKICNkZWZpbmUgRklOR0VSUFJJTlRfTU9EVUxFX0FQSV9WRVJTSU9OXzJfMSBIQVJEV0FSRV9NT0RVTEVfQVBJX1ZFUlNJT04oMiwgMSkKKyNkZWZpbmUgRklOR0VSUFJJTlRfTU9EVUxFX0FQSV9WRVJTSU9OXzNfMCBIQVJEV0FSRV9NT0RVTEVfQVBJX1ZFUlNJT04oMywgMCkKICNkZWZpbmUgRklOR0VSUFJJTlRfSEFSRFdBUkVfTU9EVUxFX0lEICJmaW5nZXJwcmludCIKIAogdHlwZWRlZiBlbnVtIGZpbmdlcnByaW50X21zZ190eXBlIHsKQEAgLTUxLDYgKzUyLDcgQEAKICAgICBGSU5HRVJQUklOVF9FUlJPUl9OT19TUEFDRSA9IDQsIC8qIE5vIHNwYWNlIGF2YWlsYWJsZSB0byBzdG9yZSBhIHRlbXBsYXRlICovCiAgICAgRklOR0VSUFJJTlRfRVJST1JfQ0FOQ0VMRUQgPSA1LCAvKiBUaGUgY3VycmVudCBvcGVyYXRpb24gY2FuJ3QgcHJvY2VlZC4gU2VlIGFib3ZlLiAqLwogICAgIEZJTkdFUlBSSU5UX0VSUk9SX1VOQUJMRV9UT19SRU1PVkUgPSA2LCAvKiBmaW5nZXJwcmludCB3aXRoIGdpdmVuIGlkIGNhbid0IGJlIHJlbW92ZWQgKi8KKyAgICBGSU5HRVJQUklOVF9FUlJPUl9MT0NLT1VUID0gNywgLyogdGhlIGZpbmdlcnByaW50IGhhcmR3YXJlIGlzIGluIGxvY2tvdXQgZHVlIHRvIHRvbyBtYW55IGF0dGVtcHRzICovCiAgICAgRklOR0VSUFJJTlRfRVJST1JfVkVORE9SX0JBU0UgPSAxMDAwIC8qIHZlbmRvci1zcGVjaWZpYyBlcnJvciBtZXNzYWdlcyBzdGFydCBoZXJlICovCiB9IGZpbmdlcnByaW50X2Vycm9yX3Q7CiAKQEAgLTY5LDYgKzcxLDggQEAKICAgICBGSU5HRVJQUklOVF9BQ1FVSVJFRF9JTUFHRVJfRElSVFkgPSAzLCAvKiBzZW5zb3IgbmVlZHMgdG8gYmUgY2xlYW5lZCAqLwogICAgIEZJTkdFUlBSSU5UX0FDUVVJUkVEX1RPT19TTE9XID0gNCwgLyogbW9zdGx5IHN3aXBlLXR5cGUgc2Vuc29yczsgbm90IGVub3VnaCBkYXRhIGNvbGxlY3RlZCAqLwogICAgIEZJTkdFUlBSSU5UX0FDUVVJUkVEX1RPT19GQVNUID0gNSwgLyogZm9yIHN3aXBlIGFuZCBhcmVhIHNlbnNvcnM7IHRlbGwgdXNlciB0byBzbG93IGRvd24qLworICAgIEZJTkdFUlBSSU5UX0FDUVVJUkVEX0RFVEVDVEVEID0gNiwgLyogd2hlbiB0aGUgZmluZ2VyIGlzIGZpcnN0IGRldGVjdGVkLiBVc2VkIHRvIG9wdGltaXplIHdha2V1cC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3VsZCBiZSBmb2xsb3dlZCBieSBvbmUgb2YgdGhlIGFib3ZlIG1lc3NhZ2VzICovCiAgICAgRklOR0VSUFJJTlRfQUNRVUlSRURfVkVORE9SX0JBU0UgPSAxMDAwIC8qIHZlbmRvci1zcGVjaWZpYyBhY3F1aXNpdGlvbiBtZXNzYWdlcyBzdGFydCBoZXJlICovCiB9IGZpbmdlcnByaW50X2FjcXVpcmVkX2luZm9fdDsKIApAQCAtODUsMTQgKzg5LDEzIEBACiAgICAgdWludDY0X3QgbXNnOyAvKiBWZW5kb3Igc3BlY2lmaWMgbWVzc2FnZS4gVXNlZCBmb3IgdXNlciBndWlkYW5jZSAqLwogfSBmaW5nZXJwcmludF9lbnJvbGxfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgZmluZ2VycHJpbnRfZW51bWVyYXRlZCB7Cit0eXBlZGVmIHN0cnVjdCBmaW5nZXJwcmludF9pdGVyYXRvciB7CiAgICAgZmluZ2VycHJpbnRfZmluZ2VyX2lkX3QgZmluZ2VyOwogICAgIHVpbnQzMl90IHJlbWFpbmluZ190ZW1wbGF0ZXM7Ci19IGZpbmdlcnByaW50X2VudW1lcmF0ZWRfdDsKK30gZmluZ2VycHJpbnRfaXRlcmF0b3JfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgZmluZ2VycHJpbnRfcmVtb3ZlZCB7Ci0gICAgZmluZ2VycHJpbnRfZmluZ2VyX2lkX3QgZmluZ2VyOwotfSBmaW5nZXJwcmludF9yZW1vdmVkX3Q7Cit0eXBlZGVmIGZpbmdlcnByaW50X2l0ZXJhdG9yX3QgZmluZ2VycHJpbnRfZW51bWVyYXRlZF90OwordHlwZWRlZiBmaW5nZXJwcmludF9pdGVyYXRvcl90IGZpbmdlcnByaW50X3JlbW92ZWRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZmluZ2VycHJpbnRfYWNxdWlyZWQgewogICAgIGZpbmdlcnByaW50X2FjcXVpcmVkX2luZm9fdCBhY3F1aXJlZF9pbmZvOyAvKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW1hZ2UgKi8KQEAgLTIwNywxMiArMjEwLDEzIEBACiAgICAgLyoKICAgICAgKiBFbnVtZXJhdGUgYWxsIHRoZSBmaW5nZXJwcmludCB0ZW1wbGF0ZXMgZm91bmQgaW4gdGhlIGRpcmVjdG9yeSBzZXQgYnkKICAgICAgKiBzZXRfYWN0aXZlX2dyb3VwKCkKLSAgICAgKiBGb3IgZWFjaCB0ZW1wbGF0ZSBmb3VuZCBub3RpZnkoKSB3aWxsIGJlIGNhbGxlZCB3aXRoOgorICAgICAqIEZvciBlYWNoIHRlbXBsYXRlIGZvdW5kIGEgbm90aWZ5KCkgd2lsbCBiZSBjYWxsZWQgd2l0aDoKICAgICAgKiBmaW5nZXJwcmludF9tc2cudHlwZSA9PSBGSU5HRVJQUklOVF9URU1QTEFURV9FTlVNRVJBVEVECiAgICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEuZW51bWVyYXRlZC5maW5nZXIgaW5kaWNhdGluZyBhIHRlbXBsYXRlIGlkCiAgICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEuZW51bWVyYXRlZC5yZW1haW5pbmdfdGVtcGxhdGVzIGluZGljYXRpbmcgaG93IG1hbnkgbW9yZQogICAgICAqIGVudW1lcmF0aW9uIG1lc3NhZ2VzIHRvIGV4cGVjdC4KLSAgICAgKgorICAgICAqIE5vdGU6IElmIHRoZXJlIGFyZSBubyBmaW5nZXJwcmludHMsIHRoZW4gdGhpcyBzaG91bGQgcmV0dXJuIDAgYW5kIHRoZSBmaXJzdCBmaW5nZXJwcmludAorICAgICAqICAgICAgICAgICAgICAgICAgZW51bWVyYXRlZCBzaG91bGQgaGF2ZSBmaW5nZXJpZD0wIGFuZCByZW1haW5pbmc9MAogICAgICAqIEZ1bmN0aW9uIHJldHVybjogMCBpZiBlbnVtZXJhdGUgcmVxdWVzdCBpcyBhY2NlcHRlZAogICAgICAqICAgICAgICAgICAgICAgICAgb3IgYSBuZWdhdGl2ZSBudW1iZXIgaW4gY2FzZSBvZiBlcnJvciwgZ2VuZXJhbGx5IGZyb20gdGhlIGVycm5vLmggc2V0LgogICAgICAqLwpAQCAtMjIyLDkgKzIyNiwxNCBAQAogICAgICAqIEZpbmdlcnByaW50IHJlbW92ZSByZXF1ZXN0OgogICAgICAqIERlbGV0ZXMgYSBmaW5nZXJwcmludCB0ZW1wbGF0ZS4KICAgICAgKiBXb3JrcyBvbmx5IHdpdGhpbiB0aGUgcGF0aCBzZXQgYnkgc2V0X2FjdGl2ZV9ncm91cCgpLgotICAgICAqIG5vdGlmeSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggZGV0YWlscyBvbiB0aGUgdGVtcGxhdGUgZGVsZXRlZC4KLSAgICAgKiBmaW5nZXJwcmludF9tc2cudHlwZSA9PSBGSU5HRVJQUklOVF9URU1QTEFURV9SRU1PVkVEIGFuZAotICAgICAqIGZpbmdlcnByaW50X21zZy5kYXRhLnJlbW92ZWQuZmluZ2VyIGluZGljYXRpbmcgdGhlIHRlbXBsYXRlIGlkIHJlbW92ZWQuCisgICAgICogVGhlIGZpZCBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgYXMgYSB3aWRjYXJkOgorICAgICAqICAgKiBmaWQgPT0gMCAtLSBkZWxldGUgYWxsIHRoZSB0ZW1wbGF0ZXMgaW4gdGhlIGdyb3VwLgorICAgICAqICAgKiBmaWQgIT0gMCAtLSBkZWxldGUgdGhpcyBzcGVjaWZpYyB0ZW1wbGF0ZSBmcm9tIHRoZSBncm91cC4KKyAgICAgKiBGb3IgZWFjaCB0ZW1wbGF0ZSBmb3VuZCBhIG5vdGlmeSgpIHdpbGwgYmUgY2FsbGVkIHdpdGg6CisgICAgICogZmluZ2VycHJpbnRfbXNnLnR5cGUgPT0gRklOR0VSUFJJTlRfVEVNUExBVEVfUkVNT1ZFRAorICAgICAqIGZpbmdlcnByaW50X21zZy5kYXRhLnJlbW92ZWQuZmluZ2VyIGluZGljYXRpbmcgYSB0ZW1wbGF0ZSBpZCBkZWxldGVkCisgICAgICogZmluZ2VycHJpbnRfbXNnLmRhdGEucmVtb3ZlZC5yZW1haW5pbmdfdGVtcGxhdGVzIGluZGljYXRpbmcgaG93IG1hbnkgbW9yZQorICAgICAqIHRlbXBsYXRlcyB3aWxsIGJlIGRlbGV0ZWQgYnkgdGhpcyBvcGVyYXRpb24uCiAgICAgICoKICAgICAgKiBGdW5jdGlvbiByZXR1cm46IDAgaWYgZmluZ2VycHJpbnQgdGVtcGxhdGUocykgY2FuIGJlIHN1Y2Nlc3NmdWxseSBkZWxldGVkCiAgICAgICogICAgICAgICAgICAgICAgICBvciBhIG5lZ2F0aXZlIG51bWJlciBpbiBjYXNlIG9mIGVycm9yLCBnZW5lcmFsbHkgZnJvbSB0aGUgZXJybm8uaCBzZXQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2Z1c2VkX2xvY2F0aW9uLmggYi9pbmNsdWRlL2hhcmR3YXJlL2Z1c2VkX2xvY2F0aW9uLmgKaW5kZXggNzMzNjBhMS4uNTUwZTE5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9mdXNlZF9sb2NhdGlvbi5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvZnVzZWRfbG9jYXRpb24uaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KIAorI2luY2x1ZGUgImduc3MtYmFzZS5oIgogCiAvKioKICAqIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIG9mIHRoZSBGdXNlZCBMb2NhdGlvbiBQcm92aWRlci4KQEAgLTEwMywxNiArMTA0LDYgQEAKICNkZWZpbmUgRkxQX1NUQVRVU19MT0NBVElPTl9VTkFWQUlMQUJMRSAgICAgICAxCiAKIC8qKgotICogVGhpcyBjb25zdGFudCBpcyB1c2VkIHdpdGggdGhlIGJhdGNoZWQgbG9jYXRpb25zCi0gKiBBUElzLiBCYXRjaGluZyBpcyBtYW5kYXRvcnkgd2hlbiBGTFAgaW1wbGVtZW50YXRpb24KLSAqIGlzIHN1cHBvcnRlZC4gSWYgdGhlIGZsYWcgaXMgc2V0LCB0aGUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24KLSAqIHdpbGwgd2FrZSB1cCB0aGUgYXBwbGljYXRpb24gcHJvY2Vzc29yIHdoZW4gdGhlIEZJRk8gaXMgZnVsbCwKLSAqIElmIHRoZSBmbGFnIGlzIG5vdCBzZXQsIHRoZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGRyb3AKLSAqIHRoZSBvbGRlc3QgZGF0YSB3aGVuIHRoZSBGSUZPIGlzIGZ1bGwuCi0gKi8KLSNkZWZpbmUgRkxQX0JBVENIX1dBS0VVUF9PTl9GSUZPX0ZVTEwgICAgICAgIDB4MDAwMDAwMQotCi0vKioKICAqIFdoaWxlIGJhdGNoaW5nLCB0aGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIG5vdCBjYWxsIHRoZQogICogZmxwX2xvY2F0aW9uX2NhbGxiYWNrIG9uIGV2ZXJ5IGxvY2F0aW9uIGZpeC4gSG93ZXZlciwKICAqIHNvbWV0aW1lcyBpbiBoaWdoIHBvd2VyIG1vZGUsIHRoZSBzeXN0ZW0gbWlnaHQgbmVlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9nbnNzLWJhc2UuaCBiL2luY2x1ZGUvaGFyZHdhcmUvZ25zcy1iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2MDIwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvZ25zcy1iYXNlLmgKQEAgLTAsMCArMSwyNzUgQEAKKy8vIFRoaXMgZmlsZSBpcyBhdXRvZ2VuZXJhdGVkIGJ5IGhpZGwtZ2VuLiBEbyBub3QgZWRpdCBtYW51YWxseS4KKy8vIFNvdXJjZTogYW5kcm9pZC5oYXJkd2FyZS5nbnNzQDEuMAorLy8gUm9vdDogYW5kcm9pZC5oYXJkd2FyZTpoYXJkd2FyZS9pbnRlcmZhY2VzCisKKyNpZm5kZWYgSElETF9HRU5FUkFURURfQU5EUk9JRF9IQVJEV0FSRV9HTlNTX1YxXzBfRVhQT1JURURfQ09OU1RBTlRTX0hfCisjZGVmaW5lIEhJRExfR0VORVJBVEVEX0FORFJPSURfSEFSRFdBUkVfR05TU19WMV8wX0VYUE9SVEVEX0NPTlNUQU5UU19IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0geworICAgIEdOU1NfTUFYX1NWU19DT1VOVCA9IDY0dSwgLy8gNjQKK307CisKK2VudW0geworICAgIEdOU1NfQ09OU1RFTExBVElPTl9VTktOT1dOID0gMCwKKyAgICBHTlNTX0NPTlNURUxMQVRJT05fR1BTID0gMSwKKyAgICBHTlNTX0NPTlNURUxMQVRJT05fU0JBUyA9IDIsCisgICAgR05TU19DT05TVEVMTEFUSU9OX0dMT05BU1MgPSAzLAorICAgIEdOU1NfQ09OU1RFTExBVElPTl9RWlNTID0gNCwKKyAgICBHTlNTX0NPTlNURUxMQVRJT05fQkVJRE9VID0gNSwKKyAgICBHTlNTX0NPTlNURUxMQVRJT05fR0FMSUxFTyA9IDYsCit9OworCitlbnVtIHsKKyAgICBHUFNfTE9DQVRJT05fSEFTX0xBVF9MT05HID0gMSwgLy8gMHgwMDAxCisgICAgR1BTX0xPQ0FUSU9OX0hBU19BTFRJVFVERSA9IDIsIC8vIDB4MDAwMgorICAgIEdQU19MT0NBVElPTl9IQVNfU1BFRUQgPSA0LCAvLyAweDAwMDQKKyAgICBHUFNfTE9DQVRJT05fSEFTX0JFQVJJTkcgPSA4LCAvLyAweDAwMDgKKyAgICBHUFNfTE9DQVRJT05fSEFTX0hPUklaT05UQUxfQUNDVVJBQ1kgPSAxNiwgLy8gMHgwMDEwCisgICAgR1BTX0xPQ0FUSU9OX0hBU19WRVJUSUNBTF9BQ0NVUkFDWSA9IDMyLCAvLyAweDAwMjAKKyAgICBHUFNfTE9DQVRJT05fSEFTX1NQRUVEX0FDQ1VSQUNZID0gNjQsIC8vIDB4MDA0MAorICAgIEdQU19MT0NBVElPTl9IQVNfQkVBUklOR19BQ0NVUkFDWSA9IDEyOCwgLy8gMHgwMDgwCit9OworCitlbnVtIHsKKyAgICBBUE5fSVBfSU5WQUxJRCA9IDAsCisgICAgQVBOX0lQX0lQVjQgPSAxLAorICAgIEFQTl9JUF9JUFY2ID0gMiwKKyAgICBBUE5fSVBfSVBWNFY2ID0gMywKK307CisKK2VudW0geworICAgIEFHUFNfVFlQRV9TVVBMID0gMSwKKyAgICBBR1BTX1RZUEVfQzJLID0gMiwKK307CisKK2VudW0geworICAgIEdOU1NfUkVRVUVTVF9BR05TU19EQVRBX0NPTk4gPSAxLAorICAgIEdOU1NfUkVMRUFTRV9BR05TU19EQVRBX0NPTk4gPSAyLAorICAgIEdOU1NfQUdOU1NfREFUQV9DT05ORUNURUQgPSAzLAorICAgIEdOU1NfQUdOU1NfREFUQV9DT05OX0RPTkUgPSA0LAorICAgIEdOU1NfQUdOU1NfREFUQV9DT05OX0ZBSUxFRCA9IDUsCit9OworCitlbnVtIHsKKyAgICBBR1BTX1NFVElEX1RZUEVfTk9ORSA9IDAsCisgICAgQUdQU19TRVRJRF9UWVBFX0lNU0kgPSAxLAorICAgIEFHUFNfU0VUSURfVFlQRV9NU0lTRE0gPSAyLAorfTsKKworZW51bSB7CisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX01PQklMRSA9IDAsCisgICAgQUdQU19SSUxfTkVUV09SS19UWVBFX1dJRkkgPSAxLAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9NTVMgPSAyLAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9TVVBMID0gMywKKyAgICBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfRFVOID0gNCwKKyAgICBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfSElQUkkgPSA1LAorICAgIEFHUFNfUklMX05FVFdPUktfVFlQRV9XSU1BWCA9IDYsCit9OworCitlbnVtIHsKKyAgICBBR1BTX1JFRl9MT0NBVElPTl9UWVBFX0dTTV9DRUxMSUQgPSAxLAorICAgIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfVU1UU19DRUxMSUQgPSAyLAorICAgIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfTFRFX0NFTExJRCA9IDQsCit9OworCitlbnVtIHsKKyAgICBBR1BTX1JJTF9SRVFVRVNUX1NFVElEX0lNU0kgPSAxdSwgLy8gKDEgPDwgMEwpCisgICAgQUdQU19SSUxfUkVRVUVTVF9TRVRJRF9NU0lTRE4gPSAydSwgLy8gKDEgPDwgMUwpCit9OworCitlbnVtIHsKKyAgICBHUFNfUE9TSVRJT05fTU9ERV9TVEFOREFMT05FID0gMCwKKyAgICBHUFNfUE9TSVRJT05fTU9ERV9NU19CQVNFRCA9IDEsCisgICAgR1BTX1BPU0lUSU9OX01PREVfTVNfQVNTSVNURUQgPSAyLAorfTsKKworZW51bSB7CisgICAgR1BTX1BPU0lUSU9OX1JFQ1VSUkVOQ0VfUEVSSU9ESUMgPSAwdSwgLy8gMAorICAgIEdQU19QT1NJVElPTl9SRUNVUlJFTkNFX1NJTkdMRSA9IDF1LCAvLyAxCit9OworCitlbnVtIHsKKyAgICBHUFNfREVMRVRFX0VQSEVNRVJJUyA9IDEsIC8vIDB4MDAwMQorICAgIEdQU19ERUxFVEVfQUxNQU5BQyA9IDIsIC8vIDB4MDAwMgorICAgIEdQU19ERUxFVEVfUE9TSVRJT04gPSA0LCAvLyAweDAwMDQKKyAgICBHUFNfREVMRVRFX1RJTUUgPSA4LCAvLyAweDAwMDgKKyAgICBHUFNfREVMRVRFX0lPTk8gPSAxNiwgLy8gMHgwMDEwCisgICAgR1BTX0RFTEVURV9VVEMgPSAzMiwgLy8gMHgwMDIwCisgICAgR1BTX0RFTEVURV9IRUFMVEggPSA2NCwgLy8gMHgwMDQwCisgICAgR1BTX0RFTEVURV9TVkRJUiA9IDEyOCwgLy8gMHgwMDgwCisgICAgR1BTX0RFTEVURV9TVlNURUVSID0gMjU2LCAvLyAweDAxMDAKKyAgICBHUFNfREVMRVRFX1NBREFUQSA9IDUxMiwgLy8gMHgwMjAwCisgICAgR1BTX0RFTEVURV9SVEkgPSAxMDI0LCAvLyAweDA0MDAKKyAgICBHUFNfREVMRVRFX0NFTExEQl9JTkZPID0gMzI3NjgsIC8vIDB4ODAwMAorICAgIEdQU19ERUxFVEVfQUxMID0gNjU1MzUsIC8vIDB4RkZGRgorfTsKKworZW51bSB7CisgICAgRkxQX0JBVENIX1dBS0VVUF9PTl9GSUZPX0ZVTEwgPSAxLCAvLyAweDAxCit9OworCitlbnVtIHsKKyAgICBHUFNfQ0FQQUJJTElUWV9TQ0hFRFVMSU5HID0gMXUsIC8vICgxIDw8IDApCisgICAgR1BTX0NBUEFCSUxJVFlfTVNCID0gMnUsIC8vICgxIDw8IDEpCisgICAgR1BTX0NBUEFCSUxJVFlfTVNBID0gNHUsIC8vICgxIDw8IDIpCisgICAgR1BTX0NBUEFCSUxJVFlfU0lOR0xFX1NIT1QgPSA4dSwgLy8gKDEgPDwgMykKKyAgICBHUFNfQ0FQQUJJTElUWV9PTl9ERU1BTkRfVElNRSA9IDE2dSwgLy8gKDEgPDwgNCkKKyAgICBHUFNfQ0FQQUJJTElUWV9HRU9GRU5DSU5HID0gMzJ1LCAvLyAoMSA8PCA1KQorICAgIEdQU19DQVBBQklMSVRZX01FQVNVUkVNRU5UUyA9IDY0dSwgLy8gKDEgPDwgNikKKyAgICBHUFNfQ0FQQUJJTElUWV9OQVZfTUVTU0FHRVMgPSAxMjh1LCAvLyAoMSA8PCA3KQorfTsKKworZW51bSB7CisgICAgR1BTX1NUQVRVU19OT05FID0gMCwKKyAgICBHUFNfU1RBVFVTX1NFU1NJT05fQkVHSU4gPSAxLAorICAgIEdQU19TVEFUVVNfU0VTU0lPTl9FTkQgPSAyLAorICAgIEdQU19TVEFUVVNfRU5HSU5FX09OID0gMywKKyAgICBHUFNfU1RBVFVTX0VOR0lORV9PRkYgPSA0LAorfTsKKworZW51bSB7CisgICAgR05TU19TVl9GTEFHU19OT05FID0gMCwKKyAgICBHTlNTX1NWX0ZMQUdTX0hBU19FUEhFTUVSSVNfREFUQSA9IDEsIC8vICgxIDw8IDApCisgICAgR05TU19TVl9GTEFHU19IQVNfQUxNQU5BQ19EQVRBID0gMiwgLy8gKDEgPDwgMSkKKyAgICBHTlNTX1NWX0ZMQUdTX1VTRURfSU5fRklYID0gNCwgLy8gKDEgPDwgMikKKyAgICBHTlNTX1NWX0ZMQUdTX0hBU19DQVJSSUVSX0ZSRVFVRU5DWSA9IDgsIC8vICgxIDw8IDMpCit9OworCitlbnVtIHsKKyAgICBHUFNfR0VPRkVOQ0VfRU5URVJFRCA9IDEsIC8vICgxIDw8IDBMKQorICAgIEdQU19HRU9GRU5DRV9FWElURUQgPSAyLCAvLyAoMSA8PCAxTCkKKyAgICBHUFNfR0VPRkVOQ0VfVU5DRVJUQUlOID0gNCwgLy8gKDEgPDwgMkwpCit9OworCitlbnVtIHsKKyAgICBHUFNfR0VPRkVOQ0VfVU5BVkFJTEFCTEUgPSAxLCAvLyAoMSA8PCAwTCkKKyAgICBHUFNfR0VPRkVOQ0VfQVZBSUxBQkxFID0gMiwgLy8gKDEgPDwgMUwpCit9OworCitlbnVtIHsKKyAgICBHUFNfR0VPRkVOQ0VfT1BFUkFUSU9OX1NVQ0NFU1MgPSAwLAorICAgIEdQU19HRU9GRU5DRV9FUlJPUl9UT09fTUFOWV9HRU9GRU5DRVMgPSAtMTAwLCAvLyAoLTEwMCkKKyAgICBHUFNfR0VPRkVOQ0VfRVJST1JfSURfRVhJU1RTID0gLTEwMSwgLy8gKC0xMDEpCisgICAgR1BTX0dFT0ZFTkNFX0VSUk9SX0lEX1VOS05PV04gPSAtMTAyLCAvLyAoLTEwMikKKyAgICBHUFNfR0VPRkVOQ0VfRVJST1JfSU5WQUxJRF9UUkFOU0lUSU9OID0gLTEwMywgLy8gKC0xMDMpCisgICAgR1BTX0dFT0ZFTkNFX0VSUk9SX0dFTkVSSUMgPSAtMTQ5LCAvLyAoLTE0OSkKK307CisKK2VudW0geworICAgIEdQU19NRUFTVVJFTUVOVF9TVUNDRVNTID0gMCwKKyAgICBHUFNfTUVBU1VSRU1FTlRfRVJST1JfQUxSRUFEWV9JTklUID0gLTEwMCwgLy8gKC0xMDApCisgICAgR1BTX01FQVNVUkVNRU5UX0VSUk9SX0dFTkVSSUMgPSAtMTAxLCAvLyAoLTEwMSkKK307CisKK2VudW0geworICAgIEdOU1NfQ0xPQ0tfSEFTX0xFQVBfU0VDT05EID0gMSwgLy8gKDEgPDwgMCkKKyAgICBHTlNTX0NMT0NLX0hBU19USU1FX1VOQ0VSVEFJTlRZID0gMiwgLy8gKDEgPDwgMSkKKyAgICBHTlNTX0NMT0NLX0hBU19GVUxMX0JJQVMgPSA0LCAvLyAoMSA8PCAyKQorICAgIEdOU1NfQ0xPQ0tfSEFTX0JJQVMgPSA4LCAvLyAoMSA8PCAzKQorICAgIEdOU1NfQ0xPQ0tfSEFTX0JJQVNfVU5DRVJUQUlOVFkgPSAxNiwgLy8gKDEgPDwgNCkKKyAgICBHTlNTX0NMT0NLX0hBU19EUklGVCA9IDMyLCAvLyAoMSA8PCA1KQorICAgIEdOU1NfQ0xPQ0tfSEFTX0RSSUZUX1VOQ0VSVEFJTlRZID0gNjQsIC8vICgxIDw8IDYpCit9OworCitlbnVtIHsKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19TTlIgPSAxdSwgLy8gKDEgPDwgMCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX0ZSRVFVRU5DWSA9IDUxMnUsIC8vICgxIDw8IDkpCisgICAgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9DWUNMRVMgPSAxMDI0dSwgLy8gKDEgPDwgMTApCisgICAgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9QSEFTRSA9IDIwNDh1LCAvLyAoMSA8PCAxMSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX1BIQVNFX1VOQ0VSVEFJTlRZID0gNDA5NnUsIC8vICgxIDw8IDEyKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0FVVE9NQVRJQ19HQUlOX0NPTlRST0wgPSA4MTkydSwgLy8gKDEgPDwgMTMpCit9OworCitlbnVtIHsKKyAgICBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfVU5LTk9XTiA9IDAsCisgICAgR05TU19NVUxUSVBBVEhfSU5ESUNBVE9SX1BSRVNFTlQgPSAxLAorICAgIEdOU1NfTVVMVElQQVRIX0lORElDQVRJT1JfTk9UX1BSRVNFTlQgPSAyLAorfTsKKworZW51bSB7CisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9VTktOT1dOID0gMHUsIC8vIDAKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0NPREVfTE9DSyA9IDF1LCAvLyAoMSA8PCAwKQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQklUX1NZTkMgPSAydSwgLy8gKDEgPDwgMSkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NVQkZSQU1FX1NZTkMgPSA0dSwgLy8gKDEgPDwgMikKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1RPV19ERUNPREVEID0gOHUsIC8vICgxIDw8IDMpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9NU0VDX0FNQklHVU9VUyA9IDE2dSwgLy8gKDEgPDwgNCkKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NZTUJPTF9TWU5DID0gMzJ1LCAvLyAoMSA8PCA1KQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0xPX1NUUklOR19TWU5DID0gNjR1LCAvLyAoMSA8PCA2KQorICAgIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0xPX1RPRF9ERUNPREVEID0gMTI4dSwgLy8gKDEgPDwgNykKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0JEU19EMl9CSVRfU1lOQyA9IDI1NnUsIC8vICgxIDw8IDgpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9CRFNfRDJfU1VCRlJBTUVfU1lOQyA9IDUxMnUsIC8vICgxIDw8IDkpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HQUxfRTFCQ19DT0RFX0xPQ0sgPSAxMDI0dSwgLy8gKDEgPDwgMTApCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HQUxfRTFDXzJORF9DT0RFX0xPQ0sgPSAyMDQ4dSwgLy8gKDEgPDwgMTEpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HQUxfRTFCX1BBR0VfU1lOQyA9IDQwOTZ1LCAvLyAoMSA8PCAxMikKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NCQVNfU1lOQyA9IDgxOTJ1LCAvLyAoMSA8PCAxMykKKyAgICBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1RPV19LTk9XTiA9IDE2Mzg0dSwgLy8gKDEgPDwgMTQpCisgICAgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HTE9fVE9EX0tOT1dOID0gMzI3Njh1LCAvLyAoMSA8PCAxNSkKK307CisKK2VudW0geworICAgIEdOU1NfQURSX1NUQVRFX1VOS05PV04gPSAwLAorICAgIEdOU1NfQURSX1NUQVRFX1ZBTElEID0gMSwgLy8gKDEgPDwgMCkKKyAgICBHTlNTX0FEUl9TVEFURV9SRVNFVCA9IDIsIC8vICgxIDw8IDEpCisgICAgR05TU19BRFJfU1RBVEVfQ1lDTEVfU0xJUCA9IDQsIC8vICgxIDw8IDIpCit9OworCitlbnVtIHsKKyAgICBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX1NVQ0NFU1MgPSAwLAorICAgIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfRVJST1JfQUxSRUFEWV9JTklUID0gLTEwMCwgLy8gKC0xMDApCisgICAgR1BTX05BVklHQVRJT05fTUVTU0FHRV9FUlJPUl9HRU5FUklDID0gLTEwMSwgLy8gKC0xMDEpCit9OworCitlbnVtIHsKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX1VOS05PV04gPSAwLAorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MMUNBID0gMjU3LCAvLyAweDAxMDEKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dOU1NfTDJDTkFWID0gMjU4LCAvLyAweDAxMDIKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dOU1NfTDVDTkFWID0gMjU5LCAvLyAweDAxMDMKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dOU1NfQ05BVjIgPSAyNjAsIC8vIDB4MDEwNAorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0xPX0wxQ0EgPSA3NjksIC8vIDB4MDMwMQorICAgIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfQkRTX0QxID0gMTI4MSwgLy8gMHgwNTAxCisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9CRFNfRDIgPSAxMjgyLCAvLyAweDA1MDIKKyAgICBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dBTF9JID0gMTUzNywgLy8gMHgwNjAxCisgICAgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HQUxfRiA9IDE1MzgsIC8vIDB4MDYwMgorfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBOQVZfTUVTU0FHRV9TVEFUVVNfUEFSSVRZX1BBU1NFRCA9IDEsIC8vICgxIDw8IDApCisgICAgTkFWX01FU1NBR0VfU1RBVFVTX1BBUklUWV9SRUJVSUxUID0gMiwgLy8gKDEgPDwgMSkKKyAgICBOQVZfTUVTU0FHRV9TVEFUVVNfVU5LTk9XTiA9IDAsCit9IG5hdmlnYXRpb25fbWVzc2FnZV9zdGF0dXM7CisKK2VudW0geworICAgIEdQU19OSV9UWVBFX1ZPSUNFID0gMSwKKyAgICBHUFNfTklfVFlQRV9VTVRTX1NVUEwgPSAyLAorICAgIEdQU19OSV9UWVBFX1VNVFNfQ1RSTF9QTEFORSA9IDMsCit9OworCitlbnVtIHsKKyAgICBHUFNfTklfTkVFRF9OT1RJRlkgPSAxdSwgLy8gMHgwMDAxCisgICAgR1BTX05JX05FRURfVkVSSUZZID0gMnUsIC8vIDB4MDAwMgorICAgIEdQU19OSV9QUklWQUNZX09WRVJSSURFID0gNHUsIC8vIDB4MDAwNAorfTsKKworZW51bSB7CisgICAgR1BTX05JX1JFU1BPTlNFX0FDQ0VQVCA9IDEsCisgICAgR1BTX05JX1JFU1BPTlNFX0RFTlkgPSAyLAorICAgIEdQU19OSV9SRVNQT05TRV9OT1JFU1AgPSAzLAorfTsKKworZW51bSB7CisgICAgR1BTX0VOQ19OT05FID0gMCwKKyAgICBHUFNfRU5DX1NVUExfR1NNX0RFRkFVTFQgPSAxLAorICAgIEdQU19FTkNfU1VQTF9VVEY4ID0gMiwKKyAgICBHUFNfRU5DX1NVUExfVUNTMiA9IDMsCisgICAgR1BTX0VOQ19VTktOT1dOID0gLTEsIC8vICgtMSkKK307CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLy8gSElETF9HRU5FUkFURURfQU5EUk9JRF9IQVJEV0FSRV9HTlNTX1YxXzBfRVhQT1JURURfQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2dwcy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9ncHMuaAppbmRleCBhY2Y2MDFiLi40ZTEwOGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2dwcy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvZ3BzLmgKQEAgLTI2LDggKzI2LDQyIEBACiAKICNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSAiZ25zcy1iYXNlLmgiCisKIF9fQkVHSU5fREVDTFMKIAorLyoKKyAqIEVudW1zIGRlZmluZWQgaW4gSElETCBpbiBoYXJkd2FyZS9pbnRlcmZhY2VzIGFyZSBhdXRvLWdlbmVyYXRlZCBhbmQgcHJlc2VudAorICogaW4gZ25zcy1iYXNlLmguCisgKi8KKworLyogZm9yIGNvbXBhdGliaWxpdHkgKi8KKworLyoqIE1heGltdW0gbnVtYmVyIG9mIFNWcyBmb3IgZ3BzX3N2X3N0YXR1c19jYWxsYmFjaygpLiAqLworI2RlZmluZSBHTlNTX01BWF9TVlMgR05TU19NQVhfU1ZTX0NPVU5UCisvKiogTWF4aW11bSBudW1iZXIgb2YgTWVhc3VyZW1lbnRzIGluIGduc3NfbWVhc3VyZW1lbnRfY2FsbGJhY2soKS4gKi8KKyNkZWZpbmUgR05TU19NQVhfTUVBU1VSRU1FTlQgR05TU19NQVhfU1ZTX0NPVU5UCisKKyNkZWZpbmUgR1BTX1JFUVVFU1RfQUdQU19EQVRBX0NPTk4gR05TU19SRVFVRVNUX0FHTlNTX0RBVEFfQ09OTgorI2RlZmluZSBHUFNfUkVMRUFTRV9BR1BTX0RBVEFfQ09OTiBHTlNTX1JFTEVBU0VfQUdOU1NfREFUQV9DT05OCisjZGVmaW5lIEdQU19BR1BTX0RBVEFfQ09OTkVDVEVEIEdOU1NfQUdOU1NfREFUQV9DT05ORUNURUQKKyNkZWZpbmUgR1BTX0FHUFNfREFUQV9DT05OX0RPTkUgR05TU19BR05TU19EQVRBX0NPTk5fRE9ORQorI2RlZmluZSBHUFNfQUdQU19EQVRBX0NPTk5fRkFJTEVEIEdOU1NfQUdOU1NfREFUQV9DT05OX0ZBSUxFRAorI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFX01NUyBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU1TCisjZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9NT0JJTEVfU1VQTCBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfU1VQTAorI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX01PQklMRV9EVU4gQUdQU19SSUxfTkVUV09SS19UWVBFX0RVTgorI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX01PQklMRV9ISVBSSSBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfSElQUkkKKyNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UVFlQRV9XSU1BWCBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfV0lNQVgKKyNkZWZpbmUgR05TU19NVUxUSVBBVEhfSU5ESUNBVE9SX05PVF9QUkVTRU5UIEdOU1NfTVVMVElQQVRIX0lORElDQVRJT1JfTk9UX1BSRVNFTlQKKyNkZWZpbmUgQUdQU19TRVRJRF9UWVBFX01TSVNETiBBR1BTX1NFVElEX1RZUEVfTVNJU0RNCisjZGVmaW5lIEdQU19NRUFTVVJFTUVOVF9PUEVSQVRJT05fU1VDQ0VTUyBHUFNfTUVBU1VSRU1FTlRfU1VDQ0VTUworI2RlZmluZSBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX09QRVJBVElPTl9TVUNDRVNTIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfU1VDQ0VTUworI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dQU19MMUNBIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19MMUNBCisjZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0wyQ05BViBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dOU1NfTDJDTkFWCisjZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0w1Q05BViBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dOU1NfTDVDTkFWCisjZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0NOQVYyIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR05TU19DTkFWMgorI2RlZmluZSBHUFNfTE9DQVRJT05fSEFTX0FDQ1VSQUNZIEdQU19MT0NBVElPTl9IQVNfSE9SSVpPTlRBTF9BQ0NVUkFDWQorCiAvKioKICAqIFRoZSBpZCBvZiB0aGlzIG1vZHVsZQogICovCkBAIC0zOSwxMjcgKzczLDM0IEBACiAKIC8qKiBNYXhpbXVtIG51bWJlciBvZiBTVnMgZm9yIGdwc19zdl9zdGF0dXNfY2FsbGJhY2soKS4gKi8KICNkZWZpbmUgR1BTX01BWF9TVlMgMzIKLS8qKiBNYXhpbXVtIG51bWJlciBvZiBTVnMgZm9yIGdwc19zdl9zdGF0dXNfY2FsbGJhY2soKS4gKi8KLSNkZWZpbmUgR05TU19NQVhfU1ZTIDY0CiAKIC8qKiBNYXhpbXVtIG51bWJlciBvZiBNZWFzdXJlbWVudHMgaW4gZ3BzX21lYXN1cmVtZW50X2NhbGxiYWNrKCkuICovCiAjZGVmaW5lIEdQU19NQVhfTUVBU1VSRU1FTlQgICAzMgogCi0vKiogTWF4aW11bSBudW1iZXIgb2YgTWVhc3VyZW1lbnRzIGluIGduc3NfbWVhc3VyZW1lbnRfY2FsbGJhY2soKS4gKi8KLSNkZWZpbmUgR05TU19NQVhfTUVBU1VSRU1FTlQgICA2NAotCiAvKiogUmVxdWVzdGVkIG9wZXJhdGlvbmFsIG1vZGUgZm9yIEdQUyBvcGVyYXRpb24uICovCiB0eXBlZGVmIHVpbnQzMl90IEdwc1Bvc2l0aW9uTW9kZTsKLS8qIElNUE9SVEFOVDogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWVzIG11c3QgbWF0Y2gKLSAqIGNvbnN0YW50cyBpbiBHcHNMb2NhdGlvblByb3ZpZGVyLmphdmEuICovCi0vKiogTW9kZSBmb3IgcnVubmluZyBHUFMgc3RhbmRhbG9uZSAobm8gYXNzaXN0YW5jZSkuICovCi0jZGVmaW5lIEdQU19QT1NJVElPTl9NT0RFX1NUQU5EQUxPTkUgICAgMAotLyoqIEFHUFMgTVMtQmFzZWQgbW9kZS4gKi8KLSNkZWZpbmUgR1BTX1BPU0lUSU9OX01PREVfTVNfQkFTRUQgICAgICAxCi0vKioKLSAqIEFHUFMgTVMtQXNzaXN0ZWQgbW9kZS4gVGhpcyBtb2RlIGlzIG5vdCBtYWludGFpbmVkIGJ5IHRoZSBwbGF0Zm9ybSBhbnltb3JlLgotICogSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIEdQU19QT1NJVElPTl9NT0RFX01TX0JBU0VEIGluc3RlYWQuCi0gKi8KLSNkZWZpbmUgR1BTX1BPU0lUSU9OX01PREVfTVNfQVNTSVNURUQgICAyCiAKIC8qKiBSZXF1ZXN0ZWQgcmVjdXJyZW5jZSBtb2RlIGZvciBHUFMgb3BlcmF0aW9uLiAqLwogdHlwZWRlZiB1aW50MzJfdCBHcHNQb3NpdGlvblJlY3VycmVuY2U7Ci0vKiBJTVBPUlRBTlQ6IE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHZhbHVlcyBtdXN0IG1hdGNoCi0gKiBjb25zdGFudHMgaW4gR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhLiAqLwotLyoqIFJlY2VpdmUgR1BTIGZpeGVzIG9uIGEgcmVjdXJyaW5nIGJhc2lzIGF0IGEgc3BlY2lmaWVkIHBlcmlvZC4gKi8KLSNkZWZpbmUgR1BTX1BPU0lUSU9OX1JFQ1VSUkVOQ0VfUEVSSU9ESUMgICAgMAotLyoqIFJlcXVlc3QgYSBzaW5nbGUgc2hvdCBHUFMgZml4LiAqLwotI2RlZmluZSBHUFNfUE9TSVRJT05fUkVDVVJSRU5DRV9TSU5HTEUgICAgICAxCiAKIC8qKiBHUFMgc3RhdHVzIGV2ZW50IHZhbHVlcy4gKi8KIHR5cGVkZWYgdWludDE2X3QgR3BzU3RhdHVzVmFsdWU7Ci0vKiBJTVBPUlRBTlQ6IE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHZhbHVlcyBtdXN0IG1hdGNoCi0gKiBjb25zdGFudHMgaW4gR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhLiAqLwotLyoqIEdQUyBzdGF0dXMgdW5rbm93bi4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19OT05FICAgICAgICAgICAgIDAKLS8qKiBHUFMgaGFzIGJlZ3VuIG5hdmlnYXRpbmcuICovCi0jZGVmaW5lIEdQU19TVEFUVVNfU0VTU0lPTl9CRUdJTiAgICAxCi0vKiogR1BTIGhhcyBzdG9wcGVkIG5hdmlnYXRpbmcuICovCi0jZGVmaW5lIEdQU19TVEFUVVNfU0VTU0lPTl9FTkQgICAgICAyCi0vKiogR1BTIGhhcyBwb3dlcmVkIG9uIGJ1dCBpcyBub3QgbmF2aWdhdGluZy4gKi8KLSNkZWZpbmUgR1BTX1NUQVRVU19FTkdJTkVfT04gICAgICAgIDMKLS8qKiBHUFMgaXMgcG93ZXJlZCBvZmYuICovCi0jZGVmaW5lIEdQU19TVEFUVVNfRU5HSU5FX09GRiAgICAgICA0CiAKIC8qKiBGbGFncyB0byBpbmRpY2F0ZSB3aGljaCB2YWx1ZXMgYXJlIHZhbGlkIGluIGEgR3BzTG9jYXRpb24uICovCiB0eXBlZGVmIHVpbnQxNl90IEdwc0xvY2F0aW9uRmxhZ3M7Ci0vKiBJTVBPUlRBTlQ6IE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHZhbHVlcyBtdXN0IG1hdGNoCi0gKiBjb25zdGFudHMgaW4gR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhLiAqLwotLyoqIEdwc0xvY2F0aW9uIGhhcyB2YWxpZCBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlLiAqLwotI2RlZmluZSBHUFNfTE9DQVRJT05fSEFTX0xBVF9MT05HICAgMHgwMDAxCi0vKiogR3BzTG9jYXRpb24gaGFzIHZhbGlkIGFsdGl0dWRlLiAqLwotI2RlZmluZSBHUFNfTE9DQVRJT05fSEFTX0FMVElUVURFICAgMHgwMDAyCi0vKiogR3BzTG9jYXRpb24gaGFzIHZhbGlkIHNwZWVkLiAqLwotI2RlZmluZSBHUFNfTE9DQVRJT05fSEFTX1NQRUVEICAgICAgMHgwMDA0Ci0vKiogR3BzTG9jYXRpb24gaGFzIHZhbGlkIGJlYXJpbmcuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfQkVBUklORyAgICAweDAwMDgKLS8qKiBHcHNMb2NhdGlvbiBoYXMgdmFsaWQgYWNjdXJhY3kuICovCi0jZGVmaW5lIEdQU19MT0NBVElPTl9IQVNfQUNDVVJBQ1kgICAweDAwMTAKLQotLyoqIEZsYWdzIGZvciB0aGUgZ3BzX3NldF9jYXBhYmlsaXRpZXMgY2FsbGJhY2suICovCi0KLS8qKgotICogR1BTIEhBTCBzY2hlZHVsZXMgZml4ZXMgZm9yIEdQU19QT1NJVElPTl9SRUNVUlJFTkNFX1BFUklPRElDIG1vZGUuIElmIHRoaXMgaXMKLSAqIG5vdCBzZXQsIHRoZW4gdGhlIGZyYW1ld29yayB3aWxsIHVzZSAxMDAwbXMgZm9yIG1pbl9pbnRlcnZhbCBhbmQgd2lsbCBzdGFydAotICogYW5kIGNhbGwgc3RhcnQoKSBhbmQgc3RvcCgpIHRvIHNjaGVkdWxlIHRoZSBHUFMuCi0gKi8KLSNkZWZpbmUgR1BTX0NBUEFCSUxJVFlfU0NIRURVTElORyAgICAgICAoMSA8PCAwKQotLyoqIEdQUyBzdXBwb3J0cyBNUy1CYXNlZCBBR1BTIG1vZGUgKi8KLSNkZWZpbmUgR1BTX0NBUEFCSUxJVFlfTVNCICAgICAgICAgICAgICAoMSA8PCAxKQotLyoqIEdQUyBzdXBwb3J0cyBNUy1Bc3Npc3RlZCBBR1BTIG1vZGUgKi8KLSNkZWZpbmUgR1BTX0NBUEFCSUxJVFlfTVNBICAgICAgICAgICAgICAoMSA8PCAyKQotLyoqIEdQUyBzdXBwb3J0cyBzaW5nbGUtc2hvdCBmaXhlcyAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9TSU5HTEVfU0hPVCAgICAgICgxIDw8IDMpCi0vKiogR1BTIHN1cHBvcnRzIG9uIGRlbWFuZCB0aW1lIGluamVjdGlvbiAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9PTl9ERU1BTkRfVElNRSAgICgxIDw8IDQpCi0vKiogR1BTIHN1cHBvcnRzIEdlb2ZlbmNpbmcgICovCi0jZGVmaW5lIEdQU19DQVBBQklMSVRZX0dFT0ZFTkNJTkcgICAgICAgKDEgPDwgNSkKLS8qKiBHUFMgc3VwcG9ydHMgTWVhc3VyZW1lbnRzLiAqLwotI2RlZmluZSBHUFNfQ0FQQUJJTElUWV9NRUFTVVJFTUVOVFMgICAgICgxIDw8IDYpCi0vKiogR1BTIHN1cHBvcnRzIE5hdmlnYXRpb24gTWVzc2FnZXMgKi8KLSNkZWZpbmUgR1BTX0NBUEFCSUxJVFlfTkFWX01FU1NBR0VTICAgICAoMSA8PCA3KQogCiAvKioKICAqIEZsYWdzIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBhaWRpbmcgZGF0YSB0byBkZWxldGUgd2hlbiBjYWxsaW5nCiAgKiBkZWxldGVfYWlkaW5nX2RhdGEoKS4KICAqLwogdHlwZWRlZiB1aW50MTZfdCBHcHNBaWRpbmdEYXRhOwotLyogSU1QT1JUQU5UOiBOb3RlIHRoYXQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgbXVzdCBtYXRjaAotICogY29uc3RhbnRzIGluIEdwc0xvY2F0aW9uUHJvdmlkZXIuamF2YS4gKi8KLSNkZWZpbmUgR1BTX0RFTEVURV9FUEhFTUVSSVMgICAgICAgIDB4MDAwMQotI2RlZmluZSBHUFNfREVMRVRFX0FMTUFOQUMgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIEdQU19ERUxFVEVfUE9TSVRJT04gICAgICAgICAweDAwMDQKLSNkZWZpbmUgR1BTX0RFTEVURV9USU1FICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBHUFNfREVMRVRFX0lPTk8gICAgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIEdQU19ERUxFVEVfVVRDICAgICAgICAgICAgICAweDAwMjAKLSNkZWZpbmUgR1BTX0RFTEVURV9IRUFMVEggICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBHUFNfREVMRVRFX1NWRElSICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIEdQU19ERUxFVEVfU1ZTVEVFUiAgICAgICAgICAweDAxMDAKLSNkZWZpbmUgR1BTX0RFTEVURV9TQURBVEEgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBHUFNfREVMRVRFX1JUSSAgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lIEdQU19ERUxFVEVfQ0VMTERCX0lORk8gICAgICAweDgwMDAKLSNkZWZpbmUgR1BTX0RFTEVURV9BTEwgICAgICAgICAgICAgIDB4RkZGRgogCiAvKiogQUdQUyB0eXBlICovCiB0eXBlZGVmIHVpbnQxNl90IEFHcHNUeXBlOwotI2RlZmluZSBBR1BTX1RZUEVfU1VQTCAgICAgICAgICAxCi0jZGVmaW5lIEFHUFNfVFlQRV9DMksgICAgICAgICAgIDIKIAogdHlwZWRlZiB1aW50MTZfdCBBR3BzU2V0SURUeXBlOwotI2RlZmluZSBBR1BTX1NFVElEX1RZUEVfTk9ORSAgICAwCi0jZGVmaW5lIEFHUFNfU0VUSURfVFlQRV9JTVNJICAgIDEKLSNkZWZpbmUgQUdQU19TRVRJRF9UWVBFX01TSVNETiAgMgogCiB0eXBlZGVmIHVpbnQxNl90IEFwbklwVHlwZTsKLSNkZWZpbmUgQVBOX0lQX0lOVkFMSUQgICAgICAgICAgMAotI2RlZmluZSBBUE5fSVBfSVBWNCAgICAgICAgICAgICAxCi0jZGVmaW5lIEFQTl9JUF9JUFY2ICAgICAgICAgICAgIDIKLSNkZWZpbmUgQVBOX0lQX0lQVjRWNiAgICAgICAgICAgMwogCiAvKioKICAqIFN0cmluZyBsZW5ndGggY29uc3RhbnRzCkBAIC0xNzEsNzEgKzExMiwzMSBAQAogICogR3BzTmlUeXBlIGNvbnN0YW50cwogICovCiB0eXBlZGVmIHVpbnQzMl90IEdwc05pVHlwZTsKLSNkZWZpbmUgR1BTX05JX1RZUEVfVk9JQ0UgICAgICAgICAgICAgIDEKLSNkZWZpbmUgR1BTX05JX1RZUEVfVU1UU19TVVBMICAgICAgICAgIDIKLSNkZWZpbmUgR1BTX05JX1RZUEVfVU1UU19DVFJMX1BMQU5FICAgIDMKIAogLyoqCiAgKiBHcHNOaU5vdGlmeUZsYWdzIGNvbnN0YW50cwogICovCiB0eXBlZGVmIHVpbnQzMl90IEdwc05pTm90aWZ5RmxhZ3M7Ci0vKiogTkkgcmVxdWlyZXMgbm90aWZpY2F0aW9uICovCi0jZGVmaW5lIEdQU19OSV9ORUVEX05PVElGWSAgICAgICAgICAweDAwMDEKLS8qKiBOSSByZXF1aXJlcyB2ZXJpZmljYXRpb24gKi8KLSNkZWZpbmUgR1BTX05JX05FRURfVkVSSUZZICAgICAgICAgIDB4MDAwMgotLyoqIE5JIHJlcXVpcmVzIHByaXZhY3kgb3ZlcnJpZGUsIG5vIG5vdGlmaWNhdGlvbi9taW5pbWFsIHRyYWNlICovCi0jZGVmaW5lIEdQU19OSV9QUklWQUNZX09WRVJSSURFICAgICAweDAwMDQKIAogLyoqCiAgKiBHUFMgTkkgcmVzcG9uc2VzLCB1c2VkIHRvIGRlZmluZSB0aGUgcmVzcG9uc2UgaW4KICAqIE5JIHN0cnVjdHVyZXMKICAqLwogdHlwZWRlZiBpbnQgR3BzVXNlclJlc3BvbnNlVHlwZTsKLSNkZWZpbmUgR1BTX05JX1JFU1BPTlNFX0FDQ0VQVCAgICAgICAgIDEKLSNkZWZpbmUgR1BTX05JX1JFU1BPTlNFX0RFTlkgICAgICAgICAgIDIKLSNkZWZpbmUgR1BTX05JX1JFU1BPTlNFX05PUkVTUCAgICAgICAgIDMKIAogLyoqCiAgKiBOSSBkYXRhIGVuY29kaW5nIHNjaGVtZQogICovCiB0eXBlZGVmIGludCBHcHNOaUVuY29kaW5nVHlwZTsKLSNkZWZpbmUgR1BTX0VOQ19OT05FICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR1BTX0VOQ19TVVBMX0dTTV9ERUZBVUxUICAgICAgIDEKLSNkZWZpbmUgR1BTX0VOQ19TVVBMX1VURjggICAgICAgICAgICAgIDIKLSNkZWZpbmUgR1BTX0VOQ19TVVBMX1VDUzIgICAgICAgICAgICAgIDMKLSNkZWZpbmUgR1BTX0VOQ19VTktOT1dOICAgICAgICAgICAgICAgIC0xCiAKIC8qKiBBR1BTIHN0YXR1cyBldmVudCB2YWx1ZXMuICovCiB0eXBlZGVmIHVpbnQxNl90IEFHcHNTdGF0dXNWYWx1ZTsKLS8qKiBHUFMgcmVxdWVzdHMgZGF0YSBjb25uZWN0aW9uIGZvciBBR1BTLiAqLwotI2RlZmluZSBHUFNfUkVRVUVTVF9BR1BTX0RBVEFfQ09OTiAgMQotLyoqIEdQUyByZWxlYXNlcyB0aGUgQUdQUyBkYXRhIGNvbm5lY3Rpb24uICovCi0jZGVmaW5lIEdQU19SRUxFQVNFX0FHUFNfREFUQV9DT05OICAyCi0vKiogQUdQUyBkYXRhIGNvbm5lY3Rpb24gaW5pdGlhdGVkICovCi0jZGVmaW5lIEdQU19BR1BTX0RBVEFfQ09OTkVDVEVEICAgICAzCi0vKiogQUdQUyBkYXRhIGNvbm5lY3Rpb24gY29tcGxldGVkICovCi0jZGVmaW5lIEdQU19BR1BTX0RBVEFfQ09OTl9ET05FICAgICA0Ci0vKiogQUdQUyBkYXRhIGNvbm5lY3Rpb24gZmFpbGVkICovCi0jZGVmaW5lIEdQU19BR1BTX0RBVEFfQ09OTl9GQUlMRUQgICA1CiAKIHR5cGVkZWYgdWludDE2X3QgQUdwc1JlZkxvY2F0aW9uVHlwZTsKLSNkZWZpbmUgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9HU01fQ0VMTElEICAgMQotI2RlZmluZSBBR1BTX1JFRl9MT0NBVElPTl9UWVBFX1VNVFNfQ0VMTElEICAyCi0jZGVmaW5lIEFHUFNfUkVGX0xPQ0FUSU9OX1RZUEVfTUFDICAgICAgICAgIDMKLSNkZWZpbmUgQUdQU19SRUZfTE9DQVRJT05fVFlQRV9MVEVfQ0VMTElEICAgNAogCiAvKiBEZXByZWNhdGVkLCB0byBiZSByZW1vdmVkIGluIHRoZSBuZXh0IEFuZHJvaWQgcmVsZWFzZS4gKi8KICNkZWZpbmUgQUdQU19SRUdfTE9DQVRJT05fVFlQRV9NQUMgICAgICAgICAgMwogCi0vKiogTmV0d29yayB0eXBlcyBmb3IgdXBkYXRlX25ldHdvcmtfc3RhdGUgInR5cGUiIHBhcmFtZXRlciAqLwotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFICAgICAgICAwCi0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFlQRV9XSUZJICAgICAgICAgIDEKLSNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UWVBFX01PQklMRV9NTVMgICAgMgotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RZUEVfTU9CSUxFX1NVUEwgICAzCi0jZGVmaW5lIEFHUFNfUklMX05FVFdPUktfVFRZUEVfTU9CSUxFX0RVTiAgIDQKLSNkZWZpbmUgQUdQU19SSUxfTkVUV09SS19UVFlQRV9NT0JJTEVfSElQUkkgNQotI2RlZmluZSBBR1BTX1JJTF9ORVRXT1JLX1RUWVBFX1dJTUFYICAgICAgICA2Ci0KIC8qIFRoZSBmb2xsb3dpbmcgdHlwZWRlZiB0b2dldGhlciB3aXRoIGl0cyBjb25zdGFudHMgYmVsb3cgYXJlIGRlcHJlY2F0ZWQsIGFuZAogICogd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHJlbGVhc2UuICovCiB0eXBlZGVmIHVpbnQxNl90IEdwc0Nsb2NrRmxhZ3M7CkBAIC0yNTEsMjAgKzE1Miw2IEBACiAgKiBGbGFncyB0byBpbmRpY2F0ZSB3aGF0IGZpZWxkcyBpbiBHbnNzQ2xvY2sgYXJlIHZhbGlkLgogICovCiB0eXBlZGVmIHVpbnQxNl90IEduc3NDbG9ja0ZsYWdzOwotLyoqIEEgdmFsaWQgJ2xlYXAgc2Vjb25kJyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19MRUFQX1NFQ09ORCAgICAgICAgICAgICAgICgxPDwwKQotLyoqIEEgdmFsaWQgJ3RpbWUgdW5jZXJ0YWludHknIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfQ0xPQ0tfSEFTX1RJTUVfVU5DRVJUQUlOVFkgICAgICAgICAgKDE8PDEpCi0vKiogQSB2YWxpZCAnZnVsbCBiaWFzJyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX0NMT0NLX0hBU19GVUxMX0JJQVMgICAgICAgICAgICAgICAgICgxPDwyKQotLyoqIEEgdmFsaWQgJ2JpYXMnIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfQ0xPQ0tfSEFTX0JJQVMgICAgICAgICAgICAgICAgICAgICAgKDE8PDMpCi0vKiogQSB2YWxpZCAnYmlhcyB1bmNlcnRhaW50eScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfQklBU19VTkNFUlRBSU5UWSAgICAgICAgICAoMTw8NCkKLS8qKiBBIHZhbGlkICdkcmlmdCcgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfRFJJRlQgICAgICAgICAgICAgICAgICAgICAoMTw8NSkKLS8qKiBBIHZhbGlkICdkcmlmdCB1bmNlcnRhaW50eScgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19DTE9DS19IQVNfRFJJRlRfVU5DRVJUQUlOVFkgICAgICAgICAoMTw8NikKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTMwMCwxNiArMTg3LDYgQEAKICAqIEZsYWdzIHRvIGluZGljYXRlIHdoYXQgZmllbGRzIGluIEduc3NNZWFzdXJlbWVudCBhcmUgdmFsaWQuCiAgKi8KIHR5cGVkZWYgdWludDMyX3QgR25zc01lYXN1cmVtZW50RmxhZ3M7Ci0vKiogQSB2YWxpZCAnc25yJyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX0hBU19TTlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE8PDApCi0vKiogQSB2YWxpZCAnY2FycmllciBmcmVxdWVuY3knIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfRlJFUVVFTkNZICAgICAgICAgICAgICAgICAoMTw8OSkKLS8qKiBBIHZhbGlkICdjYXJyaWVyIGN5Y2xlcycgaXMgc3RvcmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9IQVNfQ0FSUklFUl9DWUNMRVMgICAgICAgICAgICAgICAgICAgICgxPDwxMCkKLS8qKiBBIHZhbGlkICdjYXJyaWVyIHBoYXNlJyBpcyBzdG9yZWQgaW4gdGhlIGRhdGEgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX0hBU19DQVJSSUVSX1BIQVNFICAgICAgICAgICAgICAgICAgICAgKDE8PDExKQotLyoqIEEgdmFsaWQgJ2NhcnJpZXIgcGhhc2UgdW5jZXJ0YWludHknIGlzIHN0b3JlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfSEFTX0NBUlJJRVJfUEhBU0VfVU5DRVJUQUlOVFkgICAgICAgICAoMTw8MTIpCiAKIC8qIFRoZSBmb2xsb3dpbmcgdHlwZWRlZiB0b2dldGhlciB3aXRoIGl0cyBjb25zdGFudHMgYmVsb3cgYXJlIGRlcHJlY2F0ZWQsIGFuZAogICogd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHJlbGVhc2UuICovCkBAIC0zMzEsMTIgKzIwOCw2IEBACiAgKiBpbmRpY2F0b3IuCiAgKi8KIHR5cGVkZWYgdWludDhfdCBHbnNzTXVsdGlwYXRoSW5kaWNhdG9yOwotLyoqIFRoZSBpbmRpY2F0b3IgaXMgbm90IGF2YWlsYWJsZSBvciB1bmtub3duLiAqLwotI2RlZmluZSBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfVU5LTk9XTiAgICAgICAgICAgICAgICAgMAotLyoqIFRoZSBtZWFzdXJlbWVudCBpcyBpbmRpY2F0ZWQgdG8gYmUgYWZmZWN0ZWQgYnkgbXVsdGlwYXRoLiAqLwotI2RlZmluZSBHTlNTX01VTFRJUEFUSF9JTkRJQ0FUT1JfUFJFU0VOVCAgICAgICAgICAgICAgICAgMQotLyoqIFRoZSBtZWFzdXJlbWVudCBpcyBpbmRpY2F0ZWQgdG8gYmUgbm90IGFmZmVjdGVkIGJ5IG11bHRpcGF0aC4gKi8KLSNkZWZpbmUgR05TU19NVUxUSVBBVEhfSU5ESUNBVE9SX05PVF9QUkVTRU5UICAgICAgICAgICAgIDIKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTM2MywyMSArMjM0LDYgQEAKICAqIHNldCB0byBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1VOS05PV04oMCkuCiAgKi8KIHR5cGVkZWYgdWludDMyX3QgR25zc01lYXN1cmVtZW50U3RhdGU7Ci0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQ09ERV9MT0NLICAgICAgICAgICAgICgxPDwwKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0JJVF9TWU5DICAgICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9TVUJGUkFNRV9TWU5DICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfVE9XX0RFQ09ERUQgICAgICAgICAgICgxPDwzKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX01TRUNfQU1CSUdVT1VTICAgICAgICAoMTw8NCkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9TWU1CT0xfU1lOQyAgICAgICAgICAgKDE8PDUpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0xPX1NUUklOR19TWU5DICAgICAgICgxPDw2KQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dMT19UT0RfREVDT0RFRCAgICAgICAoMTw8NykKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9CRFNfRDJfQklUX1NZTkMgICAgICAgKDE8PDgpCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfQkRTX0QyX1NVQkZSQU1FX1NZTkMgICgxPDw5KQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX0dBTF9FMUJDX0NPREVfTE9DSyAgICAoMTw8MTApCi0jZGVmaW5lIEdOU1NfTUVBU1VSRU1FTlRfU1RBVEVfR0FMX0UxQ18yTkRfQ09ERV9MT0NLICgxPDwxMSkKLSNkZWZpbmUgR05TU19NRUFTVVJFTUVOVF9TVEFURV9HQUxfRTFCX1BBR0VfU1lOQyAgICAgKDE8PDEyKQotI2RlZmluZSBHTlNTX01FQVNVUkVNRU5UX1NUQVRFX1NCQVNfU1lOQyAgICAgICAgICAgICAoMTw8MTMpCiAKIC8qIFRoZSBmb2xsb3dpbmcgdHlwZWRlZiB0b2dldGhlciB3aXRoIGl0cyBjb25zdGFudHMgYmVsb3cgYXJlIGRlcHJlY2F0ZWQsIGFuZAogICogd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IHJlbGVhc2UuICovCkBAIC0zOTEsMTAgKzI0Nyw2IEBACiAgKiBGbGFncyBpbmRpY2F0aW5nIHRoZSBBY2N1bXVsYXRlZCBEZWx0YSBSYW5nZSdzIHN0YXRlcy4KICAqLwogdHlwZWRlZiB1aW50MTZfdCBHbnNzQWNjdW11bGF0ZWREZWx0YVJhbmdlU3RhdGU7Ci0jZGVmaW5lIEdOU1NfQURSX1NUQVRFX1VOS05PV04gICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR05TU19BRFJfU1RBVEVfVkFMSUQgICAgICAgICAgICAgICAgICAgICAoMTw8MCkKLSNkZWZpbmUgR05TU19BRFJfU1RBVEVfUkVTRVQgICAgICAgICAgICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgR05TU19BRFJfU1RBVEVfQ1lDTEVfU0xJUCAgICAgICAgICAgICAgICAoMTw8MikKIAogLyogVGhlIGZvbGxvd2luZyB0eXBlZGVmIHRvZ2V0aGVyIHdpdGggaXRzIGNvbnN0YW50cyBiZWxvdyBhcmUgZGVwcmVjYXRlZCwgYW5kCiAgKiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KQEAgLTQxNCwyNiArMjY2LDYgQEAKICAqLwogdHlwZWRlZiBpbnQxNl90IEduc3NOYXZpZ2F0aW9uTWVzc2FnZVR5cGU7CiAKLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9VTktOT1dOICAgICAgIDAKLS8qKiBHUFMgTDEgQy9BIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dQU19MMUNBICAgICAgMHgwMTAxCi0vKiogR1BTIEwyLUNOQVYgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9HUFNfTDJDTkFWICAgIDB4MDEwMgotLyoqIEdQUyBMNS1DTkFWIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0w1Q05BViAgICAweDAxMDMKLS8qKiBHUFMgQ05BVi0yIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR1BTX0NOQVYyICAgICAweDAxMDQKLS8qKiBHbG9uYXNzIEwxIENBIG1lc3NhZ2UgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUuICovCi0jZGVmaW5lIEdOU1NfTkFWSUdBVElPTl9NRVNTQUdFX1RZUEVfR0xPX0wxQ0EgICAgICAweDAzMDEKLS8qKiBCZWlkb3UgRDEgbWVzc2FnZSBjb250YWluZWQgaW4gdGhlIHN0cnVjdHVyZS4gKi8KLSNkZWZpbmUgR05TU19OQVZJR0FUSU9OX01FU1NBR0VfVFlQRV9CRFNfRDEgICAgICAgIDB4MDUwMQotLyoqIEJlaWRvdSBEMiBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0JEU19EMiAgICAgICAgMHgwNTAyCi0vKiogR2FsaWxlbyBJL05BViBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dBTF9JICAgICAgICAgMHgwNjAxCi0vKiogR2FsaWxlbyBGL05BViBtZXNzYWdlIGNvbnRhaW5lZCBpbiB0aGUgc3RydWN0dXJlLiAqLwotI2RlZmluZSBHTlNTX05BVklHQVRJT05fTUVTU0FHRV9UWVBFX0dBTF9GICAgICAgICAgMHgwNjAyCi0KIC8qKgogICogU3RhdHVzIG9mIE5hdmlnYXRpb24gTWVzc2FnZQogICogV2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgcHJvcGVybHkgd2l0aG91dCBhbnkgcGFyaXR5IGVycm9yIGluIGl0cyBuYXZpZ2F0aW9uIHdvcmRzLCB0aGUKQEAgLTQ0NCw5ICsyNzYsNiBAQAogICogY29ycmVjdGVkLgogICovCiB0eXBlZGVmIHVpbnQxNl90IE5hdmlnYXRpb25NZXNzYWdlU3RhdHVzOwotI2RlZmluZSBOQVZfTUVTU0FHRV9TVEFUVVNfVU5LTk9XTiAgICAgICAgICAgICAgMAotI2RlZmluZSBOQVZfTUVTU0FHRV9TVEFUVVNfUEFSSVRZX1BBU1NFRCAgICgxPDwwKQotI2RlZmluZSBOQVZfTUVTU0FHRV9TVEFUVVNfUEFSSVRZX1JFQlVJTFQgICgxPDwxKQogCiAvKiBUaGlzIGNvbnN0YW50IGlzIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgcmVsZWFzZS4gKi8KICNkZWZpbmUgTkFWX01FU1NBR0VfU1RBVFVTX1VOS09OVyAgICAgICAgICAgICAgMApAQCAtNDU1LDIyICsyODQsMTEgQEAKICAqIEZsYWdzIHRoYXQgaW5kaWNhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNhdGVsbGl0ZQogICovCiB0eXBlZGVmIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbnNzU3ZGbGFnczsKLSNkZWZpbmUgR05TU19TVl9GTEFHU19OT05FICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgR05TU19TVl9GTEFHU19IQVNfRVBIRU1FUklTX0RBVEEgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEdOU1NfU1ZfRkxBR1NfSEFTX0FMTUFOQUNfREFUQSAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBHTlNTX1NWX0ZMQUdTX1VTRURfSU5fRklYICAgICAgICAgICAgICAgKDEgPDwgMikKIAogLyoqCiAgKiBDb25zdGVsbGF0aW9uIHR5cGUgb2YgR25zc1N2SW5mbwogICovCiB0eXBlZGVmIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgR25zc0NvbnN0ZWxsYXRpb25UeXBlOwotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fVU5LTk9XTiAgICAgIDAKLSNkZWZpbmUgR05TU19DT05TVEVMTEFUSU9OX0dQUyAgICAgICAgICAxCi0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9TQkFTICAgICAgICAgMgotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fR0xPTkFTUyAgICAgIDMKLSNkZWZpbmUgR05TU19DT05TVEVMTEFUSU9OX1FaU1MgICAgICAgICA0Ci0jZGVmaW5lIEdOU1NfQ09OU1RFTExBVElPTl9CRUlET1UgICAgICAgNQotI2RlZmluZSBHTlNTX0NPTlNURUxMQVRJT05fR0FMSUxFTyAgICAgIDYKIAogLyoqCiAgKiBOYW1lIGZvciB0aGUgR1BTIFhUUkEgaW50ZXJmYWNlLgpAQCAtNTIyLDcgKzM0MCw2IEBACiAgKi8KICNkZWZpbmUgR05TU19DT05GSUdVUkFUSU9OX0lOVEVSRkFDRSAgICAgImduc3NfY29uZmlndXJhdGlvbiIKIAotCiAvKiogUmVwcmVzZW50cyBhIGxvY2F0aW9uLiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qKiBzZXQgdG8gc2l6ZW9mKEdwc0xvY2F0aW9uKSAqLwpAQCAtMTEyNiw5ICs5NDMsNiBAQAogICAgIGNvbnN0IEdwc0ludGVyZmFjZSogKCpnZXRfZ3BzX2ludGVyZmFjZSkoc3RydWN0IGdwc19kZXZpY2VfdCogZGV2KTsKIH07CiAKLSNkZWZpbmUgQUdQU19SSUxfUkVRVUVTVF9TRVRJRF9JTVNJICAgICAoMTw8MEwpCi0jZGVmaW5lIEFHUFNfUklMX1JFUVVFU1RfU0VUSURfTVNJU0ROICAgKDE8PDFMKQotCiAjZGVmaW5lIEFHUFNfUklMX1JFUVVFU1RfUkVGTE9DX0NFTExJRCAgKDE8PDBMKQogI2RlZmluZSBBR1BTX1JJTF9SRVFVRVNUX1JFRkxPQ19NQUMgICAgICgxPDwxTCkKIApAQCAtMTI1MSwxOSArMTA2NSw2IEBACiAgKiBzdWJzeXN0ZW0ga25vd3MgYWJvdXQgdGhlIEdlb2ZlbmNlLgogICoKICAqLwotI2RlZmluZSBHUFNfR0VPRkVOQ0VfRU5URVJFRCAgICAgKDE8PDBMKQotI2RlZmluZSBHUFNfR0VPRkVOQ0VfRVhJVEVEICAgICAgKDE8PDFMKQotI2RlZmluZSBHUFNfR0VPRkVOQ0VfVU5DRVJUQUlOICAgKDE8PDJMKQotCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9VTkFWQUlMQUJMRSAoMTw8MEwpCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9BVkFJTEFCTEUgICAoMTw8MUwpCi0KLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX09QRVJBVElPTl9TVUNDRVNTICAgICAgICAgICAwCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FUlJPUl9UT09fTUFOWV9HRU9GRU5DRVMgLTEwMAotI2RlZmluZSBHUFNfR0VPRkVOQ0VfRVJST1JfSURfRVhJU1RTICAgICAgICAgIC0xMDEKLSNkZWZpbmUgR1BTX0dFT0ZFTkNFX0VSUk9SX0lEX1VOS05PV04gICAgICAgICAtMTAyCi0jZGVmaW5lIEdQU19HRU9GRU5DRV9FUlJPUl9JTlZBTElEX1RSQU5TSVRJT04gLTEwMwotI2RlZmluZSBHUFNfR0VPRkVOQ0VfRVJST1JfR0VORVJJQyAgICAgICAgICAgIC0xNDkKIAogLyoqCiAgKiBUaGUgY2FsbGJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBnZW9mZW5jZS4KQEAgLTE5NzIsMTAgKzE3NzMsNiBAQAogICAgIGduc3NfbWVhc3VyZW1lbnRfY2FsbGJhY2sgZ25zc19tZWFzdXJlbWVudF9jYWxsYmFjazsKIH0gR3BzTWVhc3VyZW1lbnRDYWxsYmFja3M7CiAKLSNkZWZpbmUgR1BTX01FQVNVUkVNRU5UX09QRVJBVElPTl9TVUNDRVNTICAgICAgICAgIDAKLSNkZWZpbmUgR1BTX01FQVNVUkVNRU5UX0VSUk9SX0FMUkVBRFlfSU5JVCAgICAgIC0xMDAKLSNkZWZpbmUgR1BTX01FQVNVUkVNRU5UX0VSUk9SX0dFTkVSSUMgICAgICAgICAgIC0xMDEKLQogLyoqCiAgKiBFeHRlbmRlZCBpbnRlcmZhY2UgZm9yIEdQUyBNZWFzdXJlbWVudHMgc3VwcG9ydC4KICAqLwpAQCAtMjE0NywxMCArMTk0NCw2IEBACiAgICAgZ25zc19uYXZpZ2F0aW9uX21lc3NhZ2VfY2FsbGJhY2sgZ25zc19uYXZpZ2F0aW9uX21lc3NhZ2VfY2FsbGJhY2s7CiB9IEdwc05hdmlnYXRpb25NZXNzYWdlQ2FsbGJhY2tzOwogCi0jZGVmaW5lIEdQU19OQVZJR0FUSU9OX01FU1NBR0VfT1BFUkFUSU9OX1NVQ0NFU1MgICAgICAgICAgICAgMAotI2RlZmluZSBHUFNfTkFWSUdBVElPTl9NRVNTQUdFX0VSUk9SX0FMUkVBRFlfSU5JVCAgICAgICAgIC0xMDAKLSNkZWZpbmUgR1BTX05BVklHQVRJT05fTUVTU0FHRV9FUlJPUl9HRU5FUklDICAgICAgICAgICAgICAtMTAxCi0KIC8qKgogICogRXh0ZW5kZWQgaW50ZXJmYWNlIGZvciBHUFMgbmF2aWdhdGlvbiBtZXNzYWdlIHJlcG9ydGluZyBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL2dyYWxsb2MxLmggYi9pbmNsdWRlL2hhcmR3YXJlL2dyYWxsb2MxLmgKaW5kZXggYTFhMmQ2OS4uNDg0NTAxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9ncmFsbG9jMS5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvZ3JhbGxvYzEuaApAQCAtMzYsNyArMzYsMTkgQEAKICAgICAgKiBhbGxvY2F0ZSBtYXkgYmUgTlVMTCwgd2hpY2ggaW5zdHJ1Y3RzIHRoZSBkZXZpY2UgdG8gcmVwb3J0IHdoZXRoZXIgdGhlCiAgICAgICogZ2l2ZW4gYWxsb2NhdGlvbiBpcyBwb3NzaWJsZSBvciBub3QuICovCiAgICAgR1JBTExPQzFfQ0FQQUJJTElUWV9URVNUX0FMTE9DQVRFID0gMSwKLSAgICBHUkFMTE9DMV9MQVNUX0NBUEFCSUxJVFkgPSAxLAorCisgICAgLyogSWYgdGhpcyBjYXBhYmlsaXR5IGlzIHN1cHBvcnRlZCwgdGhlbiB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMKKyAgICAgKiBhbGxvY2F0aW5nIGJ1ZmZlcnMgd2l0aCBtb3JlIHRoYW4gb25lIGltYWdlIGxheWVyLiAqLworICAgIEdSQUxMT0MxX0NBUEFCSUxJVFlfTEFZRVJFRF9CVUZGRVJTID0gMiwKKworICAgIC8qIElmIHRoaXMgY2FwYWJpbGl0eSBpcyBzdXBwb3J0ZWQsIHRoZW4gdGhlIGltcGxlbWVudGF0aW9uIGFsd2F5cyBjbG9zZXMKKyAgICAgKiBhbmQgZGVsZXRlcyBhIGJ1ZmZlciBoYW5kbGUgd2hlbmV2ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIHJlbW92ZWQuCisgICAgICoKKyAgICAgKiBTdXBwb3J0aW5nIHRoaXMgY2FwYWJpbGl0eSBpcyBzdHJvbmdseSByZWNvbW1lbmRlZC4gIEl0IHdpbGwgYmVjb21lCisgICAgICogbWFuZGF0b3J5IGluIGZ1dHVyZSByZWxlYXNlcy4gKi8KKyAgICBHUkFMTE9DMV9DQVBBQklMSVRZX1JFTEVBU0VfSU1QTFlfREVMRVRFID0gMywKKworICAgIEdSQUxMT0MxX0xBU1RfQ0FQQUJJTElUWSA9IDMsCiB9IGdyYWxsb2MxX2NhcGFiaWxpdHlfdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTcxLDcgKzgzLDcgQEAKICAgICBHUkFMTE9DMV9DT05TVU1FUl9VU0FHRV9GT1JFSUdOX0JVRkZFUlMgPSAxVUxMIDw8IDIxLAogCiAgICAgLyogMVVMTCA8PCAyMiAqLwotICAgIC8qIDFVTEwgPDwgMjMgKi8KKyAgICBHUkFMTE9DMV9DT05TVU1FUl9VU0FHRV9HUFVfREFUQV9CVUZGRVIgPSAxVUxMIDw8IDIzLAogICAgIC8qIDFVTEwgPDwgMjQgKi8KICAgICAvKiAxVUxMIDw8IDI1ICovCiAgICAgLyogMVVMTCA8PCAyNiAqLwpAQCAtMTQxLDcgKzE1Myw5IEBACiAgICAgR1JBTExPQzFfRlVOQ1RJT05fTE9DSyA9IDE4LAogICAgIEdSQUxMT0MxX0ZVTkNUSU9OX0xPQ0tfRkxFWCA9IDE5LAogICAgIEdSQUxMT0MxX0ZVTkNUSU9OX1VOTE9DSyA9IDIwLAotICAgIEdSQUxMT0MxX0xBU1RfRlVOQ1RJT04gPSAyMCwKKyAgICBHUkFMTE9DMV9GVU5DVElPTl9TRVRfTEFZRVJfQ09VTlQgPSAyMSwKKyAgICBHUkFMTE9DMV9GVU5DVElPTl9HRVRfTEFZRVJfQ09VTlQgPSAyMiwKKyAgICBHUkFMTE9DMV9MQVNUX0ZVTkNUSU9OID0gMjIsCiB9IGdyYWxsb2MxX2Z1bmN0aW9uX2Rlc2NyaXB0b3JfdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTE4OCw3ICsyMDIsNyBAQAogICAgIC8qIDFVTEwgPDwgMjAgKi8KICAgICAvKiAxVUxMIDw8IDIxICovCiAgICAgR1JBTExPQzFfUFJPRFVDRVJfVVNBR0VfVklERU9fREVDT0RFUiA9IDFVTEwgPDwgMjIsCi0gICAgLyogMVVMTCA8PCAyMyAqLworICAgIEdSQUxMT0MxX1BST0RVQ0VSX1VTQUdFX1NFTlNPUl9ESVJFQ1RfREFUQSA9IDFVTEwgPDwgMjMsCiAgICAgLyogMVVMTCA8PCAyNCAqLwogICAgIC8qIDFVTEwgPDwgMjUgKi8KICAgICAvKiAxVUxMIDw8IDI2ICovCkBAIC00NDAsNiArNDU0LDMwIEBACiAgICAgICAgIGdyYWxsb2MxX2RldmljZV90KiBkZXZpY2UsIGdyYWxsb2MxX2J1ZmZlcl9kZXNjcmlwdG9yX3QgZGVzY3JpcHRvciwKICAgICAgICAgaW50MzJfdCAvKmFuZHJvaWRfcGl4ZWxfZm9ybWF0X3QqLyBmb3JtYXQpOwogCisvKiBzZXRMYXllckNvdW50KC4uLiwgbGF5ZXJDb3VudCkKKyAqIEZ1bmN0aW9uIGRlc2NyaXB0b3I6IEdSQUxMT0MxX0ZVTkNUSU9OX1NFVF9MQVlFUl9DT1VOVAorICogTXVzdCBiZSBwcm92aWRlZCBieSBhbGwgZ3JhbGxvYzEgZGV2aWNlcyB0aGF0IHByb3ZpZGUgdGhlCisgKiBHUkFMTE9DMV9DQVBBQklMSVRZX0xBWUVSRURfQlVGRkVSUyBjYXBhYmlsaXR5LgorICoKKyAqIFNldHMgdGhlIG51bWJlciBvZiBsYXllcnMgaW4gdGhlIGJ1ZmZlci4KKyAqCisgKiBBIGJ1ZmZlciB3aXRoIG11bHRpcGxlIGxheWVycyBtYXkgYmUgdXNlZCBhcyB0aGUgYmFja2luZyBzdG9yZSBvZiBhbiBhcnJheQorICogdGV4dHVyZS4gQWxsIGxheWVycyBvZiBhIGJ1ZmZlciBzaGFyZSB0aGUgc2FtZSBjaGFyYWN0ZXJpc3RpY3MgKGUuZy4sCisgKiBkaW1lbnNpb25zLCBmb3JtYXQsIHVzYWdlKS4gRGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0CisgKiBHUkFMTE9DMV9DQVBBQklMSVRZX0xBWUVSRURfQlVGRkVSUyBtdXN0IGFsbG9jYXRlIG9ubHkgYnVmZmVycyB3aXRoIGEgc2luZ2xlCisgKiBsYXllci4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBsYXllckNvdW50IC0gdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGxheWVycywgbXVzdCBiZSBub24temVybworICoKKyAqIFJldHVybnMgR1JBTExPQzFfRVJST1JfTk9ORSBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvcnM6CisgKiAgIEdSQUxMT0MxX0VSUk9SX0JBRF9ERVNDUklQVE9SIC0gdGhlIGJ1ZmZlciBkZXNjcmlwdG9yIGlzIGludmFsaWQKKyAqICAgR1JBTExPQzFfRVJST1JfQkFEX1ZBTFVFIC0gdGhlIGxheWVyIGNvdW50IGlzIGludmFsaWQKKyAqLwordHlwZWRlZiBpbnQzMl90IC8qZ3JhbGxvYzFfZXJyb3JfdCovICgqR1JBTExPQzFfUEZOX1NFVF9MQVlFUl9DT1VOVCkoCisgICAgICAgIGdyYWxsb2MxX2RldmljZV90KiBkZXZpY2UsIGdyYWxsb2MxX2J1ZmZlcl9kZXNjcmlwdG9yX3QgZGVzY3JpcHRvciwKKyAgICAgICAgdWludDMyX3QgbGF5ZXJDb3VudCk7CisKIC8qIHNldFByb2R1Y2VyVXNhZ2UoLi4uLCB1c2FnZSkKICAqIEZ1bmN0aW9uIGRlc2NyaXB0b3I6IEdSQUxMT0MxX0ZVTkNUSU9OX1NFVF9QUk9EVUNFUl9VU0FHRQogICogTXVzdCBiZSBwcm92aWRlZCBieSBhbGwgZ3JhbGxvYzEgZGV2aWNlcwpAQCAtNTY0LDYgKzYwMiwyOCBAQAogICAgICAgICBncmFsbG9jMV9kZXZpY2VfdCogZGV2aWNlLCBidWZmZXJfaGFuZGxlX3QgZGVzY3JpcHRvciwKICAgICAgICAgaW50MzJfdCogb3V0Rm9ybWF0KTsKIAorLyogZ2V0TGF5ZXJDb3VudCguLi4sIG91dExheWVyQ291bnQpCisgKiBGdW5jdGlvbiBkZXNjcmlwdG9yOiBHUkFMTE9DMV9GVU5DVElPTl9HRVRfTEFZRVJfQ09VTlQKKyAqIE11c3QgYmUgcHJvdmlkZWQgYnkgYWxsIGdyYWxsb2MxIGRldmljZXMgdGhhdCBwcm92aWRlIHRoZQorICogR1JBTExPQzFfQ0FQQUJJTElUWV9MQVlFUkVEX0JVRkZFUlMgY2FwYWJpbGl0eS4KKyAqCisgKiBHZXRzIHRoZSBudW1iZXIgb2YgbGF5ZXJzIG9mIHRoZSBidWZmZXIuCisgKgorICogU2VlIHNldExheWVyQ291bnQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB2YWx1ZS4KKyAqCisgKiBQYXJhbWV0ZXJzOgorICogICBvdXRMYXllckNvdW50IC0gdGhlIG51bWJlciBvZiBsYXllcnMgaW4gdGhlIGltYWdlLCBtdXN0IGJlIG5vbi1OVUxMCisgKgorICogUmV0dXJucyBHUkFMTE9DMV9FUlJPUl9OT05FIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yczoKKyAqICAgR1JBTExPQzFfRVJST1JfQkFEX0hBTkRMRSAtIHRoZSBidWZmZXIgaGFuZGxlIGlzIGludmFsaWQKKyAqICAgR1JBTExPQzFfRVJST1JfVU5TVVBQT1JURUQgLSB0aGUgZGV2aWNlIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUKKyAqICAgICAgIGxheWVyIGNvdW50IGZyb20gdGhlIGJ1ZmZlcjsgc2VlIG5vdGUgWzFdIGluIHRoaXMgc2VjdGlvbidzIGhlYWRlciBmb3IKKyAqICAgICAgIG1vcmUgaW5mb3JtYXRpb24KKyAqLwordHlwZWRlZiBpbnQzMl90IC8qZ3JhbGxvYzFfZXJyb3JfdCovICgqR1JBTExPQzFfUEZOX0dFVF9MQVlFUl9DT1VOVCkoCisgICAgICAgIGdyYWxsb2MxX2RldmljZV90KiBkZXZpY2UsIGJ1ZmZlcl9oYW5kbGVfdCBidWZmZXIsCisgICAgICAgIHVpbnQzMl90KiBvdXRMYXllckNvdW50KTsKKwogLyogZ2V0UHJvZHVjZXJVc2FnZSguLi4sIG91dFVzYWdlKQogICogRnVuY3Rpb24gZGVzY3JpcHRvcjogR1JBTExPQzFfRlVOQ1RJT05fR0VUX1BST0RVQ0VSX1VTQUdFCiAgKiBNdXN0IGJlIHByb3ZpZGVkIGJ5IGFsbCBncmFsbG9jMSBkZXZpY2VzCkBAIC02OTYsNiArNzU2LDEyIEBACiAgKiByZWZlcnJpbmcgdG8gYSBwYXJ0aWN1bGFyIGJhY2tpbmcgc3RvcmUgaXMgZnJlZWQsIHRoYXQgYmFja2luZyBzdG9yZSBzaG91bGQKICAqIGFsc28gYmUgZnJlZWQuCiAgKgorICogV2hlbiBHUkFMTE9DMV9DQVBBQklMSVRZX1JFTEVBU0VfSU1QTFlfREVMRVRFIGlzIHN1cHBvcnRlZCwKKyAqIG5hdGl2ZV9oYW5kbGVfY2xvc2UgYW5kIG5hdGl2ZV9oYW5kbGVfZGVsZXRlIG11c3QgYWx3YXlzIGJlIGNhbGxlZCBieSB0aGUKKyAqIGltcGxlbWVudGF0aW9uIHdoZW5ldmVyIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyByZW1vdmVkLiAgT3RoZXJ3aXNlLCBhIGNhbGwKKyAqIHRvIHJlbGVhc2UoKSB3aWxsIGJlIGZvbGxvd2VkIGJ5IG5hdGl2ZV9oYW5kbGVfY2xvc2UgYW5kIG5hdGl2ZV9oYW5kbGVfZGVsZXRlCisgKiBieSB0aGUgY2FsbGVyIHdoZW4gdGhlIGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkIGxvY2FsbHkgdGhyb3VnaCBhbGxvY2F0ZSgpLgorICoKICAqIFBhcmFtZXRlcnM6CiAgKiAgIGJ1ZmZlciAtIHRoZSBidWZmZXIgZnJvbSB3aGljaCBhIHJlZmVyZW5jZSBzaG91bGQgYmUgcmVtb3ZlZAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3Nlci5oIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyLmgKaW5kZXggN2VjYTdjMS4uOWViMWFhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyLmgKQEAgLTQ4MSw2ICs0ODEsNyBAQAogICAgIHN0cnVjdCBod19tb2R1bGVfdCBjb21tb247CiB9IGh3Y19tb2R1bGVfdDsKIAorI2RlZmluZSBIV0NfRVJST1IgKC0xKQogdHlwZWRlZiBzdHJ1Y3QgaHdjX2NvbXBvc2VyX2RldmljZV8xIHsKICAgICAvKioKICAgICAgKiBDb21tb24gbWV0aG9kcyBvZiB0aGUgaGFyZHdhcmUgY29tcG9zZXIgZGV2aWNlLiAgVGhpcyAqbXVzdCogYmUgdGhlIGZpcnN0IG1lbWJlciBvZgpAQCAtNzE0LDkgKzcxNSw5IEBACiAgICAgICogKCpnZXRBY3RpdmVDb25maWcpKCkgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcwogICAgICAqIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIGNvbm5lY3RlZCBkaXNwbGF5LiBUaGUgaW5kZXggaXMgcmVsYXRpdmUgdG8KICAgICAgKiB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9uIGhhbmRsZXMgcmV0dXJuZWQgYnkgZ2V0RGlzcGxheUNvbmZpZ3MuIElmIHRoZXJlCi0gICAgICogaXMgbm8gYWN0aXZlIGNvbmZpZ3VyYXRpb24sIC0xIHNoYWxsIGJlIHJldHVybmVkLgorICAgICAqIGlzIG5vIGFjdGl2ZSBjb25maWd1cmF0aW9uLCBIV0NfRVJST1Igc2hhbGwgYmUgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZXJyb3IuCisgICAgICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBpbmRleCBvbiBzdWNjZXNzIG9yIEhXQ19FUlJPUiBvbiBlcnJvci4KICAgICAgKgogICAgICAqIFRoaXMgZmllbGQgaXMgUkVRVUlSRUQgZm9yIEhXQ19ERVZJQ0VfQVBJX1ZFUlNJT05fMV80IGFuZCBsYXRlci4KICAgICAgKiBJdCBzaGFsbCBiZSBOVUxMIGZvciBwcmV2aW91cyB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3NlcjIuaCBiL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3NlcjIuaAppbmRleCAzNWVlZGIwLi5kNWEwZDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXIyLmgKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyMi5oCkBAIC05NCw2ICs5NCwxNiBAQAogICAgICAqIHRoZSBjbGllbnQuIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBjbGllbnQgZnJvbSBhcHBseWluZyB0aGUgY29sb3IKICAgICAgKiB0cmFuc2Zvcm0gZHVyaW5nIGl0cyBjb21wb3NpdGlvbiBzdGVwLiAqLwogICAgIEhXQzJfQ0FQQUJJTElUWV9TS0lQX0NMSUVOVF9DT0xPUl9UUkFOU0ZPUk0gPSAyLAorCisgICAgLyogU3BlY2lmaWVzIHRoYXQgdGhlIHByZXNlbnQgZmVuY2UgbXVzdCBub3QgYmUgdXNlZCBhcyBhbiBhY2N1cmF0ZQorICAgICAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3R1YWwgcHJlc2VudCB0aW1lIG9mIGEgZnJhbWUuCisgICAgICogVGhpcyBjYXBhYmlsaXR5IG11c3QgbmV2ZXIgYmUgc2V0IGJ5IEhXQzIgZGV2aWNlcy4KKyAgICAgKiBUaGlzIGNhcGFiaWxpdHkgbWF5IGJlIHNldCBmb3IgSFdDMSBkZXZpY2VzIHRoYXQgdXNlIHRoZQorICAgICAqIEhXQzJPbjFBZGFwdGVyIHdoZXJlIGVtdWxhdGlvbiBvZiB0aGUgcHJlc2VudCBmZW5jZSB1c2luZyB0aGUgcmV0aXJlCisgICAgICogZmVuY2UgaXMgbm90IGZlYXNpYmxlLgorICAgICAqIEluIHRoZSBmdXR1cmUsIENUUyB0ZXN0cyB3aWxsIHJlcXVpcmUgcHJlc2VudCB0aW1lIHRvIGJlIHJlbGlhYmxlLgorICAgICAqLworICAgIEhXQzJfQ0FQQUJJTElUWV9QUkVTRU5UX0ZFTkNFX0lTX05PVF9SRUxJQUJMRSA9IDMsCiB9IGh3YzJfY2FwYWJpbGl0eV90OwogCiAvKiBQb3NzaWJsZSBjb21wb3NpdGlvbiB0eXBlcyBmb3IgYSBnaXZlbiBsYXllciAqLwpAQCAtMzM1LDYgKzM0NSw4IEBACiAgICAgICAgIGNhc2UgSFdDMl9DQVBBQklMSVRZX1NJREVCQU5EX1NUUkVBTTogcmV0dXJuICJTaWRlYmFuZFN0cmVhbSI7CiAgICAgICAgIGNhc2UgSFdDMl9DQVBBQklMSVRZX1NLSVBfQ0xJRU5UX0NPTE9SX1RSQU5TRk9STToKICAgICAgICAgICAgICAgICByZXR1cm4gIlNraXBDbGllbnRDb2xvclRyYW5zZm9ybSI7CisgICAgICAgIGNhc2UgSFdDMl9DQVBBQklMSVRZX1BSRVNFTlRfRkVOQ0VfSVNfTk9UX1JFTElBQkxFOgorICAgICAgICAgICAgICAgIHJldHVybiAiUHJlc2VudEZlbmNlSXNOb3RSZWxpYWJsZSI7CiAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAiVW5rbm93biI7CiAgICAgfQogfQpAQCAtNTUxLDYgKzU2Myw3IEBACiAgICAgSW52YWxpZCA9IEhXQzJfQ0FQQUJJTElUWV9JTlZBTElELAogICAgIFNpZGViYW5kU3RyZWFtID0gSFdDMl9DQVBBQklMSVRZX1NJREVCQU5EX1NUUkVBTSwKICAgICBTa2lwQ2xpZW50Q29sb3JUcmFuc2Zvcm0gPSBIV0MyX0NBUEFCSUxJVFlfU0tJUF9DTElFTlRfQ09MT1JfVFJBTlNGT1JNLAorICAgIFByZXNlbnRGZW5jZUlzTm90UmVsaWFibGUgPSBIV0MyX0NBUEFCSUxJVFlfUFJFU0VOVF9GRU5DRV9JU19OT1RfUkVMSUFCTEUsCiB9OwogVE9fU1RSSU5HKGh3YzJfY2FwYWJpbGl0eV90LCBDYXBhYmlsaXR5LCBnZXRDYXBhYmlsaXR5TmFtZSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyX2RlZnMuaCBiL2luY2x1ZGUvaGFyZHdhcmUvaHdjb21wb3Nlcl9kZWZzLmgKaW5kZXggMThiMzBiYy4uMWU4MWU2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS9od2NvbXBvc2VyX2RlZnMuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2h3Y29tcG9zZXJfZGVmcy5oCkBAIC0xMzYsOSArMTM2LDkgQEAKICAqLwogZW51bSB7CiAgICAgLyoKLSAgICAgKiBIV0NfU0tJUF9MQVlFUiBpcyBzZXQgYnkgU3VyZmFjZUZsbmdlciB0byBpbmRpY2F0ZSB0aGF0IHRoZSBIQUwKKyAgICAgKiBIV0NfU0tJUF9MQVlFUiBpcyBzZXQgYnkgU3VyZmFjZUZsaW5nZXIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgSEFMCiAgICAgICogc2hhbGwgbm90IGNvbnNpZGVyIHRoaXMgbGF5ZXIgZm9yIGNvbXBvc2l0aW9uIGFzIGl0IHdpbGwgYmUgaGFuZGxlZAotICAgICAqIGJ5IFN1cmZhY2VGbGluZ2VyIChqdXN0IGFzIGlmIGNvbXBvc2l0aW9uVHlwZSB3YXMgc2V0IHRvIEhXQ19PVkVSTEFZKS4KKyAgICAgKiBieSBTdXJmYWNlRmxpbmdlciAoanVzdCBhcyBpZiBjb21wb3NpdGlvblR5cGUgd2FzIHNldCB0byBIV0NfRlJBTUVCVUZGRVIpLgogICAgICAqLwogICAgIEhXQ19TS0lQX0xBWUVSID0gMHgwMDAwMDAwMSwKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS9rZXltYXN0ZXJfZGVmcy5oIGIvaW5jbHVkZS9oYXJkd2FyZS9rZXltYXN0ZXJfZGVmcy5oCmluZGV4IDBmOWJjMjcuLjdkMWIzNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUva2V5bWFzdGVyX2RlZnMuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL2tleW1hc3Rlcl9kZWZzLmgKQEAgLTEzNSw2ICsxMzUsMjYgQEAKICAgICBLTV9UQUdfT1NfUEFUQ0hMRVZFTCA9IEtNX1VJTlQgfCA3MDYsICAgICAgICAgIC8qIFBhdGNoIGxldmVsIG9mIHN5c3RlbSAoa2V5bWFzdGVyMikgKi8KICAgICBLTV9UQUdfVU5JUVVFX0lEID0gS01fQllURVMgfCA3MDcsICAgICAgICAgICAgIC8qIFVzZWQgdG8gcHJvdmlkZSB1bmlxdWUgSUQgaW4gYXR0ZXN0YXRpb24gKi8KICAgICBLTV9UQUdfQVRURVNUQVRJT05fQ0hBTExFTkdFID0gS01fQllURVMgfCA3MDgsIC8qIFVzZWQgdG8gcHJvdmlkZSBjaGFsbGVuZ2UgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fQVBQTElDQVRJT05fSUQgPSBLTV9CWVRFUyB8IDcwOSwgLyogVXNlZCB0byBpZGVudGlmeSB0aGUgc2V0IG9mIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFwcGxpY2F0aW9ucyBvZiB3aGljaCBvbmUgaGFzIGluaXRpYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhIGtleSBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9JRF9CUkFORCA9IEtNX0JZVEVTIHwgNzEwLCAgLyogVXNlZCB0byBwcm92aWRlIHRoZSBkZXZpY2UncyBicmFuZCBuYW1lIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlZCBpbiBhdHRlc3RhdGlvbiAqLworICAgIEtNX1RBR19BVFRFU1RBVElPTl9JRF9ERVZJQ0UgPSBLTV9CWVRFUyB8IDcxMSwgLyogVXNlZCB0byBwcm92aWRlIHRoZSBkZXZpY2UncyBkZXZpY2UgbmFtZSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfUFJPRFVDVCA9IEtNX0JZVEVTIHwgNzEyLCAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIHByb2R1Y3QgbmFtZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGluY2x1ZGVkIGluIGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX1NFUklBTCA9IEtNX0JZVEVTIHwgNzEzLCAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIHNlcmlhbCBudW1iZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGluY2x1ZGVkIGluIGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX0lNRUkgPSBLTV9CWVRFUyB8IDcxNCwgICAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIElNRUkgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX01FSUQgPSBLTV9CWVRFUyB8IDcxNSwgICAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzIE1FSUQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGluIGF0dGVzdGF0aW9uICovCisgICAgS01fVEFHX0FUVEVTVEFUSU9OX0lEX01BTlVGQUNUVVJFUiA9IEtNX0JZVEVTIHwgNzE2LCAvKiBVc2VkIHRvIHByb3ZpZGUgdGhlIGRldmljZSdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51ZmFjdHVyZXIgbmFtZSB0byBiZSBpbmNsdWRlZCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZXN0YXRpb24gKi8KKyAgICBLTV9UQUdfQVRURVNUQVRJT05fSURfTU9ERUwgPSBLTV9CWVRFUyB8IDcxNywgIC8qIFVzZWQgdG8gcHJvdmlkZSB0aGUgZGV2aWNlJ3MgbW9kZWwgbmFtZSB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZWQgaW4gYXR0ZXN0YXRpb24gKi8KIAogICAgIC8qIFRhZ3MgdXNlZCBvbmx5IHRvIHByb3ZpZGUgZGF0YSB0byBvciByZWNlaXZlIGRhdGEgZnJvbSBvcGVyYXRpb25zICovCiAgICAgS01fVEFHX0FTU09DSUFURURfREFUQSA9IEtNX0JZVEVTIHwgMTAwMCwgLyogVXNlZCB0byBwcm92aWRlIGFzc29jaWF0ZWQgZGF0YSBmb3IgQUVBRCBtb2Rlcy4gKi8KQEAgLTQyNyw2ICs0NDcsOCBAQAogICAgIEtNX0VSUk9SX0tFWV9SRVFVSVJFU19VUEdSQURFID0gLTYyLAogICAgIEtNX0VSUk9SX0FUVEVTVEFUSU9OX0NIQUxMRU5HRV9NSVNTSU5HID0gLTYzLAogICAgIEtNX0VSUk9SX0tFWU1BU1RFUl9OT1RfQ09ORklHVVJFRCA9IC02NCwKKyAgICBLTV9FUlJPUl9BVFRFU1RBVElPTl9BUFBMSUNBVElPTl9JRF9NSVNTSU5HID0gLTY1LAorICAgIEtNX0VSUk9SX0NBTk5PVF9BVFRFU1RfSURTID0gLTY2LAogCiAgICAgS01fRVJST1JfVU5JTVBMRU1FTlRFRCA9IC0xMDAsCiAgICAgS01fRVJST1JfVkVSU0lPTl9NSVNNQVRDSCA9IC0xMDEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL3NlbnNvcnMtYmFzZS5oIGIvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGY2MjIzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9oYXJkd2FyZS9zZW5zb3JzLWJhc2UuaApAQCAtMCwwICsxLDEzNyBAQAorLy8gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQgYnkgaGlkbC1nZW4uIERvIG5vdCBlZGl0IG1hbnVhbGx5LgorLy8gU291cmNlOiBhbmRyb2lkLmhhcmR3YXJlLnNlbnNvcnNAMS4wCisvLyBSb290OiBhbmRyb2lkLmhhcmR3YXJlOmhhcmR3YXJlL2ludGVyZmFjZXMKKworI2lmbmRlZiBISURMX0dFTkVSQVRFRF9BTkRST0lEX0hBUkRXQVJFX1NFTlNPUlNfVjFfMF9FWFBPUlRFRF9DT05TVEFOVFNfSF8KKyNkZWZpbmUgSElETF9HRU5FUkFURURfQU5EUk9JRF9IQVJEV0FSRV9TRU5TT1JTX1YxXzBfRVhQT1JURURfQ09OU1RBTlRTX0hfCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSB7CisgICAgU0VOU09SX0hBTF9OT1JNQUxfTU9ERSA9IDAsCisgICAgU0VOU09SX0hBTF9EQVRBX0lOSkVDVElPTl9NT0RFID0gMSwKK307CisKK2VudW0geworICAgIFNFTlNPUl9UWVBFX01FVEFfREFUQSA9IDAsCisgICAgU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiA9IDEsCisgICAgU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTEQgPSAyLAorICAgIFNFTlNPUl9UWVBFX09SSUVOVEFUSU9OID0gMywKKyAgICBTRU5TT1JfVFlQRV9HWVJPU0NPUEUgPSA0LAorICAgIFNFTlNPUl9UWVBFX0xJR0hUID0gNSwKKyAgICBTRU5TT1JfVFlQRV9QUkVTU1VSRSA9IDYsCisgICAgU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgPSA3LAorICAgIFNFTlNPUl9UWVBFX1BST1hJTUlUWSA9IDgsCisgICAgU0VOU09SX1RZUEVfR1JBVklUWSA9IDksCisgICAgU0VOU09SX1RZUEVfTElORUFSX0FDQ0VMRVJBVElPTiA9IDEwLAorICAgIFNFTlNPUl9UWVBFX1JPVEFUSU9OX1ZFQ1RPUiA9IDExLAorICAgIFNFTlNPUl9UWVBFX1JFTEFUSVZFX0hVTUlESVRZID0gMTIsCisgICAgU0VOU09SX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSA9IDEzLAorICAgIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCA9IDE0LAorICAgIFNFTlNPUl9UWVBFX0dBTUVfUk9UQVRJT05fVkVDVE9SID0gMTUsCisgICAgU0VOU09SX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRCA9IDE2LAorICAgIFNFTlNPUl9UWVBFX1NJR05JRklDQU5UX01PVElPTiA9IDE3LAorICAgIFNFTlNPUl9UWVBFX1NURVBfREVURUNUT1IgPSAxOCwKKyAgICBTRU5TT1JfVFlQRV9TVEVQX0NPVU5URVIgPSAxOSwKKyAgICBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19ST1RBVElPTl9WRUNUT1IgPSAyMCwKKyAgICBTRU5TT1JfVFlQRV9IRUFSVF9SQVRFID0gMjEsCisgICAgU0VOU09SX1RZUEVfVElMVF9ERVRFQ1RPUiA9IDIyLAorICAgIFNFTlNPUl9UWVBFX1dBS0VfR0VTVFVSRSA9IDIzLAorICAgIFNFTlNPUl9UWVBFX0dMQU5DRV9HRVNUVVJFID0gMjQsCisgICAgU0VOU09SX1RZUEVfUElDS19VUF9HRVNUVVJFID0gMjUsCisgICAgU0VOU09SX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFID0gMjYsCisgICAgU0VOU09SX1RZUEVfREVWSUNFX09SSUVOVEFUSU9OID0gMjcsCisgICAgU0VOU09SX1RZUEVfUE9TRV82RE9GID0gMjgsCisgICAgU0VOU09SX1RZUEVfU1RBVElPTkFSWV9ERVRFQ1QgPSAyOSwKKyAgICBTRU5TT1JfVFlQRV9NT1RJT05fREVURUNUID0gMzAsCisgICAgU0VOU09SX1RZUEVfSEVBUlRfQkVBVCA9IDMxLAorICAgIFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEgPSAzMiwKKyAgICBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8gPSAzMywKKyAgICBTRU5TT1JfVFlQRV9MT1dfTEFURU5DWV9PRkZCT0RZX0RFVEVDVCA9IDM0LAorICAgIFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVJfVU5DQUxJQlJBVEVEID0gMzUsCisgICAgU0VOU09SX1RZUEVfREVWSUNFX1BSSVZBVEVfQkFTRSA9IDY1NTM2LCAvLyAweDEwMDAwCit9OworCitlbnVtIHsKKyAgICBTRU5TT1JfRkxBR19XQUtFX1VQID0gMXUsIC8vIDEKKyAgICBTRU5TT1JfRkxBR19DT05USU5VT1VTX01PREUgPSAwdSwgLy8gMAorICAgIFNFTlNPUl9GTEFHX09OX0NIQU5HRV9NT0RFID0gMnUsIC8vIDIKKyAgICBTRU5TT1JfRkxBR19PTkVfU0hPVF9NT0RFID0gNHUsIC8vIDQKKyAgICBTRU5TT1JfRkxBR19TUEVDSUFMX1JFUE9SVElOR19NT0RFID0gNnUsIC8vIDYKKyAgICBTRU5TT1JfRkxBR19EQVRBX0lOSkVDVElPTiA9IDE2dSwgLy8gMHgxMAorICAgIFNFTlNPUl9GTEFHX0RZTkFNSUNfU0VOU09SID0gMzJ1LCAvLyAweDIwCisgICAgU0VOU09SX0ZMQUdfQURESVRJT05BTF9JTkZPID0gNjR1LCAvLyAweDQwCisgICAgU0VOU09SX0ZMQUdfRElSRUNUX0NIQU5ORUxfQVNITUVNID0gMTAyNHUsIC8vIDB4NDAwCisgICAgU0VOU09SX0ZMQUdfRElSRUNUX0NIQU5ORUxfR1JBTExPQyA9IDIwNDh1LCAvLyAweDgwMAorICAgIFNFTlNPUl9GTEFHX01BU0tfUkVQT1JUSU5HX01PREUgPSAxNHUsIC8vIDB4RQorICAgIFNFTlNPUl9GTEFHX01BU0tfRElSRUNUX1JFUE9SVCA9IDg5NnUsIC8vIDB4MzgwCisgICAgU0VOU09SX0ZMQUdfTUFTS19ESVJFQ1RfQ0hBTk5FTCA9IDMwNzJ1LCAvLyAweEMwMAorfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTRU5TT1JfRkxBR19TSElGVF9SRVBPUlRJTkdfTU9ERSA9IDEsCisgICAgU0VOU09SX0ZMQUdfU0hJRlRfREFUQV9JTkpFQ1RJT04gPSA0LAorICAgIFNFTlNPUl9GTEFHX1NISUZUX0RZTkFNSUNfU0VOU09SID0gNSwKKyAgICBTRU5TT1JfRkxBR19TSElGVF9BRERJVElPTkFMX0lORk8gPSA2LAorICAgIFNFTlNPUl9GTEFHX1NISUZUX0RJUkVDVF9SRVBPUlQgPSA3LAorICAgIFNFTlNPUl9GTEFHX1NISUZUX0RJUkVDVF9DSEFOTkVMID0gMTAsCit9IHNlbnNvcl9mbGFnX3NoaWZ0X3Q7CisKK2VudW0geworICAgIFNFTlNPUl9TVEFUVVNfTk9fQ09OVEFDVCA9IC0xLCAvLyAoLTEpCisgICAgU0VOU09SX1NUQVRVU19VTlJFTElBQkxFID0gMCwKKyAgICBTRU5TT1JfU1RBVFVTX0FDQ1VSQUNZX0xPVyA9IDEsCisgICAgU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9NRURJVU0gPSAyLAorICAgIFNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfSElHSCA9IDMsCit9OworCitlbnVtIHsKKyAgICBNRVRBX0RBVEFfRkxVU0hfQ09NUExFVEUgPSAxdSwgLy8gMQorfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBBSU5GT19CRUdJTiA9IDB1LCAvLyAwCisgICAgQUlORk9fRU5EID0gMXUsIC8vIDEKKyAgICBBSU5GT19VTlRSQUNLRURfREVMQVkgPSA2NTUzNnUsIC8vIDB4MTAwMDAKKyAgICBBSU5GT19JTlRFUk5BTF9URU1QRVJBVFVSRSA9IDY1NTM3dSwgLy8gNjU1MzcKKyAgICBBSU5GT19WRUMzX0NBTElCUkFUSU9OID0gNjU1Mzh1LCAvLyA2NTUzOAorICAgIEFJTkZPX1NFTlNPUl9QTEFDRU1FTlQgPSA2NTUzOXUsIC8vIDY1NTM5CisgICAgQUlORk9fU0FNUExJTkcgPSA2NTU0MHUsIC8vIDY1NTQwCisgICAgQUlORk9fQ0hBTk5FTF9OT0lTRSA9IDEzMTA3MnUsIC8vIDB4MjAwMDAKKyAgICBBSU5GT19DSEFOTkVMX1NBTVBMRVIgPSAxMzEwNzN1LCAvLyAxMzEwNzMKKyAgICBBSU5GT19DSEFOTkVMX0ZJTFRFUiA9IDEzMTA3NHUsIC8vIDEzMTA3NAorICAgIEFJTkZPX0NIQU5ORUxfTElORUFSX1RSQU5TRk9STSA9IDEzMTA3NXUsIC8vIDEzMTA3NQorICAgIEFJTkZPX0NIQU5ORUxfTk9OTElORUFSX01BUCA9IDEzMTA3NnUsIC8vIDEzMTA3NgorICAgIEFJTkZPX0NIQU5ORUxfUkVTQU1QTEVSID0gMTMxMDc3dSwgLy8gMTMxMDc3CisgICAgQUlORk9fTE9DQUxfR0VPTUFHTkVUSUNfRklFTEQgPSAxOTY2MDh1LCAvLyAweDMwMDAwCisgICAgQUlORk9fTE9DQUxfR1JBVklUWSA9IDE5NjYwOXUsIC8vIDE5NjYwOQorICAgIEFJTkZPX0RPQ0tfU1RBVEUgPSAxOTY2MTB1LCAvLyAxOTY2MTAKKyAgICBBSU5GT19ISUdIX1BFUkZPUk1BTkNFX01PREUgPSAxOTY2MTF1LCAvLyAxOTY2MTEKKyAgICBBSU5GT19NQUdORVRJQ19GSUVMRF9DQUxJQlJBVElPTiA9IDE5NjYxMnUsIC8vIDE5NjYxMgorICAgIEFJTkZPX0NVU1RPTV9TVEFSVCA9IDI2ODQzNTQ1NnUsIC8vIDB4MTAwMDAwMDAKKyAgICBBSU5GT19ERUJVR0dJTkdfU1RBUlQgPSAxMDczNzQxODI0dSwgLy8gMHg0MDAwMDAwMAorfSBhZGRpdGlvbmFsX2luZm9fdHlwZV90OworCit0eXBlZGVmIGVudW0geworICAgIFNFTlNPUl9ESVJFQ1RfUkFURV9TVE9QID0gMCwKKyAgICBTRU5TT1JfRElSRUNUX1JBVEVfTk9STUFMID0gMSwKKyAgICBTRU5TT1JfRElSRUNUX1JBVEVfRkFTVCA9IDIsCisgICAgU0VOU09SX0RJUkVDVF9SQVRFX1ZFUllfRkFTVCA9IDMsCit9IGRpcmVjdF9yYXRlX2xldmVsX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgU0VOU09SX0RJUkVDVF9NRU1fVFlQRV9BU0hNRU0gPSAxLAorICAgIFNFTlNPUl9ESVJFQ1RfTUVNX1RZUEVfR1JBTExPQyA9IDIsCit9IGRpcmVjdF9tZW1fdHlwZV90OworCit0eXBlZGVmIGVudW0geworICAgIFNFTlNPUl9ESVJFQ1RfRk1UX1NFTlNPUlNfRVZFTlQgPSAxLAorfSBkaXJlY3RfZm9ybWF0X3Q7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAgLy8gSElETF9HRU5FUkFURURfQU5EUk9JRF9IQVJEV0FSRV9TRU5TT1JTX1YxXzBfRVhQT1JURURfQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL3NlbnNvcnMuaCBiL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy5oCmluZGV4IDMyMmFiZTYuLmRkZTk5N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy5oCisrKyBiL2luY2x1ZGUvaGFyZHdhcmUvc2Vuc29ycy5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8aGFyZHdhcmUvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxjdXRpbHMvbmF0aXZlX2hhbmRsZS5oPgogCisjaW5jbHVkZSAic2Vuc29ycy1iYXNlLmgiCisKIF9fQkVHSU5fREVDTFMKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTQsMTQgKzU2LDE1IEBACiAjZGVmaW5lIFNFTlNPUlNfSEFSRFdBUkVfUE9MTCAgICAgICAicG9sbCIKIAogLyoqCi0gKiBIYW5kbGVzIG11c3QgYmUgaGlnaGVyIHRoYW4gU0VOU09SU19IQU5ETEVfQkFTRSBhbmQgbXVzdCBiZSB1bmlxdWUuCi0gKiBBIEhhbmRsZSBpZGVudGlmaWVzIGEgZ2l2ZW4gc2Vuc29ycy4gVGhlIGhhbmRsZSBpcyB1c2VkIHRvIGFjdGl2YXRlCi0gKiBhbmQvb3IgZGVhY3RpdmF0ZSBzZW5zb3JzLgotICogSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBBUEkgdGhlcmUgY2FuIG9ubHkgYmUgMjU2IGhhbmRsZXMuCisgKiBTZW5zb3IgaGFuZGxlIGlzIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gSU5UMzJfTUFYLgorICoKKyAqICoqKiogRGVwcmVjYXRlZCAqKioqCisgKiBEZWZpbmVkIHZhbHVlcyBiZWxvdyBhcmUga2VwdCBmb3IgY29kZSBjb21wYXRpYmlsaXR5LiBOb3RlIHNlbnNvciBoYW5kbGUgY2FuIGJlIGFzIGxhcmdlIGFzCisgKiBJTlQzMl9NQVguCiAgKi8KICNkZWZpbmUgU0VOU09SU19IQU5ETEVfQkFTRSAgICAgICAgICAgICAwCi0jZGVmaW5lIFNFTlNPUlNfSEFORExFX0JJVFMgICAgICAgICAgICAgOAotI2RlZmluZSBTRU5TT1JTX0hBTkRMRV9DT1VOVCAgICAgICAgICAgICgxPDxTRU5TT1JTX0hBTkRMRV9CSVRTKQorI2RlZmluZSBTRU5TT1JTX0hBTkRMRV9CSVRTICAgICAgICAgICAgIDMxCisjZGVmaW5lIFNFTlNPUlNfSEFORExFX0NPVU5UICAgICAgICAgICAgKDF1bGw8PFNFTlNPUlNfSEFORExFX0JJVFMpCiAKIAogLyoKQEAgLTgyLDcgKzg1LDcgQEAKICAqLwogZW51bSB7CiAgICAgLyogYSBwcmV2aW91cyBmbHVzaCBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCAqLwotICAgIE1FVEFfREFUQV9GTFVTSF9DT01QTEVURSA9IDEsCisgICAgLy8gTUVUQV9EQVRBX0ZMVVNIX0NPTVBMRVRFID0gMSwKICAgICBNRVRBX0RBVEFfVkVSU0lPTiAgIC8qIGFsd2F5cyBsYXN0LCBsZWF2ZSBhdXRvLWFzc2lnbmVkICovCiB9OwogCkBAIC05NCwyNyArOTcsMTEgQEAKICNkZWZpbmUgU0VOU09SX1BFUk1JU1NJT05fQk9EWV9TRU5TT1JTICJhbmRyb2lkLnBlcm1pc3Npb24uQk9EWV9TRU5TT1JTIgogCiAvKgotICogQXZhaWxhYmlsaXR5OiBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzQKLSAqIFNlbnNvciBIQUwgbW9kZXMgdXNlZCBpbiBzZXRfb3BlcmF0aW9uX21vZGUgbWV0aG9kCisgKiBzZW5zb3IgZmxhZ3MgbGVnYWN5IG5hbWVzCisgKgorICogcGxlYXNlIHVzZSBTRU5TT1JfRkxBR18qIGRpcmVjdGx5IGZvciBuZXcgaW1wbGVtZW50YXRpb24uCisgKiBAc2VlIHNlbnNvcl90CiAgKi8KLWVudW0gewotICAgIC8qCi0gICAgICogT3BlcmF0aW5nIG1vZGVzIGZvciB0aGUgSEFMLgotICAgICAqLwotCi0gICAgLyoKLSAgICAgKiBOb3JtYWwgbW9kZSBvcGVyYXRpb24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgc3RhdGUgb2Ygb3BlcmF0aW9uLgotICAgICAqIFRoZSBIQUwgc2hhbGwgaW5pdGlhbGl6ZSBpbnRvIHRoaXMgbW9kZSBvbiBkZXZpY2Ugc3RhcnR1cC4KLSAgICAgKi8KLSAgICBTRU5TT1JfSEFMX05PUk1BTF9NT0RFICAgICAgICA9IDAsCi0KLSAgICAvKgotICAgICAqIERhdGEgSW5qZWN0aW9uIG1vZGUuIEluIHRoaXMgbW9kZSwgdGhlIGRldmljZSBzaGFsbCBub3Qgc291cmNlIGRhdGEgZnJvbSB0aGUKLSAgICAgKiBwaHlzaWNhbCBzZW5zb3JzIGFzIGl0IHdvdWxkIGluIG5vcm1hbCBtb2RlLiBJbnN0ZWFkIHNlbnNvciBkYXRhIGlzCi0gICAgICogaW5qZWN0ZWQgYnkgdGhlIHNlbnNvciBzZXJ2aWNlLgotICAgICAqLwotICAgIFNFTlNPUl9IQUxfREFUQV9JTkpFQ1RJT05fTU9ERSAgICAgID0gMHgxCi19OwogCiAjZGVmaW5lIFNFTlNPUl9GTEFHX01BU0sobmJpdCwgc2hpZnQpICAgKCgoMTw8KG5iaXQpKS0xKTw8KHNoaWZ0KSkKICNkZWZpbmUgU0VOU09SX0ZMQUdfTUFTS18xKHNoaWZ0KSAgICAgICBTRU5TT1JfRkxBR19NQVNLKDEsIHNoaWZ0KQpAQCAtMTIyLDc0OSArMTA5LDgyIEBACiAvKgogICogTWFzayBhbmQgc2hpZnQgZm9yIHJlcG9ydGluZyBtb2RlIHNlbnNvciBmbGFncyBkZWZpbmVkIGFib3ZlLgogICovCi0jZGVmaW5lIFJFUE9SVElOR19NT0RFX1NISUZUICAgICAgICAgICAgKDEpCisjZGVmaW5lIFJFUE9SVElOR19NT0RFX1NISUZUICAgICAgICAgICAgU0VOU09SX0ZMQUdfU0hJRlRfUkVQT1JUSU5HX01PREUKICNkZWZpbmUgUkVQT1JUSU5HX01PREVfTkJJVCAgICAgICAgICAgICAoMykKLSNkZWZpbmUgUkVQT1JUSU5HX01PREVfTUFTSyAgICAgICAgICAgICBTRU5TT1JfRkxBR19NQVNLKFJFUE9SVElOR19NT0RFX05CSVQsIFJFUE9SVElOR19NT0RFX1NISUZUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4RQorI2RlZmluZSBSRVBPUlRJTkdfTU9ERV9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX01BU0tfUkVQT1JUSU5HX01PREUKIAogLyoKICAqIE1hc2sgYW5kIHNoaWZ0IGZvciBkYXRhX2luamVjdGlvbiBtb2RlIHNlbnNvciBmbGFncyBkZWZpbmVkIGFib3ZlLgogICovCi0jZGVmaW5lIERBVEFfSU5KRUNUSU9OX1NISUZUICAgICAgICAgICAgKDQpCi0jZGVmaW5lIERBVEFfSU5KRUNUSU9OX01BU0sgICAgICAgICAgICAgU0VOU09SX0ZMQUdfTUFTS18xKERBVEFfSU5KRUNUSU9OX1NISUZUKSAvLzB4MTAKKyNkZWZpbmUgREFUQV9JTkpFQ1RJT05fU0hJRlQgICAgICAgICAgICBTRU5TT1JfRkxBR19TSElGVF9EQVRBX0lOSkVDVElPTgorI2RlZmluZSBEQVRBX0lOSkVDVElPTl9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX0RBVEFfSU5KRUNUSU9OCiAKIC8qCiAgKiBNYXNrIGFuZCBzaGlmdCBmb3IgZHluYW1pYyBzZW5zb3IgZmxhZy4KICAqLwotI2RlZmluZSBEWU5BTUlDX1NFTlNPUl9TSElGVCAgICAgICAgICAgICg1KQotI2RlZmluZSBEWU5BTUlDX1NFTlNPUl9NQVNLICAgICAgICAgICAgIFNFTlNPUl9GTEFHX01BU0tfMShEWU5BTUlDX1NFTlNPUl9TSElGVCkgLy8weDIwCisjZGVmaW5lIERZTkFNSUNfU0VOU09SX1NISUZUICAgICAgICAgICAgU0VOU09SX0ZMQUdfU0hJRlRfRFlOQU1JQ19TRU5TT1IKKyNkZWZpbmUgRFlOQU1JQ19TRU5TT1JfTUFTSyAgICAgICAgICAgICBTRU5TT1JfRkxBR19EWU5BTUlDX1NFTlNPUgogCiAvKgogICogTWFzayBhbmQgc2hpZnQgZm9yIHNlbnNvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1cHBvcnQuCiAgKi8KLSNkZWZpbmUgQURESVRJT05BTF9JTkZPX1NISUZUICAgICAgICAgICAoNikKLSNkZWZpbmUgQURESVRJT05BTF9JTkZPX01BU0sgICAgICAgICAgICBTRU5TT1JfRkxBR19NQVNLXzEoQURESVRJT05BTF9JTkZPX1NISUZUKSAvLzB4NDAKKyNkZWZpbmUgQURESVRJT05BTF9JTkZPX1NISUZUICAgICAgICAgICBTRU5TT1JfRkxBR19TSElGVF9BRERJVElPTkFMX0lORk8KKyNkZWZpbmUgQURESVRJT05BTF9JTkZPX01BU0sgICAgICAgICAgICBTRU5TT1JfRkxBR19BRERJVElPTkFMX0lORk8KIAogLyoKLSAqIEF2YWlsYWJpbGl0eTogU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8zCi0gKiBTZW5zb3IgZmxhZ3MgdXNlZCBpbiBzZW5zb3JfdC5mbGFncy4KKyAqIExlZ2FjeSBhbGlhcyBvZiBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRC4KKyAqCisgKiBQcmV2aW91c2x5LCB0aGUgdHlwZSBvZiBhIHNlbnNvciBtZWFzdXJpbmcgbG9jYWwgbWFnbmV0aWMgZmllbGQgaXMgbmFtZWQKKyAqIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxEIGFuZCBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRCBpcyBpdHMgYWxpYXMuCisgKiBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRCBpcyByZWRlZmluZWQgYXMgcHJpbWFyeSBuYW1lIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAqIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxEIGlzIHRoZSBhbGlhcyBhbmQgaXMgZGVwcmVjYXRpbmcuIE5ldyBpbXBsZW1lbnRhdGlvbiBtdXN0IG5vdCB1c2UKKyAqIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxELgogICovCi1lbnVtIHsKLSAgICAvKgotICAgICAqIFdoZXRoZXIgdGhpcyBzZW5zb3Igd2FrZXMgdXAgdGhlIEFQIGZyb20gc3VzcGVuZCBtb2RlIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUuICBXaGVuZXZlcgotICAgICAqIHNlbnNvciBldmVudHMgYXJlIGRlbGl2ZXJlZCBmcm9tIGEgd2FrZV91cCBzZW5zb3IsIHRoZSBkcml2ZXIgbmVlZHMgdG8gaG9sZCBhIHdha2VfbG9jayB0aWxsCi0gICAgICogdGhlIGV2ZW50cyBhcmUgcmVhZCBieSB0aGUgU2Vuc29yU2VydmljZSBpLmUgdGlsbCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QucG9sbCgpIGlzIGNhbGxlZCB0aGUKLSAgICAgKiBuZXh0IHRpbWUuIE9uY2UgcG9sbCBpcyBjYWxsZWQgYWdhaW4gaXQgbWVhbnMgZXZlbnRzIGhhdmUgYmVlbiByZWFkIGJ5IHRoZSBTZW5zb3JTZXJ2aWNlLCB0aGUKLSAgICAgKiBkcml2ZXIgY2FuIHNhZmVseSByZWxlYXNlIHRoZSB3YWtlX2xvY2suIFNlbnNvclNlcnZpY2Ugd2lsbCBjb250aW51ZSB0byBob2xkIGEgd2FrZV9sb2NrIHRpbGwKLSAgICAgKiB0aGUgYXBwIGFjdHVhbGx5IHJlYWRzIHRoZSBldmVudHMuCi0gICAgICovCi0gICAgU0VOU09SX0ZMQUdfV0FLRV9VUCA9IDFVIDw8IDAsCi0gICAgLyoKLSAgICAgKiBSZXBvcnRpbmcgbW9kZXMgZm9yIHZhcmlvdXMgc2Vuc29ycy4gRWFjaCBzZW5zb3Igd2lsbCBoYXZlIGV4YWN0bHkgb25lIG9mIHRoZXNlIG1vZGVzIHNldC4KLSAgICAgKiBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgMm5kLCAzcmQgYW5kIDR0aCBiaXRzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBmb3VyIHBvc3NpYmxlIHJlcG9ydGluZwotICAgICAqIG1vZGVzLgotICAgICAqLwotICAgIFNFTlNPUl9GTEFHX0NPTlRJTlVPVVNfTU9ERSAgICAgICAgPSAwLCAgICAvLyAwMDAwCi0gICAgU0VOU09SX0ZMQUdfT05fQ0hBTkdFX01PREUgICAgICAgICA9IDB4MiwgIC8vIDAwMTAKLSAgICBTRU5TT1JfRkxBR19PTkVfU0hPVF9NT0RFICAgICAgICAgID0gMHg0LCAgLy8gMDEwMAotICAgIFNFTlNPUl9GTEFHX1NQRUNJQUxfUkVQT1JUSU5HX01PREUgPSAweDYsICAvLyAwMTEwCi0KLSAgICAvKgotICAgICAqIFNldCB0aGlzIGZsYWcgaWYgdGhlIHNlbnNvciBzdXBwb3J0cyBkYXRhX2luamVjdGlvbiBtb2RlIGFuZCBhbGxvd3MgZGF0YSB0byBiZSBpbmplY3RlZAotICAgICAqIGZyb20gdGhlIFNlbnNvclNlcnZpY2UuIFdoZW4gaW4gZGF0YV9pbmplY3Rpb24gT05MWSBzZW5zb3JzIHdpdGggdGhpcyBmbGFnIHNldCBhcmUgaW5qZWN0ZWQKLSAgICAgKiBzZW5zb3IgZGF0YSBhbmQgb25seSBzZW5zb3JzIHdpdGggdGhpcyBmbGFnIHNldCBhcmUgYWN0aXZhdGVkLiBFZzogQWNjZWxlcm9tZXRlciBhbmQgU3RlcAotICAgICAqIENvdW50ZXIgc2Vuc29ycyBjYW4gYmUgc2V0IHdpdGggdGhpcyBmbGFnIGFuZCBTZW5zb3JTZXJ2aWNlIHdpbGwgaW5qZWN0IGFjY2VsZXJvbWV0ZXIgZGF0YQotICAgICAqIGFuZCByZWFkIHRoZSBjb3JyZXNwb25kaW5nIHN0ZXAgY291bnRzLgotICAgICAqLwotICAgIFNFTlNPUl9GTEFHX1NVUFBPUlRTX0RBVEFfSU5KRUNUSU9OID0gREFUQV9JTkpFQ1RJT05fTUFTSywgLy8gMSAwMDAwCi0KLSAgICAvKgotICAgICAqIFNldCB0aGlzIGZsYWcgaWYgdGhlIHNlbnNvciBpcyBhIGR5bmFtaWNhbGx5IGNvbm5lY3RlZCBzZW5zb3IuIFNlZQotICAgICAqIGR5bmFtaWNfc2Vuc29yX21ldGFfZXZlbnRfdCBhbmQgU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSBmb3IgZGV0YWlscy4KLSAgICAgKi8KLSAgICBTRU5TT1JfRkxBR19EWU5BTUlDX1NFTlNPUiA9IERZTkFNSUNfU0VOU09SX01BU0ssCi0KLSAgICAvKgotICAgICAqIFNldCB0aGlzIGZsYWcgaWYgc2Vuc29yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgc3VwcG9ydGVkLiBTZWUgU0VOU09SX1RZUEVfQURESVRJT05BTF9JTkZPCi0gICAgICogYW5kIGFkZGl0aW9uYWxfaW5mb19ldmVudF90IGZvciBkZXRhaWxzLgotICAgICAqLwotICAgIFNFTlNPUl9GTEFHX0FERElUSU9OQUxfSU5GTyA9IEFERElUSU9OQUxfSU5GT19NQVNLCi19OwotCisjZGVmaW5lIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX0ZJRUxEICAgU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTEQKIAogLyoKLSAqIFNlbnNvciB0eXBlCisgKiBTZW5zb3Igc3RyaW5nIHR5cGVzIGZvciBBbmRyb2lkIGRlZmluZWQgc2Vuc29yIHR5cGVzLgogICoKLSAqIEVhY2ggc2Vuc29yIGhhcyBhIHR5cGUgd2hpY2ggZGVmaW5lcyB3aGF0IHRoaXMgc2Vuc29yIG1lYXN1cmVzIGFuZCBob3cKLSAqIG1lYXN1cmVzIGFyZSByZXBvcnRlZC4gU2VlIHRoZSBCYXNlIHNlbnNvcnMgYW5kIENvbXBvc2l0ZSBzZW5zb3JzIGxpc3RzCi0gKiBmb3IgY29tcGxldGUgZGVzY3JpcHRpb25zOgotICogaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbS9kZXZpY2VzL3NlbnNvcnMvYmFzZV90cmlnZ2Vycy5odG1sCi0gKiBodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvc2Vuc29ycy9jb21wb3NpdGVfc2Vuc29ycy5odG1sCisgKiBGb3IgQW5kcm9pZCBkZWZpbmVkIHNlbnNvciB0eXBlcywgc3RyaW5nIHR5cGUgd2lsbCBiZSBvdmVycmlkZSBpbiBzZW5zb3Igc2VydmljZSBhbmQgdGh1cyBubworICogbG9uZ2VyIG5lZWRlZCB0byBiZSBhZGRlZCB0byBzZW5zb3JfdCBkYXRhIHN0cnVjdHVyZS4KICAqCi0gKiBEZXZpY2UgbWFudWZhY3R1cmVycyAoT0VNcykgY2FuIGRlZmluZSB0aGVpciBvd24gc2Vuc29yIHR5cGVzLCBmb3IKLSAqIHRoZWlyIHByaXZhdGUgdXNlIGJ5IGFwcGxpY2F0aW9ucyBvciBzZXJ2aWNlcyBwcm92aWRlZCBieSB0aGVtLiBTdWNoCi0gKiBzZW5zb3IgdHlwZXMgYXJlIHNwZWNpZmljIHRvIGFuIE9FTSBhbmQgY2FuJ3QgYmUgZXhwb3NlZCBpbiB0aGUgU0RLLgotICogVGhlc2UgdHlwZXMgbXVzdCBzdGFydCBhdCBTRU5TT1JfVFlQRV9ERVZJQ0VfUFJJVkFURV9CQVNFLgotICoKLSAqIEFsbCBzZW5zb3JzIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgZGV2aWNlIHByaXZhdGUgcmFuZ2UgbXVzdCBjb3JyZXNwb25kIHRvCi0gKiBhIHR5cGUgZGVmaW5lZCBpbiB0aGlzIGZpbGUsIGFuZCBtdXN0IHNhdGlzZnkgdGhlIGNoYXJhY3RlcmlzdGljcyBsaXN0ZWQgaW4KLSAqIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2Vuc29yIHR5cGUuCi0gKgotICogU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfMiwgZWFjaCBzZW5zb3IgYWxzbwotICogaGFzIGEgc3RyaW5nVHlwZS4KLSAqICAtIFN0cmluZ1R5cGUgb2Ygc2Vuc29ycyBpbnNpZGUgb2YgdGhlIGRldmljZSBwcml2YXRlIHJhbmdlIE1VU1QgYmUgcHJlZml4ZWQKLSAqICAgIGJ5IHRoZSBzZW5zb3IgcHJvdmlkZXIncyBvciBPRU0gcmV2ZXJzZSBkb21haW4gbmFtZS4gSW4gcGFydGljdWxhciwgdGhleQotICogICAgY2Fubm90IHVzZSB0aGUgImFuZHJvaWQuc2Vuc29yIiBwcmVmaXguCi0gKiAgLSBTdHJpbmdUeXBlIG9mIHNlbnNvcnMgb3V0c2lkZSBvZiB0aGUgZGV2aWNlIHByaXZhdGUgcmFuZ2UgTVVTVCBjb3JyZXNwb25kCi0gKiAgICB0byB0aGUgb25lIGRlZmluZWQgaW4gdGhpcyBmaWxlIChzdGFydGluZyB3aXRoICJhbmRyb2lkLnNlbnNvciIpLgotICogICAgRm9yIGV4YW1wbGUsIGFjY2VsZXJvbWV0ZXJzIG11c3QgaGF2ZQotICogICAgICB0eXBlPVNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIgYW5kCi0gKiAgICAgIHN0cmluZ1R5cGU9U0VOU09SX1NUUklOR19UWVBFX0FDQ0VMRVJPTUVURVIKLSAqCi0gKiBXaGVuIGFuZHJvaWQgaW50cm9kdWNlcyBhIG5ldyBzZW5zb3IgdHlwZSB0aGF0IGNhbiByZXBsYWNlIGFuIE9FTS1kZWZpbmVkCi0gKiBzZW5zb3IgdHlwZSwgdGhlIE9FTSBtdXN0IHVzZSB0aGUgb2ZmaWNpYWwgc2Vuc29yIHR5cGUgYW5kIHN0cmluZ1R5cGUgb24KLSAqIHZlcnNpb25zIG9mIHRoZSBIQUwgdGhhdCBzdXBwb3J0IHRoaXMgbmV3IG9mZmljaWFsIHNlbnNvciB0eXBlLgotICoKLSAqIEV4YW1wbGUgKG1hZGUgdXApOiBTdXBwb3NlIEdvb2dsZSdzIEdsYXNzIHRlYW0gd2FudHMgdG8gc3VyZmFjZSBhIHNlbnNvcgotICogZGV0ZWN0aW5nIHRoYXQgR2xhc3MgaXMgb24gYSBoZWFkLgotICogIC0gU3VjaCBhIHNlbnNvciBpcyBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgaW4gYW5kcm9pZCBLaXRLYXQKLSAqICAtIEdsYXNzIGRldmljZXMgbGF1bmNoaW5nIG9uIEtpdEthdCBjYW4gaW1wbGVtZW50IGEgc2Vuc29yIHdpdGgKLSAqICAgIHR5cGUgPSAweDEwMDAxIGFuZCBzdHJpbmdUeXBlID0gImNvbS5nb29nbGUuZ2xhc3Mub25oZWFkZGV0ZWN0b3IiCi0gKiAgLSBJbiBMIGFuZHJvaWQgcmVsZWFzZSwgaWYgYW5kcm9pZCBkZWNpZGVzIHRvIGRlZmluZQotICogICAgU0VOU09SX1RZUEVfT05fSEVBRF9ERVRFQ1RPUiBhbmQgU1RSSU5HX1NFTlNPUl9UWVBFX09OX0hFQURfREVURUNUT1IsCi0gKiAgICB0aG9zZSB0eXBlcyBzaG91bGQgcmVwbGFjZSB0aGUgR2xhc3MtdGVhbS1zcGVjaWZpYyB0eXBlcyBpbiBhbGwgZnV0dXJlCi0gKiAgICBsYXVuY2hlcy4KLSAqICAtIFdoZW4gbGF1bmNoaW5nIEdsYXNzIG9uIHRoZSBMIHJlbGVhc2UsIEdvb2dsZSBzaG91bGQgbm93IHVzZSB0aGUgb2ZmaWNpYWwKLSAqICAgIHR5cGUgKFNFTlNPUl9UWVBFX09OX0hFQURfREVURUNUT1IpIGFuZCBzdHJpbmdUeXBlLgotICogIC0gVGhpcyB3YXksIGFsbCBhcHBsaWNhdGlvbnMgY2FuIG5vdyB1c2UgdGhpcyBzZW5zb3IuCisgKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgZ29pbmcgdG8gYmUgcmVtb3ZlZCBzb29uLgogICovCi0KLS8qCi0gKiBCYXNlIGZvciBkZXZpY2UgbWFudWZhY3R1cmVycyBwcml2YXRlIHNlbnNvciB0eXBlcy4KLSAqIFRoZXNlIHNlbnNvciB0eXBlcyBjYW4ndCBiZSBleHBvc2VkIGluIHRoZSBTREsuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfREVWSUNFX1BSSVZBVEVfQkFTRSAgICAgMHgxMDAwMAotCi0vKgotICogU0VOU09SX1RZUEVfTUVUQV9EQVRBCi0gKiByZXBvcnRpbmctbW9kZTogbi9hCi0gKiB3YWtlLXVwIHNlbnNvcjogbi9hCi0gKgotICogTk8gU0VOU09SIE9GIFRIQVQgVFlQRSBNVVNUIEJFIFJFVFVSTkVEICgqZ2V0X3NlbnNvcnNfbGlzdCkoKQotICoKLSAqIFNFTlNPUl9UWVBFX01FVEFfREFUQSBpcyBhIHNwZWNpYWwgdG9rZW4gdXNlZCB0byBwb3B1bGF0ZSB0aGUKLSAqIHNlbnNvcnNfbWV0YV9kYXRhX2V2ZW50IHN0cnVjdHVyZS4gSXQgZG9lc24ndCBjb3JyZXNwb25kIHRvIGEgcGh5c2ljYWwKLSAqIHNlbnNvci4gc2Vuc29yc19tZXRhX2RhdGFfZXZlbnQgYXJlIHNwZWNpYWwsIHRoZXkgZXhpc3Qgb25seSBpbnNpZGUKLSAqIHRoZSBIQUwgYW5kIGFyZSBnZW5lcmF0ZWQgc3BvbnRhbmVvdXNseSwgYXMgb3Bwb3NlZCB0byBiZSByZWxhdGVkIHRvCi0gKiBhIHBoeXNpY2FsIHNlbnNvci4KLSAqCi0gKiAgIHNlbnNvcnNfbWV0YV9kYXRhX2V2ZW50X3QudmVyc2lvbiBtdXN0IGJlIE1FVEFfREFUQV9WRVJTSU9OCi0gKiAgIHNlbnNvcnNfbWV0YV9kYXRhX2V2ZW50X3Quc2Vuc29yIG11c3QgYmUgMAotICogICBzZW5zb3JzX21ldGFfZGF0YV9ldmVudF90LnR5cGUgbXVzdCBiZSBTRU5TT1JfVFlQRV9NRVRBX0RBVEEKLSAqICAgc2Vuc29yc19tZXRhX2RhdGFfZXZlbnRfdC5yZXNlcnZlZCBtdXN0IGJlIDAKLSAqICAgc2Vuc29yc19tZXRhX2RhdGFfZXZlbnRfdC50aW1lc3RhbXAgbXVzdCBiZSAwCi0gKgotICogVGhlIHBheWxvYWQgaXMgYSBtZXRhX2RhdGFfZXZlbnRfdCwgd2hlcmU6Ci0gKiBtZXRhX2RhdGFfZXZlbnRfdC53aGF0IGNhbiB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICoKLSAqIE1FVEFfREFUQV9GTFVTSF9DT01QTEVURQotICogICBUaGlzIGV2ZW50IGluZGljYXRlcyB0aGF0IGEgcHJldmlvdXMgKCpmbHVzaCkoKSBjYWxsIGhhcyBjb21wbGV0ZWQgZm9yIHRoZSBzZW5zb3IKLSAqICAgaGFuZGxlIHNwZWNpZmllZCBpbiBtZXRhX2RhdGFfZXZlbnRfdC5zZW5zb3IuCi0gKiAgIHNlZSAoKmZsdXNoKSgpIGZvciBtb3JlIGRldGFpbHMKLSAqCi0gKiBBbGwgb3RoZXIgdmFsdWVzIGZvciBtZXRhX2RhdGFfZXZlbnRfdC53aGF0IGFyZSByZXNlcnZlZCBhbmQKLSAqIG11c3Qgbm90IGJlIHVzZWQuCi0gKgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX01FVEFfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICgwKQotCi0vKgotICAqIFdha2UgdXAgc2Vuc29ycy4KLSAgKiBFYWNoIHNlbnNvciBtYXkgaGF2ZSBlaXRoZXIgb3IgYm90aCBhIHdha2UtdXAgYW5kIGEgbm9uLXdha2UgdmFyaWFudC4KLSAgKiBXaGVuIHJlZ2lzdGVyZWQgaW4gYmF0Y2ggbW9kZSwgd2FrZS11cCBzZW5zb3JzIHdpbGwgd2FrZSB1cCB0aGUgQVAgd2hlbgotICAqIHRoZWlyIEZJRk9zIGFyZSBmdWxsIG9yIHdoZW4gdGhlIGJhdGNoIHRpbWVvdXQgZXhwaXJlcy4gQSBzZXBhcmF0ZSBGSUZPIGhhcwotICAqIHRvIGJlIG1haW50YWluZWQgZm9yIHdha2UgdXAgc2Vuc29ycyBhbmQgbm9uIHdha2UgdXAgc2Vuc29ycy4gVGhlIG5vbiB3YWtlLXVwCi0gICogc2Vuc29ycyBuZWVkIHRvIG92ZXJ3cml0ZSB0aGVpciBGSUZPcyB3aGVuIHRoZXkgYXJlIGZ1bGwgdGlsbCB0aGUgQVAgd2FrZXMgdXAKLSAgKiBhbmQgdGhlIHdha2UtdXAgc2Vuc29ycyB3aWxsIHdha2UtdXAgdGhlIEFQIHdoZW4gdGhlaXIgRklGT3MgYXJlIGZ1bGwgb3Igd2hlbgotICAqIHRoZSBiYXRjaCB0aW1lb3V0IGV4cGlyZXMgd2l0aG91dCBsb3NpbmcgZXZlbnRzLiBXYWtlLXVwIGFuZCBub24gd2FrZS11cCB2YXJpYW50cwotICAqIG9mIGVhY2ggc2Vuc29yIGNhbiBiZSBhY3RpdmF0ZWQgYXQgZGlmZmVyZW50IHJhdGVzIGluZGVwZW5kZW50bHkgb2YgZWFjaCBvdGhlci4KLSAgKgotICAqIE5vdGU6IFByb3hpbWl0eSBzZW5zb3IgYW5kIHNpZ25pZmljYW50IG1vdGlvbiBzZW5zb3Igd2hpY2ggd2VyZSBkZWZpbmVkIGluIHByZXZpb3VzCi0gICogcmVsZWFzZXMgYXJlIGFsc28gd2FrZS11cCBzZW5zb3JzIGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBzdWNoLiBXYWtlLXVwIG9uZS1zaG90Ci0gICogc2Vuc29ycyBsaWtlIFNJR05JRklDQU5UX01PVElPTiBjYW5ub3QgYmUgYmF0Y2hlZCwgaGVuY2UgdGhlIHRleHQgYWJvdXQgYmF0Y2ggYWJvdmUKLSAgKiBkb2Vzbid0IGFwcGx5IHRvIHRoZW0uIFNlZSB0aGUgZGVmaW5pdGlvbnMgb2YgU0VOU09SX1RZUEVfUFJPWElNSVRZIGFuZAotICAqIFNFTlNPUl9UWVBFX1NJR05JRklDQU5UX01PVElPTiBmb3IgbW9yZSBpbmZvLgotICAqCi0gICogU2V0IFNFTlNPUl9GTEFHX1dBS0VfVVAgZmxhZyBmb3IgYWxsIHdha2UtdXAgc2Vuc29ycy4KLSAgKgotICAqIEZvciBleGFtcGxlLCBBIGRldmljZSBjYW4gaGF2ZSB0d28gc2Vuc29ycyBib3RoIG9mIFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIgYW5kCi0gICogb25lIG9mIHRoZW0gY2FuIGJlIGEgd2FrZV91cCBzZW5zb3IgKHdpdGggU0VOU09SX0ZMQUdfV0FLRV9VUCBmbGFnIHNldCkgYW5kIHRoZSBvdGhlcgotICAqIGNhbiBiZSBhIHJlZ3VsYXIgbm9uIHdha2VfdXAgc2Vuc29yLiBCb3RoIG9mIHRoZXNlIHNlbnNvcnMgbXVzdCBiZSBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQKLSAgKiBpbmRlcGVuZGVudGx5IG9mIHRoZSBvdGhlci4KLSAgKi8KLQotLyoKLSAqIFNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIKLSAqIHJlcG9ydGluZy1tb2RlOiBjb250aW51b3VzCi0gKgotICogIEFsbCB2YWx1ZXMgYXJlIGluIFNJIHVuaXRzIChtL3NeMikgYW5kIG1lYXN1cmUgdGhlIGFjY2VsZXJhdGlvbiBvZiB0aGUKLSAqICBkZXZpY2UgbWludXMgdGhlIGZvcmNlIG9mIGdyYXZpdHkuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9BQ0NFTEVST01FVEVSICAgICAgICAgICAgICAgICAgICAoMSkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0FDQ0VMRVJPTUVURVIgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmFjY2VsZXJvbWV0ZXIiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19GSUVMRAotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgQWxsIHZhbHVlcyBhcmUgaW4gbWljcm8tVGVzbGEgKHVUKSBhbmQgbWVhc3VyZSB0aGUgZ2VvbWFnbmV0aWMKLSAqICBmaWVsZCBpbiB0aGUgWCwgWSBhbmQgWiBheGlzLgotICoKLSAqICBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfRklFTEQgICAgICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxEICBTRU5TT1JfVFlQRV9HRU9NQUdORVRJQ19GSUVMRAotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTUFHTkVUSUNfRklFTEQgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IubWFnbmV0aWNfZmllbGQiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9PUklFTlRBVElPTgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBBbGwgdmFsdWVzIGFyZSBhbmdsZXMgaW4gZGVncmVlcy4KLSAqCi0gKiBPcmllbnRhdGlvbiBzZW5zb3JzIHJldHVybiBzZW5zb3IgZXZlbnRzIGZvciBhbGwgMyBheGVzIGF0IGEgY29uc3RhbnQKLSAqIHJhdGUgZGVmaW5lZCBieSBzZXREZWxheSgpLgotICoKLSAqIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX09SSUVOVEFUSU9OICAgICAgICAgICAgICAgICAgICAgICgzKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iub3JpZW50YXRpb24iCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9HWVJPU0NPUEUKLSAqIHJlcG9ydGluZy1tb2RlOiBjb250aW51b3VzCi0gKgotICogIEFsbCB2YWx1ZXMgYXJlIGluIHJhZGlhbnMvc2Vjb25kIGFuZCBtZWFzdXJlIHRoZSByYXRlIG9mIHJvdGF0aW9uCi0gKiAgYXJvdW5kIHRoZSBYLCBZIGFuZCBaIGF4aXMuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9HWVJPU0NPUEUgICAgICAgICAgICAgICAgICAgICAgICAoNCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dZUk9TQ09QRSAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmd5cm9zY29wZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0xJR0hUCi0gKiByZXBvcnRpbmctbW9kZTogb24tY2hhbmdlCi0gKgotICogVGhlIGxpZ2h0IHNlbnNvciB2YWx1ZSBpcyByZXR1cm5lZCBpbiBTSSBsdXggdW5pdHMuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTElHSFQgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IubGlnaHQiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9QUkVTU1VSRQotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBUaGUgcHJlc3N1cmUgc2Vuc29yIHJldHVybiB0aGUgYXRobW9zcGhlcmljIHByZXNzdXJlIGluIGhlY3RvcGFzY2FsIChoUGEpCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5wcmVzc3VyZSIKLQotLyogU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgaXMgZGVwcmVjYXRlZCBpbiB0aGUgSEFMICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICg3KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IudGVtcGVyYXR1cmUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9QUk9YSU1JVFkKLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiBUaGUgcHJveGltaXR5IHNlbnNvciB3aGljaCB0dXJucyB0aGUgc2NyZWVuIG9mZiBhbmQgYmFjayBvbiBkdXJpbmcgY2FsbHMgaXMgdGhlCi0gKiB3YWtlLXVwIHByb3hpbWl0eSBzZW5zb3IuIEltcGxlbWVudCB3YWtlLXVwIHByb3hpbWl0eSBzZW5zb3IgYmVmb3JlIGltcGxlbWVudGluZwotICogYSBub24gd2FrZS11cCBwcm94aW1pdHkgc2Vuc29yLiBGb3IgdGhlIHdha2UtdXAgcHJveGltaXR5IHNlbnNvciBzZXQgdGhlIGZsYWcKLSAqIFNFTlNPUl9GTEFHX1dBS0VfVVAuCi0gKiBUaGUgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIGRpc3RhbmNlIHRvIHRoZSBuZWFyZXN0IG9iamVjdCBpbiBjZW50aW1ldGVycy4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9QUk9YSU1JVFkgICAgICAgICAgICAgICAgICAgICAgICAoOCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1BST1hJTUlUWSAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnByb3hpbWl0eSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0dSQVZJVFkKLSAqIHJlcG9ydGluZy1tb2RlOiBjb250aW51b3VzCi0gKgotICogQSBncmF2aXR5IG91dHB1dCBpbmRpY2F0ZXMgdGhlIGRpcmVjdGlvbiBvZiBhbmQgbWFnbml0dWRlIG9mIGdyYXZpdHkgaW4KLSAqIHRoZSBkZXZpY2VzJ3MgY29vcmRpbmF0ZXMuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR1JBVklUWSAgICAgICAgICAgICAgICAgICAgICAgICAgKDkpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HUkFWSVRZICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5ncmF2aXR5IgotCi0vKgotICogU0VOU09SX1RZUEVfTElORUFSX0FDQ0VMRVJBVElPTgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBJbmRpY2F0ZXMgdGhlIGxpbmVhciBhY2NlbGVyYXRpb24gb2YgdGhlIGRldmljZSBpbiBkZXZpY2UgY29vcmRpbmF0ZXMsCi0gKiBub3QgaW5jbHVkaW5nIGdyYXZpdHkuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfTElORUFSX0FDQ0VMRVJBVElPTiAgICAgICAgICAgICAoMTApCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9MSU5FQVJfQUNDRUxFUkFUSU9OICAgICAgImFuZHJvaWQuc2Vuc29yLmxpbmVhcl9hY2NlbGVyYXRpb24iCi0KLQotLyoKLSAqIFNFTlNPUl9UWVBFX1JPVEFUSU9OX1ZFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBUaGUgcm90YXRpb24gdmVjdG9yIHN5bWJvbGl6ZXMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UgcmVsYXRpdmUgdG8gdGhlCi0gKiBFYXN0LU5vcnRoLVVwIGNvb3JkaW5hdGVzIGZyYW1lLgotICoKLSAqIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1JPVEFUSU9OX1ZFQ1RPUiAgICAgICAgICAgICAgICAgKDExKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUk9UQVRJT05fVkVDVE9SICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5yb3RhdGlvbl92ZWN0b3IiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9SRUxBVElWRV9IVU1JRElUWQotICogcmVwb3J0aW5nLW1vZGU6IG9uLWNoYW5nZQotICoKLSAqIEEgcmVsYXRpdmUgaHVtaWRpdHkgc2Vuc29yIG1lYXN1cmVzIHJlbGF0aXZlIGFtYmllbnQgYWlyIGh1bWlkaXR5IGFuZAotICogcmV0dXJucyBhIHZhbHVlIGluIHBlcmNlbnQuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1JFTEFUSVZFX0hVTUlESVRZICAgICAgICAgICAgICAgKDEyKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUkVMQVRJVkVfSFVNSURJVFkgICAgICAgICJhbmRyb2lkLnNlbnNvci5yZWxhdGl2ZV9odW1pZGl0eSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0FNQklFTlRfVEVNUEVSQVRVUkUKLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiBUaGUgYW1iaWVudCAocm9vbSkgdGVtcGVyYXR1cmUgaW4gZGVncmVlIENlbHNpdXMuCi0gKgotICogQm90aCB3YWtlLXVwIGFuZCBub24gd2FrZS11cCB2ZXJzaW9ucyBhcmUgdXNlZnVsLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0FNQklFTlRfVEVNUEVSQVRVUkUgICAgICAgICAgICAgKDEzKQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSAgICAgICJhbmRyb2lkLnNlbnNvci5hbWJpZW50X3RlbXBlcmF0dXJlIgotCi0vKgotICogU0VOU09SX1RZUEVfTUFHTkVUSUNfRklFTERfVU5DQUxJQlJBVEVECi0gKiByZXBvcnRpbmctbW9kZTogY29udGludW91cwotICoKLSAqICBTaW1pbGFyIHRvIFNFTlNPUl9UWVBFX01BR05FVElDX0ZJRUxELCBidXQgdGhlIGhhcmQgaXJvbiBjYWxpYnJhdGlvbiBpcwotICogIHJlcG9ydGVkIHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBiZWluZyBpbmNsdWRlZCBpbiB0aGUgbWVhc3VyZW1lbnQuCi0gKgotICogIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiAgdmVyc2lvbiBpZiB0aGUgc3lzdGVtIHBvc3Nlc3NlcyBhIHdha2UgdXAgZmlmby4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9NQUdORVRJQ19GSUVMRF9VTkNBTElCUkFURUQgICAgICgxNCkKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX01BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCAiYW5kcm9pZC5zZW5zb3IubWFnbmV0aWNfZmllbGRfdW5jYWxpYnJhdGVkIgotCi0vKgotICogU0VOU09SX1RZUEVfR0FNRV9ST1RBVElPTl9WRUNUT1IKLSAqIHJlcG9ydGluZy1tb2RlOiBjb250aW51b3VzCi0gKgotICogIFNpbWlsYXIgdG8gU0VOU09SX1RZUEVfUk9UQVRJT05fVkVDVE9SLCBidXQgbm90IHVzaW5nIHRoZSBnZW9tYWduZXRpYwotICogIGZpZWxkLgotICoKLSAqICBJbXBsZW1lbnQgdGhlIG5vbi13YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IgYW5kIGltcGxlbWVudCB0aGUgd2FrZS11cAotICogIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR0FNRV9ST1RBVElPTl9WRUNUT1IgICAgICAgICAgICAoMTUpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HQU1FX1JPVEFUSU9OX1ZFQ1RPUiAgICAgImFuZHJvaWQuc2Vuc29yLmdhbWVfcm90YXRpb25fdmVjdG9yIgotCi0vKgotICogU0VOU09SX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRAotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgQWxsIHZhbHVlcyBhcmUgaW4gcmFkaWFucy9zZWNvbmQgYW5kIG1lYXN1cmUgdGhlIHJhdGUgb2Ygcm90YXRpb24KLSAqICBhcm91bmQgdGhlIFgsIFkgYW5kIFogYXhpcy4KLSAqCi0gKiAgSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqICB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0dZUk9TQ09QRV9VTkNBTElCUkFURUQgICAgICAgICAgKDE2KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRCAgICJhbmRyb2lkLnNlbnNvci5neXJvc2NvcGVfdW5jYWxpYnJhdGVkIgotCi0vKgotICogU0VOU09SX1RZUEVfU0lHTklGSUNBTlRfTU9USU9OCi0gKiByZXBvcnRpbmctbW9kZTogb25lLXNob3QKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgdHJpZ2dlcnMgYW4gZXZlbnQgZWFjaCB0aW1lIHNpZ25pZmljYW50IG1vdGlvbgotICogaXMgZGV0ZWN0ZWQgYW5kIGF1dG9tYXRpY2FsbHkgZGlzYWJsZXMgaXRzZWxmLgotICogRm9yIFNpZ25pZmljYW50IE1vdGlvbiBzZW5zb3IgdG8gYmUgdXNlZnVsLCBpdCBtdXN0IGJlIGRlZmluZWQgYXMgYQotICogd2FrZS11cCBzZW5zb3IuIChzZXQgU0VOU09SX0ZMQUdfV0FLRV9VUCkuIEltcGxlbWVudCB0aGUgd2FrZS11cCBzaWduaWZpY2FudCBtb3Rpb24KLSAqIHNlbnNvci4gQSBub24gd2FrZS11cCB2ZXJzaW9uIGlzIG5vdCB1c2VmdWwuCi0gKiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIHRvIHJldHVybiBpcyAxLjAuCi0gKi8KLQotI2RlZmluZSBTRU5TT1JfVFlQRV9TSUdOSUZJQ0FOVF9NT1RJT04gICAgICAgICAgICAgICgxNykKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NJR05JRklDQU5UX01PVElPTiAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc2lnbmlmaWNhbnRfbW90aW9uIgotCi0vKgotICogU0VOU09SX1RZUEVfU1RFUF9ERVRFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IHNwZWNpYWwKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgdHJpZ2dlcnMgYW4gZXZlbnQgZWFjaCB0aW1lIGEgc3RlcCBpcyB0YWtlbgotICogYnkgdGhlIHVzZXIuIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMCBhbmQgYW4gZXZlbnQKLSAqIGlzIGdlbmVyYXRlZCBmb3IgZWFjaCBzdGVwLgotICoKLSAqIEJvdGggd2FrZS11cCBhbmQgbm9uIHdha2UtdXAgdmVyc2lvbnMgYXJlIHVzZWZ1bC4KLSAqLwotCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1NURVBfREVURUNUT1IgICAgICAgICAgICAgICAgICAgKDE4KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU1RFUF9ERVRFQ1RPUiAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5zdGVwX2RldGVjdG9yIgotCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9TVEVQX0NPVU5URVIKLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHN0ZXBzIHRha2VuIGJ5IHRoZSB1c2VyIHNpbmNlCi0gKiB0aGUgbGFzdCByZWJvb3Qgd2hpbGUgYWN0aXZhdGVkLiBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgYXMgYSB1aW50NjRfdCBhbmQgaXMKLSAqIHJlc2V0IHRvIHplcm8gb25seSBvbiBhIHN5c3RlbSAvIGFuZHJvaWQgcmVib290LgotICoKLSAqIEltcGxlbWVudCB0aGUgbm9uLXdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvciBhbmQgaW1wbGVtZW50IHRoZSB3YWtlLXVwCi0gKiB2ZXJzaW9uIGlmIHRoZSBzeXN0ZW0gcG9zc2Vzc2VzIGEgd2FrZSB1cCBmaWZvLgotICovCi0KLSNkZWZpbmUgU0VOU09SX1RZUEVfU1RFUF9DT1VOVEVSICAgICAgICAgICAgICAgICAgICAoMTkpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9TVEVQX0NPVU5URVIgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnN0ZXBfY291bnRlciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0dFT01BR05FVElDX1JPVEFUSU9OX1ZFQ1RPUgotICogcmVwb3J0aW5nLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiAgU2ltaWxhciB0byBTRU5TT1JfVFlQRV9ST1RBVElPTl9WRUNUT1IsIGJ1dCB1c2luZyBhIG1hZ25ldG9tZXRlciBpbnN0ZWFkCi0gKiAgb2YgdXNpbmcgYSBneXJvc2NvcGUuCi0gKgotICogSW1wbGVtZW50IHRoZSBub24td2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yIGFuZCBpbXBsZW1lbnQgdGhlIHdha2UtdXAKLSAqIHZlcnNpb24gaWYgdGhlIHN5c3RlbSBwb3NzZXNzZXMgYSB3YWtlIHVwIGZpZm8uCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfR0VPTUFHTkVUSUNfUk9UQVRJT05fVkVDVE9SICAgICAoMjApCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HRU9NQUdORVRJQ19ST1RBVElPTl9WRUNUT1IgImFuZHJvaWQuc2Vuc29yLmdlb21hZ25ldGljX3JvdGF0aW9uX3ZlY3RvciIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0hFQVJUX1JBVEUKLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiAgQSBzZW5zb3Igb2YgdGhpcyB0eXBlIHJldHVybnMgdGhlIGN1cnJlbnQgaGVhcnQgcmF0ZS4KLSAqICBUaGUgZXZlbnRzIGNvbnRhaW4gdGhlIGN1cnJlbnQgaGVhcnQgcmF0ZSBpbiBiZWF0cyBwZXIgbWludXRlIChCUE0pIGFuZCB0aGUKLSAqICBzdGF0dXMgb2YgdGhlIHNlbnNvciBkdXJpbmcgdGhlIG1lYXN1cmVtZW50LiBTZWUgaGVhcnRfcmF0ZV9ldmVudF90IGZvciBtb3JlCi0gKiAgZGV0YWlscy4KLSAqCi0gKiAgQmVjYXVzZSB0aGlzIHNlbnNvciBpcyBvbi1jaGFuZ2UsIGV2ZW50cyBtdXN0IGJlIGdlbmVyYXRlZCB3aGVuIGFuZCBvbmx5Ci0gKiAgd2hlbiBoZWFydF9yYXRlLmJwbSBvciBoZWFydF9yYXRlLnN0YXR1cyBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QKLSAqICBldmVudC4gSW4gcGFydGljdWxhciwgdXBvbiB0aGUgZmlyc3QgYWN0aXZhdGlvbiwgdW5sZXNzIHRoZSBkZXZpY2UgaXMga25vd24KLSAqICB0byBub3QgYmUgb24gdGhlIGJvZHksIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGZpcnN0IGV2ZW50IG11c3QgYmUgc2V0IHRvCi0gKiAgU0VOU09SX1NUQVRVU19VTlJFTElBQkxFLiBUaGUgZXZlbnQgc2hvdWxkIGJlIGdlbmVyYXRlZCBubyBmYXN0ZXIgdGhhbiBldmVyeQotICogIHBlcmlvZF9ucyBwYXNzZWQgdG8gc2V0RGVsYXkoKSBvciB0byBiYXRjaCgpLgotICogIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgb24tY2hhbmdlIHJlcG9ydGluZyBtb2RlIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqICBzZW5zb3JfdC5yZXF1aXJlZFBlcm1pc3Npb24gbXVzdCBiZSBzZXQgdG8gU0VOU09SX1BFUk1JU1NJT05fQk9EWV9TRU5TT1JTLgotICoKLSAqICBCb3RoIHdha2UtdXAgYW5kIG5vbiB3YWtlLXVwIHZlcnNpb25zIGFyZSB1c2VmdWwuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfSEVBUlRfUkFURSAgICAgICAgICAgICAgICAgICAgICAoMjEpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9IRUFSVF9SQVRFICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmhlYXJ0X3JhdGUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9XQUtFX1VQX1RJTFRfREVURUNUT1IKLSAqIHJlcG9ydGluZy1tb2RlOiBzcGVjaWFsIChzZXREZWxheSBoYXMgbm8gaW1wYWN0KQotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSBnZW5lcmF0ZXMgYW4gZXZlbnQgZWFjaCB0aW1lIGEgdGlsdCBldmVudCBpcyBkZXRlY3RlZC4gQSB0aWx0IGV2ZW50Ci0gKiBzaG91bGQgYmUgZ2VuZXJhdGVkIGlmIHRoZSBkaXJlY3Rpb24gb2YgdGhlIDItc2Vjb25kcyB3aW5kb3cgYXZlcmFnZSBncmF2aXR5IGNoYW5nZWQgYnkgYXQgbGVhc3QKLSAqIDM1IGRlZ3JlZXMgc2luY2UgdGhlIGFjdGl2YXRpb24gb3IgdGhlIGxhc3QgdHJpZ2dlciBvZiB0aGUgc2Vuc29yLgotICogICAgIHJlZmVyZW5jZV9lc3RpbWF0ZWRfZ3Jhdml0eSA9IGF2ZXJhZ2Ugb2YgYWNjZWxlcm9tZXRlciBtZWFzdXJlbWVudHMgb3ZlciB0aGUgZmlyc3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBzZWNvbmQgYWZ0ZXIgYWN0aXZhdGlvbiBvciB0aGUgZXN0aW1hdGVkIGdyYXZpdHkgYXQgdGhlIGxhc3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci4KLSAqICAgICBjdXJyZW50X2VzdGltYXRlZF9ncmF2aXR5ID0gYXZlcmFnZSBvZiBhY2NlbGVyb21ldGVyIG1lYXN1cmVtZW50cyBvdmVyIHRoZSBsYXN0IDIgc2Vjb25kcy4KLSAqICAgICB0cmlnZ2VyIHdoZW4gYW5nbGUgKHJlZmVyZW5jZV9lc3RpbWF0ZWRfZ3Jhdml0eSwgY3VycmVudF9lc3RpbWF0ZWRfZ3Jhdml0eSkgPiAzNSBkZWdyZWVzCi0gKgotICogTGFyZ2UgYWNjZWxlcmF0aW9ucyB3aXRob3V0IGEgY2hhbmdlIGluIHBob25lIG9yaWVudGF0aW9uIHNob3VsZCBub3QgdHJpZ2dlciBhIHRpbHQgZXZlbnQuCi0gKiBGb3IgZXhhbXBsZSwgYSBzaGFycCB0dXJuIG9yIHN0cm9uZyBhY2NlbGVyYXRpb24gd2hpbGUgZHJpdmluZyBhIGNhciBzaG91bGQgbm90IHRyaWdnZXIgYSB0aWx0Ci0gKiBldmVudCwgZXZlbiB0aG91Z2ggdGhlIGFuZ2xlIG9mIHRoZSBhdmVyYWdlIGFjY2VsZXJhdGlvbiBtaWdodCB2YXJ5IGJ5IG1vcmUgdGhhbiAzNSBkZWdyZWVzLgotICoKLSAqIFR5cGljYWxseSwgdGhpcyBzZW5zb3IgaXMgaW1wbGVtZW50ZWQgd2l0aCB0aGUgaGVscCBvZiBvbmx5IGFuIGFjY2VsZXJvbWV0ZXIuIE90aGVyIHNlbnNvcnMgY2FuCi0gKiBiZSB1c2VkIGFzIHdlbGwgaWYgdGhleSBkbyBub3QgaW5jcmVhc2UgdGhlIHBvd2VyIGNvbnN1bXB0aW9uIHNpZ25pZmljYW50bHkuIFRoaXMgaXMgYSBsb3cgcG93ZXIKLSAqIHNlbnNvciB0aGF0IHNob3VsZCBhbGxvdyB0aGUgQVAgdG8gZ28gaW50byBzdXNwZW5kIG1vZGUuIERvIG5vdCBlbXVsYXRlIHRoaXMgc2Vuc29yIGluIHRoZSBIQUwuCi0gKiBMaWtlIG90aGVyIHdha2UgdXAgc2Vuc29ycywgdGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBhIGhvbGQgYSB3YWtlX2xvY2sgd2l0aCBhIHRpbWVvdXQgb2YgMjAwIG1zCi0gKiB3aGlsZSByZXBvcnRpbmcgdGhpcyBldmVudC4gVGhlIG9ubHkgYWxsb3dlZCByZXR1cm4gdmFsdWUgaXMgMS4wLgotICoKLSAqIEltcGxlbWVudCBvbmx5IHRoZSB3YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfVElMVF9ERVRFQ1RPUiAgICAgICAgICAgICAgICAgICAgICAoMjIpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9USUxUX0RFVEVDVE9SICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnRpbHRfZGV0ZWN0b3IiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9XQUtFX0dFU1RVUkUKLSAqIHJlcG9ydGluZy1tb2RlOiBvbmUtc2hvdAotICoKLSAqIEEgc2Vuc29yIGVuYWJsaW5nIHdha2luZyB1cCB0aGUgZGV2aWNlIGJhc2VkIG9uIGEgZGV2aWNlIHNwZWNpZmljIG1vdGlvbi4KLSAqCi0gKiBXaGVuIHRoaXMgc2Vuc29yIHRyaWdnZXJzLCB0aGUgZGV2aWNlIGJlaGF2ZXMgYXMgaWYgdGhlIHBvd2VyIGJ1dHRvbiB3YXMKLSAqIHByZXNzZWQsIHR1cm5pbmcgdGhlIHNjcmVlbiBvbi4gVGhpcyBiZWhhdmlvciAodHVybmluZyBvbiB0aGUgc2NyZWVuIHdoZW4KLSAqIHRoaXMgc2Vuc29yIHRyaWdnZXJzKSBtaWdodCBiZSBkZWFjdGl2YXRlZCBieSB0aGUgdXNlciBpbiB0aGUgZGV2aWNlCi0gKiBzZXR0aW5ncy4gQ2hhbmdlcyBpbiBzZXR0aW5ncyBkbyBub3QgaW1wYWN0IHRoZSBiZWhhdmlvciBvZiB0aGUgc2Vuc29yOgotICogb25seSB3aGV0aGVyIHRoZSBmcmFtZXdvcmsgdHVybnMgdGhlIHNjcmVlbiBvbiB3aGVuIGl0IHRyaWdnZXJzLgotICoKLSAqIFRoZSBhY3R1YWwgZ2VzdHVyZSB0byBiZSBkZXRlY3RlZCBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgY2FuIGJlIGNob3NlbiBieQotICogdGhlIG1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlLgotICogVGhpcyBzZW5zb3IgbXVzdCBiZSBsb3cgcG93ZXIsIGFzIGl0IGlzIGxpa2VseSB0byBiZSBhY3RpdmF0ZWQgMjQvNy4KLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqCi0gKiBJbXBsZW1lbnQgb25seSB0aGUgd2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX1dBS0VfR0VTVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjMpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9XQUtFX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iud2FrZV9nZXN0dXJlIgotCi0vKgotICogU0VOU09SX1RZUEVfR0xBTkNFX0dFU1RVUkUKLSAqIHJlcG9ydGluZy1tb2RlOiBvbmUtc2hvdAotICoKLSAqIEEgc2Vuc29yIGVuYWJsaW5nIGJyaWVmbHkgdHVybmluZyB0aGUgc2NyZWVuIG9uIHRvIGVuYWJsZSB0aGUgdXNlciB0bwotICogZ2xhbmNlIGNvbnRlbnQgb24gc2NyZWVuIGJhc2VkIG9uIGEgc3BlY2lmaWMgbW90aW9uLiAgVGhlIGRldmljZSBzaG91bGQKLSAqIHR1cm4gdGhlIHNjcmVlbiBvZmYgYWZ0ZXIgYSBmZXcgbW9tZW50cy4KLSAqCi0gKiBXaGVuIHRoaXMgc2Vuc29yIHRyaWdnZXJzLCB0aGUgZGV2aWNlIHR1cm5zIHRoZSBzY3JlZW4gb24gbW9tZW50YXJpbHkKLSAqIHRvIGFsbG93IHRoZSB1c2VyIHRvIGdsYW5jZSBub3RpZmljYXRpb25zIG9yIG90aGVyIGNvbnRlbnQgd2hpbGUgdGhlCi0gKiBkZXZpY2UgcmVtYWlucyBsb2NrZWQgaW4gYSBub24taW50ZXJhY3RpdmUgc3RhdGUgKGRvemluZykuIFRoaXMgYmVoYXZpb3IKLSAqIChicmllZmx5IHR1cm5pbmcgb24gdGhlIHNjcmVlbiB3aGVuIHRoaXMgc2Vuc29yIHRyaWdnZXJzKSBtaWdodCBiZSBkZWFjdGl2YXRlZAotICogYnkgdGhlIHVzZXIgaW4gdGhlIGRldmljZSBzZXR0aW5ncy4gQ2hhbmdlcyBpbiBzZXR0aW5ncyBkbyBub3QgaW1wYWN0IHRoZQotICogYmVoYXZpb3Igb2YgdGhlIHNlbnNvcjogb25seSB3aGV0aGVyIHRoZSBmcmFtZXdvcmsgYnJpZWZseSB0dXJucyB0aGUgc2NyZWVuIG9uCi0gKiB3aGVuIGl0IHRyaWdnZXJzLgotICoKLSAqIFRoZSBhY3R1YWwgZ2VzdHVyZSB0byBiZSBkZXRlY3RlZCBpcyBub3Qgc3BlY2lmaWVkLCBhbmQgY2FuIGJlIGNob3NlbiBieQotICogdGhlIG1hbnVmYWN0dXJlciBvZiB0aGUgZGV2aWNlLgotICogVGhpcyBzZW5zb3IgbXVzdCBiZSBsb3cgcG93ZXIsIGFzIGl0IGlzIGxpa2VseSB0byBiZSBhY3RpdmF0ZWQgMjQvNy4KLSAqIFRoZSBvbmx5IGFsbG93ZWQgdmFsdWUgdG8gcmV0dXJuIGlzIDEuMC4KLSAqCi0gKiBJbXBsZW1lbnQgb25seSB0aGUgd2FrZS11cCB2ZXJzaW9uIG9mIHRoaXMgc2Vuc29yLgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0dMQU5DRV9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjQpCi0jZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HTEFOQ0VfR0VTVFVSRSAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ2xhbmNlX2dlc3R1cmUiCi0KLS8qKgotICogU0VOU09SX1RZUEVfUElDS19VUF9HRVNUVVJFCi0gKiByZXBvcnRpbmctbW9kZTogb25lLXNob3QKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgdHJpZ2dlcnMgd2hlbiB0aGUgZGV2aWNlIGlzIHBpY2tlZCB1cCByZWdhcmRsZXNzIG9mIHdoZXJldmVyIGlzIHdhcwotICogYmVmb3JlIChkZXNrLCBwb2NrZXQsIGJhZykuIFRoZSBvbmx5IGFsbG93ZWQgcmV0dXJuIHZhbHVlIGlzIDEuMC4KLSAqIFRoaXMgc2Vuc29yIGRlLWFjdGl2YXRlcyBpdHNlbGYgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgdHJpZ2dlcnMuCi0gKgotICogSW1wbGVtZW50IG9ubHkgdGhlIHdha2UtdXAgdmVyc2lvbiBvZiB0aGlzIHNlbnNvci4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9QSUNLX1VQX0dFU1RVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDI1KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUElDS19VUF9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnBpY2tfdXBfZ2VzdHVyZSIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1dSSVNUX1RJTFRfR0VTVFVSRQotICogdHJpZ2dlci1tb2RlOiBzcGVjaWFsCi0gKiB3YWtlLXVwIHNlbnNvcjogeWVzCi0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIHRyaWdnZXJzIGFuIGV2ZW50IGVhY2ggdGltZSBhIHRpbHQgb2YgdGhlIHdyaXN0LXdvcm4KLSAqIGRldmljZSBpcyBkZXRlY3RlZC4KLSAqCi0gKiBUaGlzIHNlbnNvciBtdXN0IGJlIGxvdyBwb3dlciwgYXMgaXQgaXMgbGlrZWx5IHRvIGJlIGFjdGl2YXRlZCAyNC83LgotICogVGhlIG9ubHkgYWxsb3dlZCB2YWx1ZSB0byByZXR1cm4gaXMgMS4wLgotICoKLSAqIEltcGxlbWVudCBvbmx5IHRoZSB3YWtlLXVwIHZlcnNpb24gb2YgdGhpcyBzZW5zb3IuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICgyNikKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1dSSVNUX1RJTFRfR0VTVFVSRSAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci53cmlzdF90aWx0X2dlc3R1cmUiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9ERVZJQ0VfT1JJRU5UQVRJT04KLSAqIHJlcG9ydGluZy1tb2RlOiBvbi1jaGFuZ2UKLSAqCi0gKiBUaGUgY3VycmVudCBvcmllbnRhdGlvbiBvZiB0aGUgZGV2aWNlLiBUaGUgdmFsdWUgc2hvdWxkIGJlIHJlcG9ydGVkIGluIHRoZQotICogZmlyc3QgZWxlbWVudCBvZiB0aGUgJ2RhdGEnIG1lbWJlciB2YXJpYWJsZSBpbiBzZW5zb3JzX2V2ZW50X3QuIFRoZSBvbmx5Ci0gKiB2YWx1ZXMgdGhhdCBjYW4gYmUgcmVwb3J0ZWQgYXJlIChwbGVhc2UgcmVmZXIgdG8gQW5kcm9pZCBTZW5zb3IgQ29vcmRpbmF0ZQotICogU3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIFggYW5kIFkgYXhpcyBkaXJlY3Rpb24gd2l0aCByZXNwZWN0IHRvIGRlZmF1bHQKLSAqIG9yaWVudGF0aW9uKToKLSAqICAtIDA6IGRldmljZSBpcyBpbiBkZWZhdWx0IG9yaWVudGF0aW9uIChZIGF4aXMgaXMgdmVydGljYWwgYW5kIHBvaW50cyB1cCkKLSAqICAtIDE6IGRldmljZSBpcyByb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UgZnJvbSBkZWZhdWx0Ci0gKiAgICAgICBvcmllbnRhdGlvbiAoWCBheGlzIGlzIHZlcnRpY2FsIGFuZCBwb2ludHMgdXApCi0gKiAgLSAyOiBkZXZpY2UgaXMgcm90YXRlZCAxODAgZGVncmVlcyBmcm9tIGRlZmF1bHQgb3JpZW50YXRpb24gKFkgYXhpcyBpcwotICogICAgICAgdmVydGljYWwgYW5kIHBvaW50cyBkb3duKQotICogIC0gMzogZGV2aWNlIGlzIHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UgZnJvbSBkZWZhdWx0IG9yaWVudGF0aW9uIChYIGF4aXMKLSAqICAgICAgIGlzIHZlcnRpY2FsIGFuZCBwb2ludHMgZG93bikKLSAqCi0gKiBNb3ZpbmcgdGhlIGRldmljZSB0byBhbiBvcmllbnRhdGlvbiB3aGVyZSB0aGUgWiBheGlzIGlzIHZlcnRpY2FsIChlaXRoZXIgdXAKLSAqIG9yIGRvd24pIHNob3VsZCBub3QgY2F1c2UgYSBuZXcgZXZlbnQgdG8gYmUgcmVwb3J0ZWQuCi0gKgotICogVG8gaW1wcm92ZSB0aGUgdXNlciBleHBlcmllbmNlIG9mIHRoaXMgc2Vuc29yLCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbXBsZW1lbnQKLSAqIHNvbWUgcGh5c2ljYWwgKGkuZS4sIHJvdGF0aW9uIGFuZ2xlKSBhbmQgdGVtcG9yYWwgKGkuZS4sIGRlbGF5KSBoeXN0ZXJlc2lzLgotICogSW4gb3RoZXIgd29yZHMsIG1pbm9yIG9yIHRyYW5zaWVudCByb3RhdGlvbnMgc2hvdWxkIG5vdCBjYXVzZSBhIG5ldyBldmVudCB0bwotICogYmUgcmVwb3J0ZWQuCi0gKgotICogVGhpcyBzZW5zb3Igc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgd2l0aCB0aGUgaGVscCBvZiBhbiBhY2NlbGVyb21ldGVyLgotICogVGhpcyBpcyBhIGxvdyBwb3dlciBzZW5zb3IgdGhhdCBzaG91bGQgcmVkdWNlIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBvZiB0aGUKLSAqIEFQLiBEbyBub3QgZW11bGF0ZSB0aGlzIHNlbnNvciBpbiB0aGUgSEFMLgotICoKLSAqIEJvdGggd2FrZS11cCBhbmQgbm9uIHdha2UtdXAgdmVyc2lvbnMgYXJlIHVzZWZ1bC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9ERVZJQ0VfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICgyNykKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0RFVklDRV9PUklFTlRBVElPTiAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZGV2aWNlX29yaWVudGF0aW9uIgotCi0vKgotICogU0VOU09SX1RZUEVfUE9TRV82RE9GCi0gKiB0cmlnZ2VyLW1vZGU6IGNvbnRpbnVvdXMKLSAqCi0gKiBBIHNlbnNvciBvZiB0aGlzIHR5cGUgcmV0dXJucyB0aGUgcG9zZSBvZiB0aGUgZGV2aWNlLgotICogUG9zZSBvZiB0aGUgZGV2aWNlIGlzIGRlZmluZWQgYXMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBkZXZpY2UgZnJvbSBhCi0gKiBFYXJ0aCBDZW50ZXJlZCBFYXJ0aCBGaXhlZCBmcmFtZSBhbmQgdGhlIHRyYW5zbGF0aW9uIGZyb20gYW4gYXJiaXRyYXJ5Ci0gKiBwb2ludCBhdCBzdWJzY3JpcHRpb24uCi0gKgotICogVGhpcyBzZW5zb3IgY2FuIGJlIGhpZ2ggcG93ZXIuIEl0IGNhbiB1c2UgYW55IGFuZCBhbGwgb2YgdGhlIGZvbGxvd2luZwotICogICAgICAgICAgIC4gQWNjZWxlcm9tZXRlcgotICogICAgICAgICAgIC4gR3lyb3Njb3BlCi0gKiAgICAgICAgICAgLiBDYW1lcmEKLSAqICAgICAgICAgICAuIERlcHRoIENhbWVyYQotICoKLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9QT1NFXzZET0YgICAgICAgICAgICAgICAgICAgICAgICAgKDI4KQotI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUE9TRV82RE9GICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnBvc2VfNmRvZiIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX1NUQVRJT05BUllfREVURUNUCi0gKiB0cmlnZ2VyIG1vZGU6IG9uZSBzaG90Ci0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIHJldHVybnMgYW4gZXZlbnQgaWYgdGhlIGRldmljZSBpcyBzdGlsbC9zdGF0aW9uYXJ5IGZvcgotICogYSB3aGlsZS4gVGhlIHBlcmlvZCBvZiB0aW1lIHRvIG1vbml0b3IgZm9yIHN0YXRpbmFyaXR5IHNob3VsZCBiZSBncmVhdGVyIHRoYW4KLSAqIDUgc2Vjb25kcywgYW5kIGxlc3MgdGhhbiAxMCBzZWNvbmRzLgotICoKLSAqIFN0YXRpb25hcml0eSBoZXJlIHJlZmVycyB0byBhYnNvbHV0ZSBzdGF0aW9uYXJpdHkuIGVnOiBkZXZpY2Ugb24gZGVzay4KLSAqCi0gKiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIHRvIHJldHVybiBpcyAxLjAuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfU1RBVElPTkFSWV9ERVRFQ1QgICAgICAgICAgICAgICAgICAgKDI5KQorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUiAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYWNjZWxlcm9tZXRlciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX01BR05FVElDX0ZJRUxEICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLm1hZ25ldGljX2ZpZWxkIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iub3JpZW50YXRpb24iCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HWVJPU0NPUEUgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5neXJvc2NvcGUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5saWdodCIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnByZXNzdXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IudGVtcGVyYXR1cmUiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9QUk9YSU1JVFkgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5wcm94aW1pdHkiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HUkFWSVRZICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5ncmF2aXR5IgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTElORUFSX0FDQ0VMRVJBVElPTiAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IubGluZWFyX2FjY2VsZXJhdGlvbiIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1JPVEFUSU9OX1ZFQ1RPUiAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnJvdGF0aW9uX3ZlY3RvciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1JFTEFUSVZFX0hVTUlESVRZICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnJlbGF0aXZlX2h1bWlkaXR5IgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQU1CSUVOVF9URU1QRVJBVFVSRSAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYW1iaWVudF90ZW1wZXJhdHVyZSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX01BR05FVElDX0ZJRUxEX1VOQ0FMSUJSQVRFRCAgImFuZHJvaWQuc2Vuc29yLm1hZ25ldGljX2ZpZWxkX3VuY2FsaWJyYXRlZCIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dBTUVfUk9UQVRJT05fVkVDVE9SICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmdhbWVfcm90YXRpb25fdmVjdG9yIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfR1lST1NDT1BFX1VOQ0FMSUJSQVRFRCAgICAgICAiYW5kcm9pZC5zZW5zb3IuZ3lyb3Njb3BlX3VuY2FsaWJyYXRlZCIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NJR05JRklDQU5UX01PVElPTiAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnNpZ25pZmljYW50X21vdGlvbiIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1NURVBfREVURUNUT1IgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLnN0ZXBfZGV0ZWN0b3IiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9TVEVQX0NPVU5URVIgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5zdGVwX2NvdW50ZXIiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9HRU9NQUdORVRJQ19ST1RBVElPTl9WRUNUT1IgICJhbmRyb2lkLnNlbnNvci5nZW9tYWduZXRpY19yb3RhdGlvbl92ZWN0b3IiCisjZGVmaW5lIFNFTlNPUl9TVFJJTkdfVFlQRV9IRUFSVF9SQVRFICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlbnNvci5oZWFydF9yYXRlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfVElMVF9ERVRFQ1RPUiAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IudGlsdF9kZXRlY3RvciIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX1dBS0VfR0VTVFVSRSAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLndha2VfZ2VzdHVyZSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0dMQU5DRV9HRVNUVVJFICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmdsYW5jZV9nZXN0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUElDS19VUF9HRVNUVVJFICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucGlja191cF9nZXN0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfV1JJU1RfVElMVF9HRVNUVVJFICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iud3Jpc3RfdGlsdF9nZXN0dXJlIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfREVWSUNFX09SSUVOVEFUSU9OICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZGV2aWNlX29yaWVudGF0aW9uIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfUE9TRV82RE9GICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IucG9zZV82ZG9mIgogI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfU1RBVElPTkFSWV9ERVRFQ1QgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3Iuc3RhdGlvbmFyeV9kZXRlY3QiCi0KLS8qCi0gKiBTRU5TT1JfVFlQRV9NT1RJT05fREVURUNUCi0gKiB0cmlnZ2VyIG1vZGU6IG9uZSBzaG90Ci0gKgotICogQSBzZW5zb3Igb2YgdGhpcyB0eXBlIHJldHVybnMgYW4gZXZlbnQgaWYgdGhlIGRldmljZSBpcyBub3Qgc3RpbGwgZm9yCi0gKiBhIHdoaWxlLiBUaGUgcGVyaW9kIG9mIHRpbWUgdG8gbW9uaXRvciBmb3Igc3RhdGluYXJpdHkgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbgotICogNSBzZWNvbmRzLCBhbmQgbGVzcyB0aGFuIDEwIHNlY29uZHMuCi0gKgotICogTW90aW9uIGhlcmUgcmVmZXJzIHRvIGFueSBtZWNoYW5pc20gaW4gd2hpY2ggdGhlIGRldmljZSBpcyBjYXVzZXMgdG8gYmUKLSAqIG1vdmVkIGluIGl0cyBpbmVydGlhbCBmcmFtZS4gZWc6IFBpY2tpbiB1cCB0aGUgZGV2aWNlIGFuZCB3YWxraW5nIHdpdGggaXQKLSAqIHRvIGEgbmVhcmJ5IHJvb20gbWF5IHRyaWdnZXIgbW90aW9uIHdoZXJld2FzIGtlZXBpbmcgdGhlIGRldmljZSBvbiBhIHRhYmxlCi0gKiBvbiBhIHNtb290aCB0cmFpbiBtb3ZpbmcgYXQgY29uc3RhbnQgdmVsb2NpdHkgbWF5IG5vdCB0cmlnZ2VyIG1vdGlvbi4KLSAqCi0gKiBUaGUgb25seSBhbGxvd2VkIHZhbHVlIHRvIHJldHVybiBpcyAxLjAuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1RZUEVfTU9USU9OX0RFVEVDVCAgICAgICAgICAgICAgICAgICAgICAgKDMwKQogI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfTU9USU9OX0RFVEVDVCAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IubW90aW9uX2RldGVjdCIKLQotLyoKLSAqIFNFTlNPUl9UWVBFX0hFQVJUX0JFQVQKLSAqIHRyaWdnZXIgbW9kZTogY29udGludW91cwotICoKLSAqIEEgc2Vuc29yIG9mIHRoaXMgdHlwZSByZXR1cm5zIGFuIGV2ZW50IGV2ZXJ5dGltZSBhIGhlYXIgYmVhdCBwZWFrIGlzCi0gKiBkZXRlY3RlZC4KLSAqCi0gKiBQZWFrIGhlcmUgaWRlYWxseSBjb3JyZXNwb25kcyB0byB0aGUgcG9zaXRpdmUgcGVhayBpbiB0aGUgUVJTIGNvbXBsZXggb2YKLSAqIGFuZCBFQ0cgc2lnbmFsLgotICoKLSAqIFRoZSBzZW5zb3IgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG9wdGltaXplZCBmb3IgbGF0ZW5jeS4gQXMgYSBndWlkZSwgYQotICogbGF0ZW5jeSBvZiB1cCB0byAxMCBzZWNvbmRzIGlzIGFjY2VwdGFibGUuIEhvd2V2ZXIgdGhlIHRpbWVzdGFtcCBhdHRhY2hlZAotICogdG8gdGhlIGV2ZW50IHNob3VsZCBiZSBhY2N1cmF0ZSBhbmQgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIHRpbWUgdGhlIHBlYWsKLSAqIG9jY3VyZWQuCi0gKgotICogVGhlIHNlbnNvciBldmVudCBjb250YWlucyBhIHBhcmFtZXRlciBmb3IgdGhlIGNvbmZpZGVuY2UgaW4gdGhlIGRldGVjdGlvbgotICogb2YgdGhlIHBlYWsgd2hlcmUgMC4wIHJlcHJlc2VudCBubyBpbmZvcm1hdGlvbiBhdCBhbGwsIGFuZCAxLjAgcmVwcmVzZW50cwotICogY2VydGFpbnR5LgotICovCi0jZGVmaW5lIFNFTlNPUl9UWVBFX0hFQVJUX0JFQVQgICAgICAgICAgICAgICAgICAgICAgICAgICgzMSkKICNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0hFQVJUX0JFQVQgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmhlYXJ0X2JlYXQiCi0KLS8qKgotICogU0VOU09SX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQQotICogdHJpZ2dlci1tb2RlOiBzcGVjaWFsCi0gKiB3YWtlLXVwIHNlbnNvcjogeWVzCi0gKgotICogQSBzZW5zb3IgZXZlbnQgb2YgdGhpcyB0eXBlIGlzIHJlY2VpdmVkIHdoZW4gYSBkeW5hbWljIHNlbnNvciBpcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlCi0gKiBzeXN0ZW0uIEF0IG1vc3Qgb25lIHNlbnNvciBvZiB0aGlzIHR5cGUgY2FuIGJlIHByZXNlbnQgaW4gb25lIHNlbnNvciBIQUwgaW1wbGVtZW50YXRpb24gYW5kCi0gKiBwcmVzZW5jZSBvZiBhIHNlbnNvciBvZiB0aGlzIHR5cGUgaW4gc2Vuc29yIEhBTCBpbXBsZW1lbnRhdGlvbiBpbmRpY2F0ZXMgdGhhdCB0aGlzIHNlbnNvciBIQUwKLSAqIHN1cHBvcnRzIGR5bmFtaWMgc2Vuc29yIGZlYXR1cmUuIE9wZXJhdGlvbnMsIHN1Y2ggYXMgYmF0Y2gsIGFjdGl2YXRlIGFuZCBzZXREZWxheSwgdG8gdGhpcwotICogc3BlY2lhbCBwdXJwb3NlIHNlbnNvciBzaG91bGQgYmUgdHJlYXRlZCBhcyBuby1vcCBhbmQgcmV0dXJuIHN1Y2Nlc3NmdWwuCi0gKgotICogQSBkeW5hbWljIHNlbnNvciBjb25uZWN0aW9uIGluZGljYXRlcyBjb25uZWN0aW9uIG9mIGEgcGh5c2ljYWwgZGV2aWNlIG9yIGluc3RhbnRpYXRpb24gb2YgYQotICogdmlydHVhbCBzZW5zb3IgYmFja2VkIGJ5IGFsZ29yaXRobTsgYW5kIGEgZHluYW1pYyBzZW5zb3IgZGlzY29ubmVjdGlvbiBpbmRpY2F0ZXMgdGhlIHRoZQotICogb3Bwb3NpdGUuIEEgc2Vuc29yIGV2ZW50IG9mIFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEgdHlwZSBzaG91bGQgYmUgZGVsaXZlcmVkIHJlZ2FyZGxlc3MKLSAqIG9mIHRoZSBhY3RpdmF0aW9uIHN0YXR1cyBvZiB0aGUgc2Vuc29yIGluIHRoZSBldmVudCBvZiBkeW5hbWljIHNlbnNvciBjb25uZWN0aW9uIGFuZAotICogZGlzY29ubmVjdGlvbi4gSW4gdGhlIHNlbnNvciBldmVudCwgYmVzaWRlcyB0aGUgY29tbW9uIGRhdGEgZW50cmllcywgImR5bmFtaWNfc2Vuc29yX21ldGEiLCB3aGljaAotICogaW5jbHVkZXMgZmllbGRzIGZvciBjb25uZWN0aW9uIHN0YXR1cywgaGFuZGxlIG9mIHRoZSBzZW5zb3IgaW52b2x2ZWQsIHBvaW50ZXIgdG8gc2Vuc29yX3QKLSAqIHN0cnVjdHVyZSBhbmQgYSB1dWlkIGZpZWxkLCBzaG91bGQgYmUgcG9wdWxhdGVkLgotICoKLSAqIEF0IGEgZHluYW1pYyBzZW5zb3IgY29ubmVjdGlvbiBldmVudCwgZmllbGRzIG9mIHNlbnNvcl90IHN0cnVjdHVyZSByZWZlcmVuY2VkIGJ5IGEgcG9pbnRlciBpbgotICogZHluYW1pY19zZW5zb3JfbWV0YSBzaG91bGQgYmUgZmlsbGVkIGFzIGlmIGl0IHdhcyByZWd1bGFyIHNlbnNvcnMuIFNlbnNvciBIQUwgaXMgcmVzcG9uc2libGUgZm9yCi0gKiByZWNvdmVyeSBvZiBtZW1vcnkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBpcyBkeW5hbWljaWFsbHkgYWxsb2NhdGVkLiBIb3dldmVyLCB0aGUgdGhlIHBvaW50ZXIKLSAqIG11c3QgYmUgdmFsaWQgdW50aWwgdGhlIGZpcnN0IGFjdGl2YXRlIGNhbGwgdG8gdGhlIHNlbnNvciByZXBvcnRlZCBpbiB0aGlzIGNvbm5lY3Rpb24gZXZlbnQuIEF0IGEKLSAqIGR5bmFtaWMgc2Vuc29yIGRpc2Nvbm5lY3Rpb24sIHRoZSBzZW5zb3JfdCBwb2ludGVyIHNob3VsZCBiZSBOVUxMLgotICoKLSAqIFRoZSBzZW5zb3IgaGFuZGxlIGFzc2lnbmVkIHRvIGR5bmFtaWMgc2Vuc29ycyBzaG91bGQgbmV2ZXIgYmUgdGhlIHNhbWUgYXMgdGhhdCBvZiBhbnkgcmVndWxhcgotICogc3RhdGljIHNlbnNvcnMsIGFuZCBzaG91bGQgYmUgdW5pcXVlIHVudGlsIG5leHQgYm9vdC4gSW4gYW5vdGhlciB3b3JkLCBpZiBhIGhhbmRsZSBoIGlzIHVzZWQgZm9yCi0gKiBhIGR5bmFtaWMgc2Vuc29yIEEsIHRoYXQgc2FtZSBudW1iZXIgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSBzYW1lIGR5bmFtaWMgc2Vuc29yIEEgb3IgYW5vdGhlcgotICogZHluYW1pYyBzZW5zb3IgQiBldmVuIGFmdGVyIGRpc2Nvbm5lY3Rpb24gb2YgQSB1bnRpbCByZWJvb3QuCi0gKgotICogVGhlIFVVSUQgZmllbGQgd2lsbCBiZSB1c2VkIGZvciBpZGVudGlmeWluZyB0aGUgc2Vuc29yIGluIGFkZGl0aW9uIHRvIG5hbWUsIHZlbmRvciBhbmQgdmVyc2lvbgotICogYW5kIHR5cGUuIEZvciBwaHlzaWNhbCBzZW5zb3JzIG9mIHRoZSBzYW1lIG1vZGVsLCBhbGwgc2Vuc29ycyB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGluCi0gKiBzZW5zb3JfdCwgYnV0IHRoZSBVVUlEIHNob3VsZCBiZSB1bmlxdWUgYW5kIHBlcnNpc3RlbnQgZm9yIGVhY2ggaW5kaXZpZHVhbCB1bml0LiBBbiBhbGwgemVybyBVVUlECi0gKiBpbmRpY2F0ZXMgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpZmZlcmVudGlhdGUgaW5kaXZpZHVhbCBzZW5zb3IgdW5pdC4KLSAqCi0gKiBJdCBpcyByZWNvbW1lbmRlZCB0byBpbXBsZW1lbnQgdGhpcyB0eXBlIGFzIHdha2UgdXAgc2Vuc29yLgotICoKLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9EWU5BTUlDX1NFTlNPUl9NRVRBICAgICAgICAgICAgICAgICAgICAgICAgICgzMikKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZHluYW1pY19zZW5zb3JfbWV0YSIKLQotLyoqCi0gKiBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8KLSAqIHJlcG9ydGluZy1tb2RlOiBOL0EKLSAqCi0gKiBUaGlzIHNlbnNvciB0eXBlIGlzIGZvciBkZWxpdmVyaW5nIGFkZGl0aW9uYWwgc2Vuc29yIGluZm9ybWF0aW9uIGFzaWRlIGZyb20gc2Vuc29yIGV2ZW50IGRhdGEuCi0gKiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBpbmNsdWRlIHNlbnNvciBmcm9udC1lbmQgZ3JvdXAgZGVsYXksIGludGVybmFsIGNhbGlicmF0aW9uIHBhcmFtZXRlcnMsCi0gKiBub2lzZSBsZXZlbCBtZXRyaWNzLCBkZXZpY2UgaW50ZXJuYWwgdGVtcGVyYXR1cmUsIGV0Yy4KLSAqCi0gKiBUaGlzIHR5cGUgd2lsbCBuZXZlciBiaW5kIHRvIGEgc2Vuc29yLiBJbiBvdGhlciB3b3Jkcywgbm8gc2Vuc29yIGluIHRoZSBzZW5zb3IgbGlzdCBzaG91bGQgYmUgb2YKLSAqIHRoZSB0eXBlIFNFTlNPUl9UWVBFX0FERElUSU9OQUxfSU5GTy4gSWYgYSBzZW5zb3IgSEFMIHN1cHBvcnRzIHNlbnNvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiBmZWF0dXJlLCBpdCByZXBvcnRzIHNlbnNvcl9ldmVudF90IHdpdGggInNlbnNvciIgZmllbGQgc2V0IHRvIGhhbmRsZSBvZiB0aGUgcmVwb3J0aW5nIHNlbnNvciBhbmQKLSAqICJ0eXBlIiBmaWVsZCBzZXQgdG8gU0VOU09SX1RZUEVfQURESVRJT05BTF9JTkZPLiBEZWxpdmVyeSBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGV2ZW50cyBpcwotICogdHJpZ2dlcmVkIHVuZGVyIHR3byBjb25kaXRpb25zOiBhbiBlbmFibGUgYWN0aXZhdGUoKSBjYWxsIG9yIGEgZmx1c2goKSBjYWxsIHRvIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBzZW5zb3IuCi0gKgotICogQSBzaW5nbGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZXBvcnQgY29uc2lzdHMgb2YgbXVsdGlwbGUgZnJhbWVzLiBTZXF1ZW5jZXMgb2YgdGhlc2UgZnJhbWVzIGFyZQotICogb3JkZXJlZCB1c2luZyB0aW1lc3RhbXBzLCB3aGljaCBtZWFucyB0aGUgdGltZXN0YW1wcyBvZiBzZXF1ZW50aWFsIGZyYW1lcyBoYXZlIHRvIGJlIGF0IGxlYXN0IDEKLSAqIG5hbm9zZWNvbmQgYXBhcnQgZnJvbSBlYWNoIG90aGVyLiBFYWNoIGZyYW1lIGlzIGEgc2Vuc29yX2V2ZW50X3QgZGVsaXZlcmVkIHRocm91Z2ggdGhlIEhBTAotICogaW50ZXJmYWNlLCB3aXRoIHJlbGF0ZWQgZGF0YSBzdG9yZWQgaW4gdGhlICJhZGRpdGlvbmFsX2luZm8iIGZpZWxkLCB3aGljaCBpcyBvZiB0eXBlCi0gKiBhZGRpdGlvbmFsX2luZm9fZXZlbnRfdC4gIFRoZSAidHlwZSIgZmllbGQgb2YgYWRkaXRpb25hbF9pbmZvX2V2ZW50X3QgZGVub3RlcyB0aGUgbmF0dXJlIG9mIHRoZQotICogcGF5bG9hZCBkYXRhIChzZWUgYWRkaXRpb25hbF9pbmZvX3R5cGVfdCkuICBUaGUgInNlcmlhbCIgZmllbGQgaXMgdXNlZCB0byBrZWVwIHRoZSBzZXF1ZW5jZSBvZgotICogcGF5bG9hZCBkYXRhIHRoYXQgc3BhbnMgbXVsdGlwbGUgZnJhbWVzLiBUaGUgZmlyc3QgZnJhbWUgb2YgdGhlIGVudGlyZSByZXBvcnQgaXMgYWx3YXlzIG9mIHR5cGUKLSAqIEFJTkZPX0JFR0lOLCBhbmQgdGhlIGxhc3QgZnJhbWUgaXMgYWx3YXlzIEFJTkZPX0VORC4KLSAqCi0gKiBBbGwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcmFtZXMgaGF2ZSB0byBiZSBkZWxpdmVyZWQgYWZ0ZXIgZmx1c2ggY29tcGxldGUgZXZlbnQgaWYgZmx1c2goKSB3YXMKLSAqIHRyaWdnZXJpbmcgdGhlIHJlcG9ydC4KLSAqLwotI2RlZmluZSBTRU5TT1JfVFlQRV9BRERJVElPTkFMX0lORk8gICAgICAgICAgICAgICAgICAgICAgICgzMykKLSNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0FERElUSU9OQUxfSU5GTyAgICAgICAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuYWRkaXRpb25hbF9pbmZvIgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfRFlOQU1JQ19TRU5TT1JfTUVUQSAgICAgICAgICAiYW5kcm9pZC5zZW5zb3IuZHluYW1pY19zZW5zb3JfbWV0YSIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0FERElUSU9OQUxfSU5GTyAgICAgICAgICAgICAgImFuZHJvaWQuc2Vuc29yLmFkZGl0aW9uYWxfaW5mbyIKKyNkZWZpbmUgU0VOU09SX1NUUklOR19UWVBFX0xPV19MQVRFTkNZX09GRkJPRFlfREVURUNUICAgImFuZHJvaWQuc2Vuc29yLmxvd19sYXRlbmN5X29mZmJvZHlfZGV0ZWN0IgorI2RlZmluZSBTRU5TT1JfU1RSSU5HX1RZUEVfQUNDRUxFUk9NRVRFUl9VTkNBTElCUkFURUQgICAiYW5kcm9pZC5zZW5zb3IuYWNjZWxlcm9tZXRlcl91bmNhbGlicmF0ZWQiCiAKIC8qKgogICogVmFsdWVzIHJldHVybmVkIGJ5IHRoZSBhY2NlbGVyb21ldGVyIGluIHZhcmlvdXMgbG9jYXRpb25zIGluIHRoZSB1bml2ZXJzZS4KQEAgLTg3OSwxNiArMTk5LDYgQEAKIC8qKiBNaW5pbXVtIG1hZ25ldGljIGZpZWxkIG9uIEVhcnRoJ3Mgc3VyZmFjZSAqLwogI2RlZmluZSBNQUdORVRJQ19GSUVMRF9FQVJUSF9NSU4gICAgKDMwLjBmKQogCi0vKioKLSAqIFBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgc3RhdHVzIGZpZWxkIG9mIHNlbnNvciBldmVudHMuCi0gKi8KLSNkZWZpbmUgU0VOU09SX1NUQVRVU19OT19DT05UQUNUICAgICAgICAtMQotI2RlZmluZSBTRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUgICAgICAgIDAKLSNkZWZpbmUgU0VOU09SX1NUQVRVU19BQ0NVUkFDWV9MT1cgICAgICAxCi0jZGVmaW5lIFNFTlNPUl9TVEFUVVNfQUNDVVJBQ1lfTUVESVVNICAgMgotI2RlZmluZSBTRU5TT1JfU1RBVFVTX0FDQ1VSQUNZX0hJR0ggICAgIDMKLQotCiBzdHJ1Y3Qgc2Vuc29yX3Q7CiAKIC8qKgpAQCAtOTEzLDcgKzIyMyw3IEBACiB9IHNlbnNvcnNfdmVjX3Q7CiAKIC8qKgotICogdW5jYWxpYnJhdGVkIGd5cm9zY29wZSBhbmQgbWFnbmV0b21ldGVyIGV2ZW50IGRhdGEKKyAqIHVuY2FsaWJyYXRlZCBhY2NlbGVyb21ldGVyLCBneXJvc2NvcGUgYW5kIG1hZ25ldG9tZXRlciBldmVudCBkYXRhCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgdW5pb24gewpAQCAtOTgwLDc1ICsyOTAsNiBAQAogICAgIH07CiB9IGFkZGl0aW9uYWxfaW5mb19ldmVudF90OwogCi10eXBlZGVmIGVudW0gYWRkaXRpb25hbF9pbmZvX3R5cGUgewotICAgIC8vCi0gICAgQUlORk9fQkVHSU4gPSAweDAsICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmcmFtZXMKLSAgICBBSU5GT19FTkQgICA9IDB4MSwgICAgICAgICAgICAgICAgICAgICAgLy8gTWFya3MgdGhlIGVuZCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZyYW1lcwotICAgIC8vIEJhc2ljIGluZm9ybWF0aW9uCi0gICAgQUlORk9fVU5UUkFDS0VEX0RFTEFZID0gIDB4MTAwMDAsICAgICAgIC8vIEVzdGltYXRpb24gb2YgdGhlIGRlbGF5IHRoYXQgaXMgbm90IHRyYWNrZWQgYnkgc2Vuc29yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpbWVzdGFtcHMuIFRoaXMgaW5jbHVkZXMgZGVsYXkgaW50cm9kdWNlZCBieQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZW5zb3IgZnJvbnQtZW5kIGZpbHRlcmluZywgZGF0YSB0cmFuc3BvcnQsIGV0Yy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbMl06IGRlbGF5IGluIHNlY29uZHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBlc3RpbWF0ZWQgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICBBSU5GT19JTlRFUk5BTF9URU1QRVJBVFVSRSwgICAgICAgICAgICAgLy8gZmxvYXQ6IENlbHNpdXMgdGVtcGVyYXR1cmUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgQUlORk9fVkVDM19DQUxJQlJBVElPTiwgICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRocmVlIHJvd3Mgb2YgYSBob21vZ2VuZW91cyBtYXRyaXgsIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcHJlc2VudHMgY2FsaWJyYXRpb24gdG8gYSB0aHJlZS1lbGVtZW50IHZlY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByYXcgc2Vuc29yIHJlYWRpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0WzEyXTogM3g0IG1hdHJpeCBpbiByb3cgbWFqb3Igb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICBBSU5GT19TRU5TT1JfUExBQ0VNRU5ULCAgICAgICAgICAgICAgICAgLy8gTG9jYXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHNlbnNvciBlbGVtZW50IGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXZpY2UgZnJhbWU6IG9yaWdpbiBpcyB0aGUgZ2VvbWV0cmljIGNlbnRlciBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9iaWxlIGRldmljZSBzY3JlZW4gc3VyZmFjZTsgdGhlIGF4aXMgZGVmaW5pdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kcyB0byBBbmRyb2lkIHNlbnNvciBkZWZpbml0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbMTJdOiAzeDQgbWF0cml4IGluIHJvdyBtYWpvciBvcmRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX1NBTVBMSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFsyXTogcmF3IHNhbXBsZSBwZXJpb2QgaW4gc2Vjb25kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBzYW1wbGluZyBwZXJpb2QKLQotICAgIC8vIFNhbXBsaW5nIGNoYW5uZWwgbW9kZWxpbmcgaW5mb3JtYXRpb24KLSAgICBBSU5GT19DSEFOTkVMX05PSVNFID0gMHgyMDAwMCwgICAgICAgICAgLy8gaW50MzJfdDogbm9pc2UgdHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFtuXTogcGFyYW1ldGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0NIQU5ORUxfU0FNUExFUiwgICAgICAgICAgICAgICAgICAvLyBmbG9hdFszXTogc2FtcGxlIHBlcmlvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsZSBwZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBxdWFudGl6YXRpb24gdW5pdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0NIQU5ORUxfRklMVEVSLCAgICAgICAgICAgICAgICAgICAvLyBSZXByZXNlbnRzIGEgZmlsdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIFxzdW1faiBhX2ogeVtuLWpdID09IFxzdW1faSBiX2kgeFtuLWldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludDMyX3RbM106IG51bWJlciBvZiBmZWVkZm9yd2FyZCBjb2VmZmljaWVudHMsIE0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG51bWJlciBvZiBmZWVkYmFjayBjb2VmZmljaWVudHMsIE4sIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIEZJUiBmaWx0ZXIsIE49MS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgYml0IG1hc2sgdGhhdCByZXByZXNlbnRzIHdoaWNoIGVsZW1lbnQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICB3aGljaCB0aGUgZmlsdGVyIGlzIGFwcGxpZWQsIGJpdCAwID09IDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBtZWFucyB0aGlzIGZpbHRlciBhcHBsaWVzIHRvIHZlY3RvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGVsZW1lbnQgMC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXRbTStOXTogZmlsdGVyIGNvZWZmaWNpZW50cyAoYjAsIGIxLCAuLi4sIEJNLTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB0aGVuIChhMCwgYTEsIC4uLiwgYU4tMSksIGEwIGlzIGFsd2F5cyAxLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBNdWx0aXBsZSBmcmFtZXMgbWF5IGJlIG5lZWRlZCBmb3IgaGlnaGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG51bWJlciBvZiB0YXBzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0NIQU5ORUxfTElORUFSX1RSQU5TRk9STSwgICAgICAgICAvLyBpbnQzMl90WzJdOiBzaXplIGluIChyb3csIGNvbHVtbikgLi4uIDFzdCBmcmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFtuXTogbWF0cml4IGVsZW1lbnQgdmFsdWVzIGluIHJvdyBtYWpvciBvcmRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICBBSU5GT19DSEFOTkVMX05PTkxJTkVBUl9NQVAsICAgICAgICAgICAgLy8gaW50MzJfdFsyXTogZXh0cmFwb2xhdGUgbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGludGVycG9sYXRlIG1ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdFtuXTogbWFwcGluZyBrZXkgcG9pbnRzIGluIHBhaXJzLCAoaW4sIG91dCkuLi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIChtYXkgYmUgdXNlZCB0byBtb2RlbCBzYXR1cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgIEFJTkZPX0NIQU5ORUxfUkVTQU1QTEVSLCAgICAgICAgICAgICAgICAvLyBpbnQzMl90OiAgcmVzYW1wbGUgbWV0aG9kICgwLXRoIG9yZGVyLCAxc3Qgb3JkZXIuLi4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0WzFdOiByZXNhbXBsZSByYXRpbyAodXBzYW1wbGluZyBpZiA8IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIGRvd25zYW1wbGluZyBpZiA+IDEuMCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0KLSAgICAvLyBDdXN0b20gaW5mb3JtYXRpb24KLSAgICBBSU5GT19DVVNUT01fU1RBUlQgPSAgICAweDEwMDAwMDAwLCAgICAgLy8KLSAgICAvLyBEZWJ1Z2dpbmcKLSAgICBBSU5GT19ERUJVR0dJTkdfU1RBUlQgPSAweDQwMDAwMDAwLCAgICAgLy8KLX0gYWRkaXRpb25hbF9pbmZvX3R5cGVfdDsKLQogLyoqCiAgKiBVbmlvbiBvZiB0aGUgdmFyaW91cyB0eXBlcyBvZiBzZW5zb3IgZGF0YQogICogdGhhdCBjYW4gYmUgcmV0dXJuZWQuCkBAIC0xMTA2LDYgKzM0Nyw5IEBACiAgICAgICAgICAgICAvKiB1bmNhbGlicmF0ZWQgbWFnbmV0b21ldGVyIHZhbHVlcyBhcmUgaW4gbWljcm8tVGVzbGFzICovCiAgICAgICAgICAgICB1bmNhbGlicmF0ZWRfZXZlbnRfdCB1bmNhbGlicmF0ZWRfbWFnbmV0aWM7CiAKKyAgICAgICAgICAgIC8qIHVuY2FsaWJyYXRlZCBhY2NlbGVyb21ldGVyIHZhbHVlcyBhcmUgaW4gIG1ldGVyIHBlciBzZWNvbmQgcGVyIHNlY29uZCAobS9zXjIpICovCisgICAgICAgICAgICB1bmNhbGlicmF0ZWRfZXZlbnRfdCB1bmNhbGlicmF0ZWRfYWNjZWxlcm9tZXRlcjsKKwogICAgICAgICAgICAgLyogaGVhcnQgcmF0ZSBkYXRhIGNvbnRhaW5pbmcgdmFsdWUgaW4gYnBtIGFuZCBzdGF0dXMgKi8KICAgICAgICAgICAgIGhlYXJ0X3JhdGVfZXZlbnRfdCBoZWFydF9yYXRlOwogCkBAIC0xMjI4LDEzICs0NzIsMTQgQEAKICAgICAgKi8KICAgICB1aW50MzJfdCAgICAgICAgZmlmb01heEV2ZW50Q291bnQ7CiAKLSAgICAvKiB0eXBlIG9mIHRoaXMgc2Vuc29yIGFzIGEgc3RyaW5nLiBTZXQgdG8gY29ycmVzcG9uZGluZwotICAgICAqIFNFTlNPUl9TVFJJTkdfVFlQRV8qLgotICAgICAqIFdoZW4gZGVmaW5pbmcgYW4gT0VNIHNwZWNpZmljIHNlbnNvciBvciBzZW5zb3IgbWFudWZhY3R1cmVyIHNwZWNpZmljCi0gICAgICogc2Vuc29yLCB1c2UgeW91ciByZXNlcnZlIGRvbWFpbiBuYW1lIGFzIGEgcHJlZml4LgotICAgICAqIGV4OiBjb20uZ29vZ2xlLmdsYXNzLm9uaGVhZGRldGVjdG9yCi0gICAgICogRm9yIHNlbnNvcnMgb2Yga25vd24gdHlwZSwgdGhlIGFuZHJvaWQgZnJhbWV3b3JrIG1pZ2h0IG92ZXJ3cml0ZSB0aGlzCi0gICAgICogc3RyaW5nIGF1dG9tYXRpY2FsbHkuCisgICAgLyogdHlwZSBvZiB0aGlzIHNlbnNvciBhcyBhIHN0cmluZy4KKyAgICAgKgorICAgICAqIElmIHR5cGUgaXMgT0VNIHNwZWNpZmljIG9yIHNlbnNvciBtYW51ZmFjdHVyZXIgc3BlY2lmaWMgdHlwZQorICAgICAqICg+PVNFTlNPUl9UWVBFX0RFVklDRV9QUklWQVRFX0JBU0UpLCB0aGlzIHN0cmluZyBtdXN0IGJlIGRlZmluZWQgd2l0aCByZXNlcnZlZCBkb21haW4gb2YKKyAgICAgKiB2ZW5kb3IvT0VNIGFzIGEgcHJlZml4LCBlLmcuIGNvbS5nb29nbGUuZ2xhc3Mub25oZWFkZGV0ZWN0b3IKKyAgICAgKgorICAgICAqIEZvciBzZW5zb3JzIG9mIEFuZHJvaWQgZGVmaW5lZCB0eXBlcywgQW5kcm9pZCBmcmFtZXdvcmsgd2lsbCBvdmVycmlkZSB0aGlzIHZhbHVlLiBJdCBpcyBvayB0bworICAgICAqIGxlYXZlIGl0IHBvaW50aW5nIHRvIGFuIGVtcHR5IHN0cmluZy4KICAgICAgKi8KICAgICBjb25zdCBjaGFyKiAgICBzdHJpbmdUeXBlOwogCkBAIC0xMjgwLDYgKzUyNSwyMyBAQAogICAgIHZvaWQqICAgICAgICAgICByZXNlcnZlZFsyXTsKIH07CiAKKy8qKgorICogU2hhcmVkIG1lbW9yeSBpbmZvcm1hdGlvbiBmb3IgYSBkaXJlY3QgY2hhbm5lbAorICovCitzdHJ1Y3Qgc2Vuc29yc19kaXJlY3RfbWVtX3QgeworICAgIGludCB0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVudW0gU0VOU09SX0RJUkVDVF9NRU1fLi4uCisgICAgaW50IGZvcm1hdDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW51bSBTRU5TT1JfRElSRUNUX0ZNVF8uLi4KKyAgICBzaXplX3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uLCBpbiBieXRlcworICAgIGNvbnN0IHN0cnVjdCBuYXRpdmVfaGFuZGxlICpoYW5kbGU7IC8vIHNoYXJlZCBtZW1vcnkgaGFuZGxlLCB3aGljaCBpcyBpbnRlcnByZXRlZCBkaWZmZXJlbnRseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0eXBlCit9OworCisvKioKKyAqIERpcmVjdCBjaGFubmVsIHJlcG9ydCBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCBzZW5zb3JzX2RpcmVjdF9jZmdfdCB7CisgICAgaW50IHJhdGVfbGV2ZWw7ICAgICAgICAgICAgIC8vIGVudW0gU0VOU09SX0RJUkVDVF9SQVRFXy4uLgorfTsKIAogLyoKICAqIHNlbnNvcnNfcG9sbF9kZXZpY2VfdCBpcyB1c2VkIHdpdGggU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMF8xCkBAIC0xMzM2LDcgKzU5OCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgc2Vuc29yX2hhbmRsZSwgaW50NjRfdCBzYW1wbGluZ19wZXJpb2RfbnMpOwogCiAgICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygc2Vuc29yIGRhdGEuCisgICAgICAgICAgICAgKiBXcml0ZSBhbiBhcnJheSBvZiBzZW5zb3JfZXZlbnRfdCB0byBkYXRhLiBUaGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAgICAqIGF2YWlsYWJsZSBidWZmZXIgaXMgc3BlY2lmaWVkIGJ5IGNvdW50LiBSZXR1cm5zIG51bWJlciBvZgorICAgICAgICAgICAgICogdmFsaWQgc2Vuc29yX2V2ZW50X3QuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmxvY2sgaWYgdGhlcmUgaXMgbm8gc2Vuc29yIGV2ZW50CisgICAgICAgICAgICAgKiBhdmFpbGFibGUgd2hlbiBiZWluZyBjYWxsZWQuIFRodXMsIHJldHVybiB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlCisgICAgICAgICAgICAgKiBwb3NpdGl2ZS4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaW50ICgqcG9sbCkoc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LAogICAgICAgICAgICAgICAgICAgICBzZW5zb3JzX2V2ZW50X3QqIGRhdGEsIGludCBjb3VudCk7CkBAIC0xMzgxLDcgKzY0OSw2MSBAQAogICAgICAqLwogICAgIGludCAoKmluamVjdF9zZW5zb3JfZGF0YSkoc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSAqZGV2LCBjb25zdCBzZW5zb3JzX2V2ZW50X3QgKmRhdGEpOwogCi0gICAgdm9pZCAoKnJlc2VydmVkX3Byb2NzWzddKSh2b2lkKTsKKyAgICAvKgorICAgICAqIFJlZ2lzdGVyL3VucmVnaXN0ZXIgZGlyZWN0IHJlcG9ydCBjaGFubmVsLgorICAgICAqCisgICAgICogQSBIQUwgZGVjbGFyZXMgc3VwcG9ydCBmb3IgZGlyZWN0IHJlcG9ydCBieSBzZXR0aW5nIG5vbi1OVUxMIHZhbHVlcyBmb3IgYm90aAorICAgICAqIHJlZ2lzdGVyX2RpcmVjdF9jaGFubmVsIGFuZCBjb25maWdfZGlyZWN0X3JlcG9ydC4KKyAgICAgKgorICAgICAqIFRoaXMgZnVuY3Rpb24gaGFzIHR3byBvcGVyYXRpb24gbW9kZXM6CisgICAgICoKKyAgICAgKiBSZWdpc3RlcjogbWVtICE9IE5VTEwsIHJlZ2lzdGVyIGEgY2hhbm5lbCB1c2luZyBzdXBwbGllZCBzaGFyZWQgbWVtb3J5IGluZm9ybWF0aW9uLiBCeSB0aGUKKyAgICAgKiB0aW1lIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgc2Vuc29ycyBtdXN0IGZpbmlzaCBpbml0aWFsaXppbmcgc2hhcmVkIG1lbW9yeSBjb250ZW50CisgICAgICogKGZvcm1hdCBkZXBlbmRlbnQsIHNlZSBTRU5TT1JfRElSRUNUX0ZNVF8qKS4KKyAgICAgKiAgICAgIFBhcmFtZXRlcnM6CisgICAgICogICAgICAgICAgbWVtICAgICAgICAgICAgIHBvaW50cyB0byBhIHZhbGlkIHN0cnVjdCBzZW5zb3JzX2RpcmVjdF9tZW1fdC4KKyAgICAgKiAgICAgICAgICBjaGFubmVsX2hhbmRsZSAgaXMgaWdub3JlZC4KKyAgICAgKiAgICAgIFJldHVybiB2YWx1ZToKKyAgICAgKiAgICAgICAgICBBIGhhbmRsZSBvZiBjaGFubmVsICg+MCwgPElOVDMyX01BWCkgd2hlbiBzdWNjZXNzLCB3aGljaCBsYXRlciBjYW4gYmUgcmVmZXJyZWQgaW4KKyAgICAgKiAgICAgICAgICB1bnJlZ2lzdGVyIG9yIGNvbmZpZ19kaXJlY3RfcmVwb3J0IGNhbGwsIG9yIGVycm9yIGNvZGUgKDwwKSB3aGVuIGZhaWxlZAorICAgICAqIFVucmVnaXN0ZXI6IG1lbSA9PSBOVUxMLCB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNoYW5uZWwuCisgICAgICogICAgICBQYXJhbWV0ZXJzOgorICAgICAqICAgICAgICAgIG1lbSAgICAgICAgICAgICBzZXQgdG8gTlVMTAorICAgICAqICAgICAgICAgIGNoYW5uZWxfaGFuZGxlICBjb250YWlucyBoYW5kbGUgb2YgY2hhbm5lbCB0byBiZSB1bnJlZ2lzdGVyZWQKKyAgICAgKiAgICAgIFJldHVybiB2YWx1ZToKKyAgICAgKiAgICAgICAgICAwLCBldmVuIGlmIHRoZSBjaGFubmVsX2hhbmRsZSBpcyBpbnZhbGlkLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgYSBuby1vcC4KKyAgICAgKi8KKyAgICBpbnQgKCpyZWdpc3Rlcl9kaXJlY3RfY2hhbm5lbCkoc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSAqZGV2LAorICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNlbnNvcnNfZGlyZWN0X21lbV90KiBtZW0sIGludCBjaGFubmVsX2hhbmRsZSk7CisKKyAgICAvKgorICAgICAqIENvbmZpZ3VyZSBkaXJlY3Qgc2Vuc29yIGV2ZW50IHJlcG9ydCBpbiBkaXJlY3QgY2hhbm5lbC4KKyAgICAgKgorICAgICAqIFN0YXJ0LCBtb2RpZnkgcmF0ZSBvciBzdG9wIGRpcmVjdCByZXBvcnQgb2YgYSBzZW5zb3IgaW4gYSBjZXJ0YWluIGRpcmVjdCBjaGFubmVsLiBBIHNwZWNpYWwKKyAgICAgKiBjYXNlIGlzIHNldHRpbmcgc2Vuc29yIGhhbmRsZSAtMSB0byBzdG9wIG1lYW5zIHRvIHN0b3AgYWxsIGFjdGl2ZSBzZW5zb3IgcmVwb3J0IG9uIHRoZQorICAgICAqIGNoYW5uZWwgc3BlY2lmaWVkLgorICAgICAqCisgICAgICogQSBIQUwgZGVjbGFyZXMgc3VwcG9ydCBmb3IgZGlyZWN0IHJlcG9ydCBieSBzZXR0aW5nIG5vbi1OVUxMIHZhbHVlcyBmb3IgYm90aAorICAgICAqIHJlZ2lzdGVyX2RpcmVjdF9jaGFubmVsIGFuZCBjb25maWdfZGlyZWN0X3JlcG9ydC4KKyAgICAgKgorICAgICAqIFBhcmFtZXRlcnM6CisgICAgICogICAgICBzZW5zb3JfaGFuZGxlICAgc2Vuc29yIHRvIGJlIGNvbmZpZ3VyZWQuIFRoZSBzZW5zb3IgaGFzIHRvIHN1cHBvcnQgZGlyZWN0IHJlcG9ydAorICAgICAqICAgICAgICAgICAgICAgICAgICAgIG1vZGUgYnkgc2V0dGluZyBmbGFncyBvZiBzZW5zb3JfdC4gQWxzbywgZGlyZWN0IHJlcG9ydCBtb2RlIGlzIG9ubHkKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGZvciBjb250aW51b3VzIHJlcG9ydGluZyBtb2RlIHNlbnNvcnMuCisgICAgICogICAgICBjaGFubmVsX2hhbmRsZSAgY2hhbm5lbCBoYW5kbGUgdG8gYmUgY29uZmlndXJlZC4KKyAgICAgKiAgICAgIGNvbmZpZyAgICAgICAgICBkaXJlY3QgcmVwb3J0IHBhcmFtZXRlcnMsIHNlZSBzZW5zb3JfZGlyZWN0X2NmZ190LgorICAgICAqIFJldHVybiB2YWx1ZToKKyAgICAgKiAgICAgIC0gd2hlbiBzZW5zb3IgaXMgc3RhcnRlZCBvciBzZW5zb3IgcmF0ZSBsZXZlbCBpcyBjaGFuZ2VkOiByZXR1cm4gcG9zaXRpdmUgaWRlbnRpZmllciBvZgorICAgICAqICAgICAgICBzZW5zb3IgaW4gc3BlY2lmaWVkIGNoYW5uZWwgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIHJldHVybiBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICAgICAqICAgICAgLSB3aGVuIHNlbnNvciBpcyBzdG9wcGVkOiByZXR1cm4gMCBmb3Igc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIGZvciBmYWlsdXJlLgorICAgICAqLworICAgIGludCAoKmNvbmZpZ19kaXJlY3RfcmVwb3J0KShzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsCisgICAgICAgICAgICBpbnQgc2Vuc29yX2hhbmRsZSwgaW50IGNoYW5uZWxfaGFuZGxlLCBjb25zdCBzdHJ1Y3Qgc2Vuc29yc19kaXJlY3RfY2ZnX3QgKmNvbmZpZyk7CisKKyAgICAvKgorICAgICAqIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIHplcm8uCisgICAgICovCisgICAgdm9pZCAoKnJlc2VydmVkX3Byb2NzWzVdKSh2b2lkKTsKIAogfSBzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9oYXJkd2FyZS92ZWhpY2xlLmggYi9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGUuaAppbmRleCBhNTkwZmJkLi44YjI4ZTdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGUuaAorKysgYi9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGUuaApAQCAtODMsNyArODMsNiBAQAogCiAvKioKICAqIEludmFsaWQgcHJvcGVydHkgdmFsdWUgdXNlZCBmb3IgYXJndW1lbnQgd2hlcmUgaW52YWxpZCBwcm9wZXJ0eSBnaXZlcyBkaWZmZXJlbnQgcmVzdWx0LgotICogQHJhbmdlX3N0YXJ0CiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTlZBTElEICgweDApCiAKQEAgLTEyMiw3ICsxMjEsNyBAQAogICogQGRhdGFfbWVtYmVyIGluZm9fbW9kZWxfeWVhcgogICogQHVuaXQgVkVISUNMRV9VTklUX1RZUEVfWUVBUgogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5GT19NT0RFTF9ZRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAxMDMpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5GT19NT0RFTF9ZRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMTAzKQogCiAvKioKICAqIEZ1ZWwgY2FwYWNpdHkgb2YgdGhlIHZlaGljbGUKQEAgLTI1Myw3ICsyNTIsNyBAQAogCiAKIAotIC8vPT09PSBIVkFDIFByb3BlcnRpZXMgPT09PQorLy89PT09IEhWQUMgUHJvcGVydGllcyA9PT09CiAKIC8qKgogICogRmFuIHNwZWVkIHNldHRpbmcKQEAgLTI2MSw4ICsyNjAsNyBAQAogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy5mYW5fc3BlZWQKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCi0gKiBAZGF0YV9lbnVtIFRPRE8KKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGFsbG93X291dF9vZl9yYW5nZV92YWx1ZSA6IE9GRgogICovCiAjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19GQU5fU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTAwKQpAQCAtMjczLDggKzI3MSw4IEBACiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKICAqIEBkYXRhX21lbWJlciBodmFjLmZhbl9kaXJlY3Rpb24KLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCi0gKiBAZGF0YV9lbnVtIFRPRE8KKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQorICogQGRhdGFfZW51bSB2ZWhpY2xlX2h2YWNfZmFuX2RpcmVjdGlvbgogICogQGFsbG93X291dF9vZl9yYW5nZV92YWx1ZSA6IE9GRgogICovCiAjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19GQU5fRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTAxKQpAQCAtMjkzLDkgKzI5MSw5IEBACiAvKioKICAqIEhWQUMgY3VycmVudCB0ZW1wZXJhdHVyZS4KICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9GTE9BVAotICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0V8VkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX0NPTlRJTlVPVVMKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMudGVtcGVyYXR1cmVfY3VycmVudAogICovCiAjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19URU1QRVJBVFVSRV9DVVJSRU5UICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTAyKQpAQCAtMzAzLDkgKzMwMSw5IEBACiAvKioKICAqIEhWQUMsIHRhcmdldCB0ZW1wZXJhdHVyZSBzZXQuCiAgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfRkxPQVQKLSAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFfFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9DT05USU5VT1VTCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLnRlbXBlcmF0dXJlX3NldAogICogQGFsbG93X291dF9vZl9yYW5nZV92YWx1ZSA6IE1JTiAvIE1BWCAvIE9GRgogICovCkBAIC0zMTYsNyArMzE0LDcgQEAKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9XSU5ET1cKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfV0lORE9XCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy5kZWZyb3N0X29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0RFRlJPU1RFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDQpCkBAIC0zMjcsNyArMzI1LDcgQEAKICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQogICogQGNvbmZpZ19mbGFncyBTdXBwb3J0ZWQgem9uZXMKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLmFjX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0FDX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDUpCkBAIC0zMzcsNyArMzM1LDcgQEAKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCiAgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLm1heF9hY19vbgogICovCiAjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19NQVhfQUNfT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTA2KQpAQCAtMzQ3LDcgKzM0NSw3IEBACiAgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfQk9PTEVBTgogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCi0gKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy5tYXhfZGVmcm9zdF9vbgogICovCiAjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19NQVhfREVGUk9TVF9PTiAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTA3KQpAQCAtMzU3LDcgKzM1NSw3IEBACiAgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfQk9PTEVBTgogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCi0gKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCiAgKiBAZGF0YV9tZW1iZXIgaHZhYy5tYXhfcmVjaXJjX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1JFQ0lSQ19PTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MDgpCkBAIC0zNjcsMTIgKzM2NSw5NCBAQAogICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KICAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCiAgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQotICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQogICogQGRhdGFfbWVtYmVyIGh2YWMuZHVhbF9vbgogICovCiAjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19EVUFMX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTA5KQogCiAvKioKKyAqIE9uL29mZiBhdXRvbWF0aWMgbW9kZQorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0JPT0xFQU4KKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9aT05FCisgKiBAZGF0YV9tZW1iZXIgaHZhYy5hdXRvX29uCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX0FVVE9fT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEEpCisKKy8qKgorICogU2VhdCB0ZW1wZXJhdHVyZQorICoKKyAqIE5lZ2F0aXZlIHZhbHVlcyBpbmRpY2F0ZSBjb29saW5nLgorICogMCBpbmRpY2F0ZXMgb2ZmLgorICogUG9zaXRpdmUgdmFsdWVzIGluZGljYXRlIGhlYXRpbmcuCisgKgorICogU29tZSB2ZWhpY2xlcyBtYXkgaGF2ZSBtdWx0aXBsZSBsZXZlbHMgb2YgaGVhdGluZyBhbmQgY29vbGluZy4gVGhlIG1pbi9tYXgKKyAqIHJhbmdlIGRlZmluZXMgdGhlIGFsbG93YWJsZSByYW5nZSBhbmQgbnVtYmVyIG9mIHN0ZXBzIGluIGVhY2ggZGlyZWN0aW9uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19TRUFUX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTBCKQorCisvKioKKyAqIFNpZGUgTWlycm9yIEhlYXQKKyAqCisgKiBJbmNyZWFzZSB2YWx1ZXMgZGVub3RlIGhpZ2hlciBoZWF0aW5nIGxldmVscyBmb3Igc2lkZSBtaXJyb3JzLgorICogMCBpbmRpY2F0ZXMgaGVhdGluZyBpcyB0dXJuZWQgb2ZmLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0hWQUNfU0lERV9NSVJST1JfSEVBVCAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDUwQykKKworLyoqCisgKiBTdGVlcmluZyBXaGVlbCBUZW1wZXJhdHVyZQorICoKKyAqIFNldHMgdGhlIHRlbXBlcmF0dXJlIGZvciB0aGUgc3RlZXJpbmcgd2hlZWwKKyAqIFBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBoZWF0aW5nLgorICogTmVnYXRpdmUgdmFsdWUgaW5kaWNhdGVzIGNvb2xpbmcuCisgKiAwIGluZGljYXRlcyB0ZW1wcmVhdHVyZSBjb250cm9sIGlzIG9mZi4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1NURUVSSU5HX1dIRUVMX1RFTVAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MEQpCisKKy8qKgorICogVGVtcGVyYXR1cmUgdW5pdHMKKyAqCisgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGVtcGVyYXR1cmUgaXMgaW4gQ2Vsc2l1cywgRmFocmVuaGVpdCwgb3IgYSBkaWZmZXJlbnQgdW5pdC4KKyAqIFRoaXMgcGFyYW1ldGVyIGFmZmVjdHMgYWxsIEhWQUMgdGVtcGVyYXR1cmVzIGluIHRoZSBzeXN0ZW0uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUQKKyAqIEBkYXRhX2VudW0gdmVoaWNsZV91bml0X3R5cGUKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19URU1QRVJBVFVSRV9VTklUUyAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNTBFKQorCisvKioKKyAqIEFjdHVhbCBmYW4gc3BlZWQKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFECisgKiBAZGF0YV9tZW1iZXIgaHZhYy5mYW5fc3BlZWQKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQorICogQGFsbG93X291dF9vZl9yYW5nZV92YWx1ZSA6IE9GRgorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19BQ1RVQUxfRkFOX1NQRUVEX1JQTSAgICAgICAgICAgICAgICAgICgweDAwMDAwNTBGKQorCisKKy8qKgogICogUmVwcmVzZW50cyBwb3dlciBzdGF0ZSBmb3IgSFZBQy4gU29tZSBIVkFDIHByb3BlcnRpZXMgd2lsbCByZXF1aXJlIG1hdGNoaW5nIHBvd2VyIHRvIGJlIHR1cm5lZCBvbgogICogdG8gZ2V0IG91dCBvZiBPRkYgc3RhdGUuIEZvciBub24tem9uZWQgSFZBQyBwcm9wZXJ0aWVzLCBWRUhJQ0xFX0FMTF9aT05FIGNvcnJlc3BvbmRzIHRvCiAgKiBnbG9iYWwgcG93ZXIgc3RhdGUuCkBAIC0zODMsMTIgKzQ2MywzMSBAQAogICogQGNvbmZpZ19zdHJpbmcgbGlzdCBvZiBIVkFDIHByb3BlcnRpZXMgd2hvc2UgcG93ZXIgaXMgY29udHJvbGxlZCBieSB0aGlzIHByb3BlcnR5LiBGb3JtYXQgaXMKICAqICAgICAgICAgICAgICAgIGhleGEtZGVjaW1hbCBudW1iZXIgKDB4Li4uKSBzZXBhcmF0ZWQgYnkgY29tbWEgbGlrZSAiMHg1MDAsMHg1MDMiLiBBbGwgem9uZXMKICAqICAgICAgICAgICAgICAgIGRlZmluZWQgaW4gdGhlc2UgYWZmZWN0ZWQgcHJvcGVydGllcyBzaG91bGQgYmUgYXZhaWxhYmxlIGluIHRoZSBwcm9wZXJ0eS4KLSAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1pPTkUKICAqIEBkYXRhX21lbWJlciBodmFjLnBvd2VyX29uCiAgKi8KICNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9IVkFDX1BPV0VSX09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA1MTApCiAKIC8qKgorICogRmFuIFBvc2l0aW9ucyBBdmFpbGFibGUKKyAqCisgKiBUaGlzIGlzIGEgYml0IG1hc2sgb2YgZmFuIHBvc2l0aW9ucyBhdmFpbGFibGUgZm9yIHRoZSB6b25lLiAgRWFjaCBlbnRyeSBpbgorICogdmVoaWNsZV9odmFjX2Zhbl9kaXJlY3Rpb24gaXMgc2VsZWN0ZWQgYnkgYml0IHBvc2l0aW9uLiAgRm9yIGluc3RhbmNlLCBpZgorICogb25seSB0aGUgRkFOX0RJUkVDVElPTl9GQUNFICgweDEpIGFuZCBGQU5fRElSRUNUSU9OX0RFRlJPU1QgKDB4NCkgYXJlIGF2YWlsYWJsZSwKKyAqIHRoZW4gdGhpcyB2YWx1ZSBzaGFsbCBiZSBzZXQgdG8gMHgxMi4KKyAqCisgKiAweDEyID0gKDEgPDwgMSkgfCAoMSA8PCA0KQorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9TVEFUSUMKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFECisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfWk9ORQorICogQGFsbG93X291dF9vZl9yYW5nZV92YWx1ZSA6IE9GRgorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSFZBQ19GQU5fRElSRUNUSU9OX0FWQUlMQUJMRSAgICAgICAgICAgICAgICgweDAwMDAwNTExKQorCisvKioKICAqIE91dHNpZGUgdGVtcGVyYXR1cmUKICAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9GTE9BVAogICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0V8VkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX0NPTlRJTlVPVVMKQEAgLTM5Niw4ICs0OTUsNyBAQAogICogQGRhdGFfbWVtYmVyIG91dHNpZGVfdGVtcGVyYXR1cmUKICAqIEB1bml0IFZFSElDTEVfVU5JVF9UWVBFX0NFTENJVVMKICAqLwotCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRU5WX09VVFNJREVfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA3MDMpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRU5WX09VVFNJREVfVEVNUEVSQVRVUkUgICAgICAgICAgICAgICAgICAgICgweDAwMDAwNzAzKQogCiAKIC8qKgpAQCAtNDA4LDcgKzUwNiw3IEBACiAgKiBAZGF0YV9tZW1iZXIgY2FiaW5fdGVtcGVyYXR1cmUKICAqIEB1bml0IFZFSElDTEVfVU5JVF9UWVBFX0NFTENJVVMKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0VOVl9DQUJJTl9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICgweDAwMDAwNzA0KQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0VOVl9DQUJJTl9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDcwNCkKIAogCiAvKgpAQCAtNDM0LDcgKzUzMiw3IEBACiAgKiBAY29uZmlnX2ZsYWdzIE51bWJlciBvZiBwcmVzZXRzIHN1cHBvcnRlZAogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9SQURJT19QUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDgwMSkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9SQURJT19QUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA4MDEpCiAKIC8qKgogICogQ29uc3RhbnRzIHJlbGV2YW50IHRvIHJhZGlvLgpAQCAtNDkyLDcgKzU5MCwxMyBAQAogICogICAgICAgICAgICAgICAgICAgICAgIFZFSElDTEVfQVVESU9fRVhUX0ZPQ1VTX0NBUl9QRVJNQU5FTlQgd2hlbiBjYXIgc2lkZSBpcyBwbGF5aW5nIHNvbWV0aGluZwogICogICAgICAgICAgICAgICAgICAgICAgIHBlcm1hbmVudC4KICAqICAgICAgICAgICAgICAgICAgIExPU1NfVFJBTlNJRU5UOiBhbHdheXMgc2hvdWxkIGJlIFZFSElDTEVfQVVESU9fRVhUX0ZPQ1VTX0NBUl9UUkFOU0lFTlQKLSAqICAgaW50MzJfYXJyYXlbM106IHNob3VsZCBiZSB6ZXJvLgorICogICBpbnQzMl9hcnJheVszXTogY29udGV4dCByZXF1ZXN0ZWQgYnkgYW5kcm9pZCBzaWRlIHdoZW4gcmVzcG9uZGluZyB0byBmb2N1cyByZXF1ZXN0LgorICogICAgICAgICAgICAgICAgICAgV2hlbiBjYXIgc2lkZSBpcyB0YWtpbmcgZm9jdXMgYXdheSwgdGhpcyBzaG91bGQgYmUgemVyby4KKyAqCisgKiBBIGZvY3VzIHJlc3BvbnNlIHNob3VsZCBiZSBzZW50IHBlciBlYWNoIGZvY3VzIHJlcXVlc3QgZXZlbiBpZiB0aGVyZSBpcyBubyBjaGFuZ2UgaW4KKyAqIGZvY3VzIHN0YXRlLiBUaGlzIGNhbiBoYXBwZW4gaW4gY2FzZSBsaWtlIGZvY3VzIHJlcXVlc3Qgb25seSBpbnZvbHZpbmcgY29udGV4dCBjaGFuZ2UKKyAqIHdoZXJlIGFuZHJvaWQgc2lkZSBzdGlsbCBuZWVkcyBtYXRjaGluZyBmb2N1cyByZXNwb25zZSB0byBjb25maXJtIHRoYXQgYXVkaW8gbW9kdWxlCisgKiBoYXMgbWFkZSBuZWNlc3NhcnkgY2hhbmdlcy4KICAqCiAgKiBJZiBjYXIgZG9lcyBub3Qgc3VwcG9ydCBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0ZPQ1VTLCBmb2N1cyBpcyBhc3N1bWVkIHRvIGJlIGdyYW50ZWQgYWx3YXlzLgogICoKQEAgLTUwMSw3ICs2MDUsNyBAQAogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRk9DVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDApCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRk9DVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAwKQogCiBlbnVtIHZlaGljbGVfYXVkaW9fZm9jdXNfcmVxdWVzdCB7CiAgICAgVkVISUNMRV9BVURJT19GT0NVU19SRVFVRVNUX0dBSU4gPSAweDEsCkBAIC02MzgsMTMgKzc0MiwyMyBAQAogICAgIFZFSElDTEVfQVVESU9fQ09OVEVYVF9TWVNURU1fU09VTkRfRkxBRyAgICAgICAgICAgICAgID0gMHg0MDAsCiAgICAgLyoqIFJhZGlvIGlzIHBsYXllZCAqLwogICAgIFZFSElDTEVfQVVESU9fQ09OVEVYVF9SQURJT19GTEFHICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDAsCisgICAgLyoqIEV4dCBzb3VyY2UgaXMgcGxheWVkLiBUaGlzIGlzIGZvciB0YWdnaW5nIGdlbmVyaWMgZXh0IHNvdXJjZXMuICovCisgICAgVkVISUNMRV9BVURJT19DT05URVhUX0VYVF9TT1VSQ0VfRkxBRyAgICAgICAgICAgICAgICAgPSAweDEwMDAsCiB9OwogCiAvKioKICAqIFByb3BlcnR5IHRvIGNvbnRyb2wgYXVkaW8gdm9sdW1lIG9mIGVhY2ggYXVkaW8gY29udGV4dC4KICAqCisgKiB2ZWhpY2xlX3Byb3BfY29uZmlnX3QKKyAqICAgY29uZmlnX2FycmF5WzBdIDogYml0IGZsYWdzIG9mIGFsbCBzdXBwb3J0ZWQgYXVkaW8gY29udGV4dHMuIElmIHRoaXMgaXMgMCwKKyAqICAgICAgICAgICAgICAgICAgICAgYXVkaW8gdm9sdW1lIGlzIGNvbnRyb2xsZWQgcGVyIHBoeXNpY2FsIHN0cmVhbQorICogICBjb25maWdfYXJyYXlbMV0gOiBmbGFncyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fdm9sdW1lX2NhcGFiaWxpdHlfZmxhZyB0bworICogICAgICAgICAgICAgICAgICAgICByZXByZXNlbnQgYXVkaW8gbW9kdWxlJ3MgY2FwYWJpbGl0eS4KKyAqCiAgKiBEYXRhIHR5cGUgbG9va3MgbGlrZToKLSAqICAgaW50MzJfYXJyYXlbMF0gOiBzdHJlYW0gY29udGV4dCBhcyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fY29udGV4dF9mbGFnLgorICogICBpbnQzMl9hcnJheVswXSA6IHN0cmVhbSBjb250ZXh0IGFzIGRlZmluZWQgaW4gdmVoaWNsZV9hdWRpb19jb250ZXh0X2ZsYWcuIElmIG9ubHkgcGh5c2ljYWwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gaXMgc3VwcG9ydGVkIChjb25maWdfYXJyYXlbMF0gPT0gMCksIHRoaXMgd2lsbCByZXByZXNlbnQgcGh5c2ljYWwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gbnVtYmVyLgogICogICBpbnQzMl9hcnJheVsxXSA6IHZvbHVtZSBsZXZlbCwgdmFsaWQgcmFuZ2UgaXMgMCB0byBpbnQzMl9tYXhfdmFsdWUgZGVmaW5lZCBpbiBjb25maWcuCiAgKiAgICAgICAgICAgICAgICAgICAgMCB3aWxsIGJlIG11dGUgc3RhdGUuIGludDMyX21pbl92YWx1ZSBpbiBjb25maWcgc2hvdWxkIGJlIGFsd2F5cyAwLgogICogICBpbnQzMl9hcnJheVsyXSA6IE9uZSBvZiB2ZWhpY2xlX2F1ZGlvX3ZvbHVtZV9zdGF0ZS4KQEAgLTY1OCw3ICs3NzIsMzQgQEAKICAqIEBjb25maWdfZmxhZ3MgYWxsIGF1ZGlvIGNvbnRleHRzIHN1cHBvcnRlZC4KICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fVk9MVU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDEpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fVk9MVU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAxKQorCisKKy8qKgorICogZmxhZ3MgdG8gcmVwcmVzZW50IGNhcGFiaWxpdHkgb2YgYXVkaW8gdm9sdW1lIHByb3BlcnR5LgorICogdXNlZCBpbiBjb25maWdfYXJyYXlbMV0gb2YgdmVoaWNsZV9wcm9wX2NvbmZpZ190LgorICovCitlbnVtIHZlaGljbGVfYXVkaW9fdm9sdW1lX2NhcGFiaWxpdHlfZmxhZyB7CisgICAgLyoqCisgICAgICogRXh0ZXJuYWwgYXVkaW8gbW9kdWxlIG9yIHZlaGljbGUgaGFsIGhhcyBwZXJzaXN0ZW50IHN0b3JhZ2UKKyAgICAgKiB0byBrZWVwIHRoZSB2b2x1bWUgbGV2ZWwuIFRoaXMgc2hvdWxkIGJlIHNldCBvbmx5IHdoZW4gcGVyIGNvbnRleHQKKyAgICAgKiB2b2x1bWUgbGV2ZWwgaXMgc3VwcHJvdGVkLiBXaGVuIHRoaXMgaXMgc2V0LCBhdWRpbyB2b2x1bWUgbGV2ZWwgcGVyCisgICAgICogZWFjaCBjb250ZXh0IHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIHByb3BlcnR5IHdoZW4gc3lzdGVuIHN0YXJ0cyB1cC4KKyAgICAgKiBBbmQgZXh0ZXJuYWwgYXVkaW8gbW9kdWxlIGlzIGFsc28gZXhwZWN0ZWQgdG8gYWRqdXN0IHZvbHVtZSBhdXRvbWF0aWNhbGx5CisgICAgICogd2hlbmV2ZXIgdGhlcmUgaXMgYW4gYXVkaW8gY29udGV4dCBjaGFuZ2UuCisgICAgICogV2hlbiB0aGlzIGZsYWcgaXMgbm90IHNldCwgYW5kcm9pZCBzaWRlIHdpbGwgYXNzdW1lIHRoYXQgdGhlcmUgaXMgbm8KKyAgICAgKiBwZXJzaXN0ZW50IHN0b3JhZ2UgYW5kIHN0b3JlZCB2YWx1ZSBpbiBhbmRyb2lkIHNpZGUgd2lsbCBiZSB1c2VkIHRvCisgICAgICogaW5pdGlhbGl6ZSB0aGUgdm9sdW1lIGxldmVsLiBBbmQgYW5kcm9pZCBzaWRlIHdpbGwgc2V0IHZvbHVtZSBsZXZlbAorICAgICAqIG9mIGVhY2ggcGh5c2ljYWwgc3RyZWFtcyB3aGVuZXZlciB0aGVyZSBpcyBhbiBhdWRpbyBjb250ZXh0IGNoYW5nZS4KKyAgICAgKi8KKyAgICBWRUhJQ0xFX0FVRElPX1ZPTFVNRV9DQVBBQklMSVRZX1BFUlNJU1RFTlRfU1RPUkFHRSA9IDB4MSwKKyAgICAvKioKKyAgICAgKiBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHRoZSBIL1cgY2FuIHN1cHBvcnQgb25seSBzaW5nbGUgbWFzdGVyIHZvbHVtZSBmb3IgYWxsIHN0cmVhbXMuCisgICAgICogVGhlcmUgaXMgbm8gd2F5IHRvIHNldCB2b2x1bWUgbGV2ZWwgZGlmZmVyZW50bHkgcGVyIGVhY2ggc3RyZWFtIG9yIGNvbnRleHQuCisgICAgICovCisgICAgVkVISUNMRV9BVURJT19WT0xVTUVfQ0FQQUJJTElUWV9NQVNURVJfVk9MVU1FX09OTFkgPSAweDIsCit9OworCiAKIC8qKgogICogZW51bSB0byByZXByZXNlbnQgYXVkaW8gdm9sdW1lIHN0YXRlLgpAQCAtNjgzLDggKzgyNCwxOCBAQAogCiAvKioKICAqIFByb3BlcnR5IGZvciBoYW5kbGluZyB2b2x1bWUgbGltaXQgc2V0IGJ5IHVzZXIuIFRoaXMgbGltaXRzIG1heGltdW0gdm9sdW1lIHRoYXQgY2FuIGJlIHNldAotICogcGVyIGVhY2ggY29udGV4dC4KLSAqICAgaW50MzJfYXJyYXlbMF0gOiBzdHJlYW0gY29udGV4dCBhcyBkZWZpbmVkIGluIHZlaGljbGVfYXVkaW9fY29udGV4dF9mbGFnLgorICogcGVyIGVhY2ggY29udGV4dCBvciBwaHlzaWNhbCBzdHJlYW0uCisgKgorICogdmVoaWNsZV9wcm9wX2NvbmZpZ190CisgKiAgIGNvbmZpZ19hcnJheVswXSA6IGJpdCBmbGFncyBvZiBhbGwgc3VwcG9ydGVkIGF1ZGlvIGNvbnRleHRzLiBJZiB0aGlzIGlzIDAsCisgKiAgICAgICAgICAgICAgICAgICAgIGF1ZGlvIHZvbHVtZSBpcyBjb250cm9sbGVkIHBlciBwaHlzaWNhbCBzdHJlYW0KKyAqICAgY29uZmlnX2FycmF5WzFdIDogZmxhZ3MgZGVmaW5lZCBpbiB2ZWhpY2xlX2F1ZGlvX3ZvbHVtZV9jYXBhYmlsaXR5X2ZsYWcgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgcmVwcmVzZW50IGF1ZGlvIG1vZHVsZSdzIGNhcGFiaWxpdHkuCisgKgorICogRGF0YSB0eXBlIGxvb2tzIGxpa2U6CisgKiAgIGludDMyX2FycmF5WzBdIDogc3RyZWFtIGNvbnRleHQgYXMgZGVmaW5lZCBpbiB2ZWhpY2xlX2F1ZGlvX2NvbnRleHRfZmxhZy4gSWYgb25seSBwaHlzaWNhbAorICogICAgICAgICAgICAgICAgICAgIHN0cmVhbSBpcyBzdXBwb3J0ZWQgKGNvbmZpZ19hcnJheVswXSA9PSAwKSwgdGhpcyB3aWxsIHJlcHJlc2VudCBwaHlzaWNhbAorICogICAgICAgICAgICAgICAgICAgIHN0cmVhbSBudW1iZXIuCiAgKiAgIGludDMyX2FycmF5WzFdIDogbWF4aW11bSB2b2x1bWUgc2V0IHRvIHRoZSBzdHJlYW0uIElmIHRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uLCB0aGlzIHZhbHVlCiAgKiAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSAgYmlnZ2VyIHRoYW4gVkVISUNMRV9QUk9QRVJUWV9BVURJT19WT0xVTUUncyBtYXggdmFsdWUuCiAgKgpAQCAtNjk4LDcgKzg0OSw3IEBACiAgKiBAY29uZmlnX2ZsYWdzIGFsbCBhdWRpbyBjb250ZXh0cyBzdXBwb3J0ZWQuCiAgKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1ZPTFVNRV9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTAyKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX1ZPTFVNRV9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMikKIAogLyoqCiAgKiBJbmRleCBpbiBpbnQzMl9hcnJheSBmb3IgVkVISUNMRV9QUk9QRVJUWV9BVURJT19WT0xVTUVfTElNSVQgcHJvcGVydHkuCkBAIC03MjcsNyArODc4LDcgQEAKICAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQogICogQGRhdGFfbWVtYmVyIGludDMyX2FycmF5CiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19ST1VUSU5HX1BPTElDWSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDkwMykKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19ST1VUSU5HX1BPTElDWSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDMpCiAKIC8qKgogICogSW5kZXggaW4gaW50MzJfYXJyYXkgZm9yIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fUk9VVElOR19QT0xJQ1kgcHJvcGVydHkuCkBAIC03NTAsNyArOTAxLDcgQEAKICogICAgICAgICAgICAgICB0aGlzLgogKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fSFdfVkFSSUFOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDA5MDQpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fSFdfVkFSSUFOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTA0KQogCiAvKioKICAqIEZsYWcgdG8gYmUgdXNlZCBpbiB2ZWhpY2xlX3Byb3BfY29uZmlnLmNvbmZpZ19mbGFncyBmb3IgVkVISUNMRV9QUk9QRVJUWV9BVURJT19IV19WQVJJQU5ULgpAQCAtNzY2LDYgKzkxNyw3MCBAQAogICAgIFZFSElDTEVfQVVESU9fSFdfVkFSSUFOVF9GTEFHX0lOVEVSTkFMX1JBRElPX0ZMQUcgPSAweDEsCiB9OwogCisvKiogYXVkaW8gcm91dGluZyBmb3IgQU0vRk0uIFRoaXMgc2hvdWxkIGJlIGFsc28gYmUgdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgb25seSBvbmUKKyAgICByYWRpbyBtb2R1bGUgaW4gdGhlIHN5c3RlbS4gKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfUkFESU9fQU1fRk0gIlJBRElPX0FNX0ZNIgorLyoqIFNob3VsZCBiZSBhZGRlZCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBzZXBhcmF0ZSByYWRpbyBtb2R1bGUgd2l0aCBIRCBjYXBhYmlsaXR5LiAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9SQURJT19BTV9GTV9IRCAiUkFESU9fQU1fRk1fSEQiCisvKiogRm9yIGRpZ2lhbCBhdWRpbyBicm9hZGNhc3RpbmcgdHlwZSBvZiByYWRpbyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9SQURJT19EQUIgIlJBRElPX0RBQiIKKy8qKiBGb3Igc2F0ZWxsaXRlIHR5cGUgb2YgcmFkaW8gKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfUkFESU9fU0FURUxMSVRFICJSQURJT19TQVRFTExJVEUiCisvKiogRm9yIENEIG9yIERWRCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9DRF9EVkQgIkNEX0RWRCIKKy8qKiBGb3IgMXN0IGF1eGlsaWFyeSBpbnB1dCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9BVVhfSU4wICJBVVhfSU4wIgorLyoqIEZvciAybmQgYXV4aWxpYXJ5IGlucHV0ICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfU09VUkNFX0FVWF9JTjEgIkFVWF9JTjEiCisvKiogRm9yIG5hdmlnYXRpb24gZ3VpZGFuY2UgZnJvbSBvdXRzaWRlIGFuZHJvaWQgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfRVhUX05BVl9HVUlEQU5DRSAiRVhUX05BVl9HVUlEQU5DRSIKKy8qKiBGb3Igdm9pY2UgY29tbWFuZCBmcm9tIG91dHNpZGUgYW5kcm9pZCAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV9FWFRfVk9JQ0VfQ09NTUFORCAiRVhUX1ZPSUNFX0NPTU1BTkQiCisvKiogRm9yIHZvaWNlIGNhbGwgZnJvbSBvdXRzaWRlIGFuZHJvaWQgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfRVhUX1ZPSUNFX0NBTEwgIkVYVF9WT0lDRV9DQUxMIgorLyoqIEZvciBzYWZldHkgYWxlcnQgZnJvbSBvdXRzaWRlIGFuZHJvaWQgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9BVURJT19FWFRfUk9VVElOR19TT1VSQ0VfRVhUX1NBRkVUWV9BTEVSVCAiRVhUX1NBRkVUWV9BTEVSVCIKKworLyoqCisqIFByb3BlcnR5IHRvIHBhc3MgaGludCBvbiBleHRlcm5hbCBhdWRpbyByb3V0aW5nLiBXaGVuIGFuZHJvaWQgc2lkZSByZXF1ZXN0IGZvY3VzCisqIHdpdGggVkVISUNMRV9BVURJT19FWFRfRk9DVVNfQ0FSX1BMQVlfT05MWV9GTEFHIGZsYWcsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBzZXQKKyogYmVmb3JlIHNldHRpbmcgQVVESU9fRk9DVVMgcHJvcGVydHkgYXMgYSBoaW50IGZvciBleHRlcm5hbCBhdWRpbyBzb3VyY2Ugcm91dGluZy4KKyogTm90ZSB0aGF0IHNldHRpbmcgdGhpcyBwcm9wZXJ0eSBhbG9uZSBzaG91bGQgbm90IHRyaWdnZXIgYW55IGNoYW5nZS4KKyogQXVkaW8gcm91dGluZyBzaG91bGQgYmUgY2hhbmdlZCBvbmx5IHdoZW4gQVVESU9fRk9DVVMgcHJvcGVydHkgaXMgc2V0LiBOb3RlIHRoYXQKKyogdGhpcyBwcm9wZXJ0eSBhbGxvd3MgcGFzc2luZyBjdXN0b20gdmFsdWUgYXMgbG9uZyBhcyBpdCBpcyBkZWZpbmVkIGluIGNvbmZpZ19zdHJpbmcuCisqIFRoaXMgYWxsb3dzIHN1cHBvcnRpbmcgbm9uLXN0YW5kYXJkIHJvdXRpbmcgb3B0aW9ucyB0aHJvdWdoIHRoaXMgcHJvcGVydHkuCisqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBzZXBhcmF0ZSBuYW1lIHNwYWNlIGZvciBjdXN0b20gcHJvcGVydHkgdG8gcHJldmVudCBjb25mbGljdCBpbiBmdXR1cmUKKyogYW5kcm9pZCByZWxlYXNlcy4KKyogRW5hYmxpbmcgZWFjaCBleHRlcm5hbCByb3V0aW5nIG9wdGlvbiBpcyBkb25lIGJ5IGVuYWJsaW5nIGVhY2ggYml0IGZsYWcgZm9yIHRoZSByb3V0aW5nLgorKiBUaGlzIHByb3BlcnR5IGNhbiBzdXBwb3J0IHVwIHRvIDEyOCBleHRlcm5hbCByb3V0aW5ncy4KKyogVG8gZ2l2ZSBmdWxsIGZsZXhpYmlsaXR5LCB0aGVyZSBpcyBubyBzdGFuZGFyZCBkZWZpbml0aW9uIGZvciBlYWNoIGJpdCBmbGFnIGFuZAorKiBhc3NpZ25pbmcgZWFjaCBiaWcgZmxhZyB0byBzcGVjaWZpYyByb3V0aW5nIHR5cGUgaXMgZGVjaWRlZCBieSBjb25maWdfc3RyaW5nLgorKiBjb25maWdfc3RyaW5nIGhhcyBmb3JtYXQgb2YgZWFjaCBlbnRyeSBzZXBhcmF0ZWQgYnkgJywnCisqIGFuZCBlYWNoIGVudHJ5IGhhcyBmb3JtYXQgb2YgYml0RmxhZ1Bvc2l0b246dHlwZVN0cmluZ1s6cGh5c2ljYWxTdHJlYW1OdW1iZXJdLgorKiAgYml0RmxhZ1Bvc2l0aW9uOiByZXByZXNlbnRzIHdoaWNoIGJpZyBmbGFnIHdpbGwgYmUgc2V0IHRvIGVuYWJsZSB0aGlzIHJvdXRpbmcuIDAgbWVhbnMKKyogICAgTFNCIGluIGludDMyX2FycmF5WzBdLiAzMSB3aWxsIGJlIE1TQiBpbiBpbnQzMl9hcnJheVswXS4gMTI3IHdpbGwgTVNCIGluIGludDMyX2FycmF5WzNdLgorKiAgdHlwZVN0cmluZzogc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGV4dGVybmFsIHJvdXRpbmcuIFNvbWUgdHlwZXMgYXJlIGFscmVhZHkgZGVmaW5lZAorKiAgICBpbiBWRUhJQ0xFX1BST1BFUlRZX0FVRElPX0VYVF9ST1VUSU5HX1NPVVJDRV8qIGFuZCB1c2UgdGhlbSBmaXJzdCBiZWZvcmUgYWRkaW5nIHNvbWV0aGluZworKiAgICBjdXN0b20uIEFwcGxpY2F0aW9ucyB3aWxsIGZpbmQgZWFjaCByb3V0aW5nIHVzaW5nIHRoaXMgc3RyaW5nLgorKiAgcGh5c2ljYWxTdHJlYW1OdW1iZXI6IFRoaXMgcGFydCBpcyBvcHRpb25hbCBhbmQgcmVwcmVzZW50cyBwaHlzaWNhbCBzdHJlYW0gdG8gYW5kcm9pZAorKiAgICB3aGljaCB3aWxsIGJlIGRpc2FibGVkIHdoZW4gdGhpcyByb3V0aW5nIGlzIGVuYWJsZWQuIElmIG5vdCBzcGVjaWZpZWQsIHRoaXMgcm91dGluZworKiAgICBzaG91bGQgbm90IGFmZmVjdCBwaHlzaWNhbCBzdHJlYW1zIHRvIGFuZHJvaWQuCisqIEFzIGFuIGV4YW1wbGUsIGxldCdzIGFzc3VtZSBhIHN5c3RlbSB3aXRoIHR3byBwaHlzaWNhbCBzdHJlYW1zLCAwIGZvciBtZWRpYSBhbmQgMSBmb3IKKyogbmF2IGd1aWRhbmNlLiBBbmQgbGV0J3MgYXNzdW1lIGV4dGVybmFsIHJvdXRpbmcgb3B0aW9uIG9mIGFtIGZtIHJhZGlvLCBleHRlcm5hbCBuYXZpZ2F0aW9uCisqIGd1aWRhbmNlLCBzYXRlbGxpdGUgcmFkaW8sIGFuZCBvbmUgY3VzdG9tLiBMZXQncyBhc3N1bWUgdGhhdCByYWRpbyBhbmQgc2F0ZWxsaXRlIHJlcGxhY2VzCisqIHBoeXNpY2FsIHN0cmVhbSAwIGFuZCBleHRlcm5hbCBuYXZpZ2F0aW9uIHJlcGxhY2VzIHBoeXNpY2FsIHN0cmVhbSAxLiBBbmQgYml0IGZsYWcgd2lsbCBiZQorKiBhc3NpZ25lZCBpbiB0aGUgb3JkZXIgbGlzdGVkIGFib3ZlLiBUaGlzIGNvbmZpZ3VyYXRpb24gd2lsbCBsb29rIGxpa2UgdGhpcyBpbiBjb25maWdfc3RyaW5nOgorKiAgIjA6UkFESU9fQU1fRk06MCwxOkVYVF9OQVZfR1VJREFOQ0U6MSwyOlJBRElPX1NBVEVMTElURTowLDM6Y29tLnRlc3QuU09NRVRISU5HX0NVU1RPTSIKKyogV2hlbiBhbmRyb2lkIHJlcXVlc3RzIFJBRElPX0FNX0ZNLCBpbnQzMl9hcnJheVswXSB3aWxsIGJlIHNldCB0byAweDEuCisqIFdoZW4gYW5kcm9pZCByZXF1ZXN0cyBSQURJT19TQVRFTExJVEUgKyBFWFRfTkFWX0dVSURBTkNFLCBpbnQzMl9hcnJheVswXSB3aWxsIGJlIHNldCB0byAweDJ8MHg0LgorKgorKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UMzJfVkVDNAorKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisqIEBjb25maWdfc3RyaW5nIExpc3Qgb2YgYWxsIGF2YWlhYmxlIGV4dGVybmFsIHNvdXJjZSBpbiB0aGUgc3lzdGVtLgorKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKKyovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVVESU9fRVhUX1JPVVRJTkdfSElOVCAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwOTA1KQogCiAvKioKICAqIFByb3BlcnR5IHRvIGNvbnRyb2wgcG93ZXIgc3RhdGUgb2YgYXBwbGljYXRpb24gcHJvY2Vzc29yLgpAQCAtNzg4LDcgKzEwMDMsNyBAQAogICogQGNvbmZpZ19mbGFncyBBZGRpdGlvbmFsIGluZm8gb24gcG93ZXIgc3RhdGUuIFNob3VsZCB1c2UgdmVoaWNsZV9hcF9wb3dlcl9zdGF0ZV9jb25maWdfZmxhZy4KICAqIEBkYXRhX21lbWJlciBpbnQzMl9hcnJheQogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVBfUE9XRVJfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMDApCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQVBfUE9XRVJfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQTAwKQogCiBlbnVtIHZlaGljbGVfYXBfcG93ZXJfc3RhdGVfY29uZmlnX2ZsYWcgewogICAgIC8qKgpAQCAtODk1LDcgKzExMTAsNyBAQAogICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUR8VkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCiAgKiBAZGF0YV9tZW1iZXIgaW50MzIKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0RJU1BMQVlfQlJJR0hUTkVTUyAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQTAxKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0RJU1BMQVlfQlJJR0hUTkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEEwMSkKIAogCiAvKioKQEAgLTk5OSw3ICsxMjE0LDcgQEAKICAqIEBjb25maWdfYXJyYXkgMDp2ZWhpY2xlX2luc3R1bWVudF9jbHVzdGVyX3R5cGUgMTpodyB0eXBlCiAgKiBAZGF0YV9tZW1iZXIgaW50MzJfYXJyYXkKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOU1RSVU1FTlRfQ0xVU1RFUl9JTkZPICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMjApCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5TVFJVTUVOVF9DTFVTVEVSX0lORk8gICAgICAgICAgICAgICAgICAgICgweDAwMDAwQTIwKQogCiAvKioKICAqIFJlcHJlc2VudHMgaW5zdHJ1bWVudCBjbHVzdGVyIHR5cGUgYXZhaWxhYmxlIGluIHN5c3RlbQpAQCAtMTAxOSw2ICsxMjM0LDYyNCBAQAogfTsKIAogLyoqCisgKiBDdXJyZW50IGRhdGUgYW5kIHRpbWUsIGVuY29kZWQgYXMgVW5peCB0aW1lLgorICogVGhpcyB2YWx1ZSBkZW5vdGVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZSAxLzEvMTk3MC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UNjQKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fU0VUCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGludDY0X3ZhbHVlCisgKiBAdW5pdCBWRUhJQ0xFX1VOSVRfVFlQRV9TRUNTCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9VTklYX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMzApCisKKy8qKgorICogQ3VycmVudCB0aW1lIG9ubHkuCisgKiBTb21lIHZlaGljbGVzIG1heSBub3Qga2VlcCB0cmFjayBvZiBkYXRlLiAgVGhpcyBwcm9wZXJ0eSBvbmx5IGFmZmVjdHMgdGhlIGN1cnJlbnQgdGltZSwgaW4KKyAqIHNlY29uZHMgZHVyaW5nIHRoZSBkYXkuICBUaHVzLCB0aGUgbWF4IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyA4Niw0MDAgKDI0ICogNjAgKiA2MCkKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fU0VUCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKiBAdW5pdCBWRUhJQ0xFX1VOSVRfVFlQRV9TRUNTCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9DVVJSRU5UX1RJTUVfSU5fU0VDT05EUyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBBMzEpCisKKworLy89PT09IENhciBDYWJpbiBQcm9wZXJ0aWVzID09PT0KKy8qKgorICogTW9zdCBDYXIgQ2FiaW4gcHJvcGVydGllcyBoYXZlIGJvdGggYSBNT1ZFIGFuZCBQT1NJVElPTiBwYXJhbWV0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgKgorICogVGhlIE1PVkUgcGFyYW1ldGVyIHdpbGwgc3RhcnQgbW92aW5nIHRoZSBkZXZpY2UgaW4gdGhlIGluZGljYXRlZCBkaXJlY3Rpb24uICBUaGUgbWFnbml0dWRlCisgKiBpbmRpY2F0ZXMgdGhlIHJlbGF0aXZlIHNwZWVkLiAgRm9yIGluc3RhbmNlLCBzZXR0aW5nIHRoZSBXSU5ET1dfTU9WRSBwYXJhbWV0ZXIgdG8gKzEgd2lsbCByb2xsCisgKiB0aGUgd2luZG93IHVwLiAgU2V0dGluZyBpdCB0byArMiAoaWYgYXZhaWxhYmxlKSB3aWxsIHJvbGwgaXQgdXAgZmFzdGVyLgorICoKKyAqIFRoZSBQT1NJVElPTiBwYXJhbWV0ZXIgd2lsbCBtb3ZlIHRoZSBkZXZpY2UgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uICBGb3IgaW5zdGFuY2UsIGlmIHRoZQorICogV0lORE9XX1BPUyBoYXMgYSByYW5nZSBvZiAwLTEwMCwgdGhlbiBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDUwIHdpbGwgb3BlbiB0aGUgd2luZG93IGhhbGZ3YXkuCisgKiBEZXBlbmRpbmcgdXBvbiB0aGUgaW5pdGlhbCBwb3NpdGlvbiwgdGhlIHdpbmRvdyBtYXkgbW92ZSB1cCBvciBkb3duIHRvIHRoZSA1MCUgdmFsdWUuCisgKgorICogT0VNcyBtYXkgY2hvb3NlIHRvIGltcGxlbWVudCBvbmUgb3IgYm90aCBvZiB0aGUgTU9WRS9QT1NJVElPTiBwYXJhbWV0ZXJzIGRlcGVuZGluZyB1cG9uIHRoZQorICogY2FwYWJpbGl0eSBvZiB0aGUgaGFyZHdhcmUuCisgKi8KKworLy8gRG9vcnMKKy8qKgorICogRG9vciBwb3NpdGlvbgorICoKKyAqIFRoaXMgaXMgYW4gaW50ZWdlciBpbiBjYXNlIGEgZG9vciBtYXkgYmUgc2V0IHRvIGEgcGFydGljdWxhciBwb3NpdGlvbi4gIE1heAorICogdmFsdWUgaW5kaWNhdGVzIGZ1bGx5IG9wZW4sIG1pbiB2YWx1ZSAoMCkgaW5kaWNhdGVzIGZ1bGx5IGNsb3NlZC4KKyAqCisgKiBTb21lIHZlaGljbGVzIChtaW5pdmFucykgY2FuIG9wZW4gdGhlIGRvb3IgZWxlY3Ryb25pY2FsbHkuICBIZW5jZSwgdGhlIGFiaWxpdHkKKyAqIHRvIHdyaXRlIHRoaXMgcHJvcGVydHkuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUR8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9ET09SCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0RPT1JfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEIwMCkKKworLyoqCisgKiBEb29yIG1vdmUKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX0RPT1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfRE9PUl9NT1ZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjAxKQorCisKKy8qKgorICogRG9vciBsb2NrCisgKgorICogJ3RydWUnIGluZGljYXRlcyBkb29yIGlzIGxvY2tlZAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfRE9PUgorICogQGRhdGFfbWVtYmVyIGJvb2xlYW5fdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0RPT1JfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEIwMikKKworLy8gTWlycm9ycworLyoqCisgKiBNaXJyb3IgWiBQb3NpdGlvbgorICoKKyAqIFBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyB0aWx0IHVwd2FyZHMsIG5lZ2F0aXZlIHZhbHVlIGlzIGRvd253YXJkcworICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX01JUlJPUgorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfWl9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDApCisKKy8qKgorICogTWlycm9yIFogTW92ZQorICoKKyAqIFBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyB0aWx0IHVwd2FyZHMsIG5lZ2F0aXZlIHZhbHVlIGlzIGRvd253YXJkcworICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfTUlSUk9SCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX01JUlJPUl9aX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI0MSkKKworLyoqCisgKiBNaXJyb3IgWSBQb3NpdGlvbgorICoKKyAqIFBvc2l0aXZlIHZhbHVlIGluZGljYXRlIHRpbHQgcmlnaHQsIG5lZ2F0aXZlIHZhbHVlIGlzIGxlZnQKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9NSVJST1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfTUlSUk9SX1lfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjQyKQorCisvKioKKyAqIE1pcnJvciBZIE1vdmUKKyAqCisgKiBQb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZSB0aWx0IHJpZ2h0LCBuZWdhdGl2ZSB2YWx1ZSBpcyBsZWZ0CisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9NSVJST1IKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfTUlSUk9SX1lfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjQzKQorCisvKioKKyAqIE1pcnJvciBMb2NrCisgKgorICogVHJ1ZSBpbmRpY2F0ZXMgbWlycm9yIHBvc2l0aW9ucyBhcmUgbG9ja2VkIGFuZCBub3QgY2hhbmdlYWJsZQorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBib29sZWFuX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9NSVJST1JfTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCNDQpCisKKy8qKgorICogTWlycm9yIEZvbGQKKyAqCisgKiBUcnVlIGluZGljYXRlcyBtaXJyb3JzIGFyZSBmb2xkZWQKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfQk9PTEVBTgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgYm9vbGVhbl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfTUlSUk9SX0ZPTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjQ1KQorCisvLyBTZWF0cworLyoqCisgKiBTZWF0IG1lbW9yeSBzZWxlY3QKKyAqCisgKiBUaGlzIHBhcmFtZXRlciBzZWxlY3RzIHRoZSBtZW1vcnkgcHJlc2V0IHRvIHVzZSB0byBzZWxlY3QgdGhlIHNlYXQgcG9zaXRpb24uCisgKiBUaGUgbWluVmFsdWUgaXMgYWx3YXlzIDAsIGFuZCB0aGUgbWF4VmFsdWUgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNlYXQKKyAqIHBvc2l0aW9ucyBhdmFpbGFibGUuCisgKgorICogRm9yIGluc3RhbmNlLCBpZiB0aGUgZHJpdmVyJ3Mgc2VhdCBoYXMgMyBtZW1vcnkgcHJlc2V0cywgdGhlIG1heFZhbHVlIHdpbGwgYmUgMy4KKyAqIFdoZW4gdGhlIHVzZXIgd2FudHMgdG8gc2VsZWN0IGEgcHJlc2V0LCB0aGUgZGVzaXJlZCBwcmVzZXQgbnVtYmVyICgxLCAyLCBvciAzKQorICogaXMgc2V0LgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTUVNT1JZX1NFTEVDVCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4MCkKKworLyoqCisgKiBTZWF0IG1lbW9yeSBzZXQKKyAqCisgKiBUaGlzIHNldHRpbmcgYWxsb3dzIHRoZSB1c2VyIHRvIHNhdmUgdGhlIGN1cnJlbnQgc2VhdCBwb3NpdGlvbiBzZXR0aW5ncyBpbnRvCisgKiB0aGUgc2VsZWN0ZWQgcHJlc2V0IHNsb3QuICBUaGUgbWF4VmFsdWUgZm9yIGVhY2ggc2VhdCBwb3NpdGlvbiBzaGFsbCBtYXRjaAorICogdGhlIG1heFZhbHVlIGZvciBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTUVNT1JZX1NFTEVDVC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX01FTU9SWV9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODEpCisKKy8qKgorICogU2VhdGJlbHQgYnVja2xlZAorICoKKyAqIFRydWUgaW5kaWNhdGVzIGJlbHQgaXMgYnVja2xlZC4KKyAqCisgKiBXcml0ZSBhY2Nlc3MgaW5kaWNhdGVzIGF1dG9tYXRpYyBzZWF0IGJ1Y2tsaW5nIGNhcGFiaWxpdGllcy4gIFRoZXJlIGFyZSBubyBrbm93biBjYXJzIGF0IHRoaXMKKyAqIHRpbWUsIGJ1dCB5b3UgbmV2ZXIga25vdy4uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9CT09MRUFOCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQUR8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgYm9vbGVhbl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CRUxUX0JVQ0tMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjgyKQorCisvKioKKyAqIFNlYXRiZWx0IGhlaWdodCBwb3NpdGlvbgorICoKKyAqIEFkanVzdHMgdGhlIHNob3VsZGVyIGJlbHQgYW5jaG9yIHBvaW50LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBoaWdoZXN0IHBvc2l0aW9uCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIGxvd2VzdCBwb3NpdGlvbgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9CRUxUX0hFSUdIVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjgzKQorCisvKioKKyAqIFNlYXRiZWx0IGhlaWdodCBtb3ZlCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkVMVF9IRUlHSFRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4NCkKKworLyoqCisgKiBTZWF0IGZvcmUvYWZ0IHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgc2VhdCBwb3NpdGlvbiBmb3J3YXJkIChjbG9zZXIgdG8gc3RlZXJpbmcgd2hlZWwpIGFuZCBiYWNrd2FyZHMuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIGNsb3Nlc3QgdG8gd2hlZWwsIG1pbiB2YWx1ZSBpbmRpY2F0ZXMgbW9zdCByZWFyd2FyZAorICogcG9zaXRpb24uCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0ZPUkVfQUZUX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODUpCisKKy8qKgorICogU2VhdCBmb3JlL2FmdCBtb3ZlCisgKgorICogTW92ZXMgdGhlIHNlYXQgcG9zaXRpb24gZm9yd2FyZCBhbmQgYWZ0LgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0ZPUkVfQUZUX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODYpCisKKy8qKgorICogU2VhdCBiYWNrcmVzdCBhbmdsZSAxIHBvc2l0aW9uCisgKgorICogQmFja3Jlc3QgYW5nbGUgMSBpcyB0aGUgYWN0dWF0b3IgY2xvc2VzdCB0byB0aGUgYm90dG9tIG9mIHRoZSBzZWF0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBhbmdsaW5nIGZvcndhcmQgdG93YXJkcyB0aGUgc3RlZXJpbmcgd2hlZWwuCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIGZ1bGwgcmVjbGluZS4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkFDS1JFU1RfQU5HTEVfMV9QT1MgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4NykKKworLyoqCisgKiBTZWF0IGJhY2tyZXN0IGFuZ2xlIDEgbW92ZQorICoKKyAqIE1vdmVzIHRoZSBiYWNrcmVzdCBmb3J3YXJkIG9yIHJlY2xpbmUuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfQkFDS1JFU1RfQU5HTEVfMV9NT1ZFICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4OCkKKworLyoqCisgKiBTZWF0IGJhY2tyZXN0IGFuZ2xlIDIgcG9zaXRpb24KKyAqCisgKiBCYWNrcmVzdCBhbmdsZSAyIGlzIHRoZSBuZXh0IGFjdHVhdG9yIHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgc2VhdC4KKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgYW5nbGluZyBmb3J3YXJkIHRvd2FyZHMgdGhlIHN0ZWVyaW5nIHdoZWVsLgorICogTWluIHZhbHVlIGluZGljYXRlcyBmdWxsIHJlY2xpbmUuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0JBQ0tSRVNUX0FOR0xFXzJfUE9TICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCODkpCisKKy8qKgorICogU2VhdCBiYWNrcmVzdCBhbmdsZSAyIG1vdmUKKyAqCisgKiBNb3ZlcyB0aGUgYmFja3Jlc3QgZm9yd2FyZCBvciByZWNsaW5lLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0JBQ0tSRVNUX0FOR0xFXzJfTU9WRSAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOEEpCisKKy8qKgorICogU2VhdCBoZWlnaHQgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBzZWF0IGhlaWdodC4KKyAqIE1heCB2YWx1ZSBpbmRpY2F0ZXMgaGlnaGVzdCBwb3NpdGlvbi4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgbG93ZXN0IHBvc2l0aW9uLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUlHSFRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjhCKQorCisvKioKKyAqIFNlYXQgaGVpZ2h0IG1vdmUKKyAqCisgKiBNb3ZlcyB0aGUgc2VhdCBoZWlnaHQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVJR0hUX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4QykKKworLyoqCisgKiBTZWF0IGRlcHRoIHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgc2VhdCBkZXB0aCwgZGlzdGFuY2UgZnJvbSBiYWNrIHJlc3QgdG8gZnJvbnQgZWRnZSBvZiBzZWF0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBsb25nZXN0IGRlcHRoIHBvc2l0aW9uLgorICogTWluIHZhbHVlIGluZGljYXRlcyBzaG9ydGVzdCBwb3NpdGlvbi4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfREVQVEhfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI4RCkKKworLyoqCisgKiBTZWF0IGRlcHRoIG1vdmUKKyAqCisgKiBBZGp1c3RzIHRoZSBzZWF0IGRlcHRoLgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0RFUFRIX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOEUpCisKKy8qKgorICogU2VhdCB0aWx0IHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgc2VhdCB0aWx0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBmcm9udCBlZGdlIG9mIHNlYXQgaGlnaGVyIHRoYW4gYmFjayBlZGdlLgorICogTWluIHZhbHVlIGluZGljYXRlcyBmcm9udCBlZGdlIG9mIHNlYXQgbG93ZXIgdGhhbiBiYWNrIGVkZ2UuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX1RJTFRfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOEYpCisKKy8qKgorICogU2VhdCB0aWx0IG1vdmUKKyAqCisgKiBUaWx0cyB0aGUgc2VhdC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9USUxUX01PVkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQjkwKQorCisvKioKKyAqIEx1bWJlciBmb3JlL2FmdCBwb3NpdGlvbgorICoKKyAqIFB1c2hlcyB0aGUgbHVtYmFyIHN1cHBvcnQgZm9yd2FyZCBhbmQgYmFja3dhcmRzCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIG1vc3QgZm9yd2FyZCBwb3NpdGlvbi4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgbW9zdCByZWFyd2FyZCBwb3NpdGlvbi4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTFVNQkFSX0ZPUkVfQUZUX1BPUyAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5MSkKKworLyoqCisgKiBMdW1iYXIgZm9yZS9hZnQgbW92ZQorICoKKyAqIEFkanVzdHMgdGhlIGx1bWJhciBzdXBwb3J0LgorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0xVTUJBUl9GT1JFX0FGVF9NT1ZFICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTIpCisKKy8qKgorICogTHVtYmFyIHNpZGUgc3VwcG9ydCBwb3NpdGlvbgorICoKKyAqIFNldHMgdGhlIGFtb3VudCBvZiBsYXRlcmFsIGx1bWJhciBzdXBwb3J0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyB3aWRlc3QgbHVtYmFyIHNldHRpbmcgKGkuZS4gbGVhc3Qgc3VwcG9ydCkKKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgdGhpbm5lc3QgbHVtYmFyIHNldHRpbmcuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0xVTUJBUl9TSURFX1NVUFBPUlRfUE9TICAgICAgICAgICAgICAgKDB4MDAwMDBCOTMpCisKKy8qKgorICogTHVtYmFyIHNpZGUgc3VwcG9ydCBtb3ZlCisgKgorICogQWRqdXN0cyB0aGUgYW1vdW50IG9mIGxhdGVyYWwgbHVtYmFyIHN1cHBvcnQuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfTFVNQkFSX1NJREVfU1VQUE9SVF9NT1ZFICAgICAgICAgICAgICAoMHgwMDAwMEI5NCkKKworLyoqCisgKiBIZWFkcmVzdCBoZWlnaHQgcG9zaXRpb24KKyAqCisgKiBTZXRzIHRoZSBoZWFkcmVzdCBoZWlnaHQuCisgKiBNYXggdmFsdWUgaW5kaWNhdGVzIHRhbGxlc3Qgc2V0dGluZy4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgc2hvcnRlc3Qgc2V0dGluZy4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfSEVJR0hUX1BPUyAgICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5NSkKKworLyoqCisgKiBIZWFkcmVzdCBoZWlnaHQgbW92ZQorICoKKyAqIE1vdmVzIHRoZSBoZWFkcmVzdCB1cCBhbmQgZG93bi4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURXxWRUhJQ0xFX1BST1BfQUNDRVNTX1dSSVRFCisgKiBAem9uZV90eXBlIFZFSElDTEVfWk9ORV9UWVBFX1NFQVQKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfU0VBVF9IRUFEUkVTVF9IRUlHSFRfTU9WRSAgICAgICAgICAgICAgICAgICgweDAwMDAwQjk2KQorCisvKioKKyAqIEhlYWRyZXN0IGFuZ2xlIHBvc2l0aW9uCisgKgorICogU2V0cyB0aGUgYW5nbGUgb2YgdGhlIGhlYWRyZXN0LgorICogTWF4IHZhbHVlIGluZGljYXRlcyBtb3N0IHVwcmlnaHQgYW5nbGUuCisgKiBNaW4gdmFsdWUgaW5kaWNhdGVzIHNoYWxsb3dlc3QgaGVhZHJlc3QgYW5nbGUuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0hFQURSRVNUX0FOR0xFX1BPUyAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTcpCisKKy8qKgorICogSGVhZHJlc3QgYW5nbGUgbW92ZQorICoKKyAqIEFkanVzdHMgdGhlIGFuZ2xlIG9mIHRoZSBoZWFkcmVzdAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEB6b25lX3R5cGUgVkVISUNMRV9aT05FX1RZUEVfU0VBVAorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9TRUFUX0hFQURSRVNUX0FOR0xFX01PVkUgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCOTgpCisKKy8qKgorICogSGVhZHJlc3QgZm9yZS9hZnQgcG9zaXRpb24KKyAqCisgKiBBZGp1c3RzIHRoZSBoZWFkcmVzdCBmb3J3YXJkcyBhbmQgYmFja3dhcmRzLgorICogTWF4IHZhbHVlIGluZGljYXRlcyBwb3NpdGlvbiBjbG9zZXN0IHRvIGZyb250IG9mIGNhci4KKyAqIE1pbiB2YWx1ZSBpbmRpY2F0ZXMgcG9zaXRpb24gY2xvc2VzdCB0byByZWFyIG9mIGNhci4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfRk9SRV9BRlRfUE9TICAgICAgICAgICAgICAgICAoMHgwMDAwMEI5OSkKKworLyoqCisgKiBIZWFkcmVzdCBmb3JlL2FmdCBtb3ZlCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQHpvbmVfdHlwZSBWRUhJQ0xFX1pPTkVfVFlQRV9TRUFUCisgKiBAZGF0YV9tZW1iZXIgaW50MzJfdmFsdWUKKyAqLworI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX1NFQVRfSEVBRFJFU1RfRk9SRV9BRlRfTU9WRSAgICAgICAgICAgICAgICAoMHgwMDAwMEI5QSkKKworCisvLyBXaW5kb3dzCisvKioKKyAqIFdpbmRvdyBQb3NpdGlvbgorICoKKyAqIE1heCA9IHdpbmRvdyB1cCAvIGNsb3NlZAorICogTWluID0gd2luZG93IGRvd24gLyBvcGVuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfV0lORE9XX1BPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQkMwKQorCisvKioKKyAqIFdpbmRvdyBNb3ZlCisgKgorICogTWF4ID0gd2luZG93IHVwIC8gY2xvc2VkCisgKiBNaW4gPSB3aW5kb3cgZG93biAvIG9wZW4KKyAqIE1hZ25pdHVkZSBkZW5vdGVzIHJlbGF0aXZlIHNwZWVkLiAgSS5lLiArMiBpcyBmYXN0ZXIgdGhhbiArMSBpbiByYWlzaW5nIHRoZSB3aW5kb3cuCisgKgorICogQHZhbHVlX3R5cGUgVkVISUNMRV9WQUxVRV9UWVBFX1pPTkVEX0lOVDMyCisgKiBAY2hhbmdlX21vZGUgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX09OX0NIQU5HRQorICogQGFjY2VzcyBWRUhJQ0xFX1BST1BfQUNDRVNTX1JFQURfV1JJVEV8VkVISUNMRV9QUk9QX0FDQ0VTU19XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzEpCisKKy8qKgorICogV2luZG93IFZlbnQgUG9zaXRpb24KKyAqCisgKiBUaGlzIGZlYXR1cmUgaXMgdXNlZCB0byBjb250cm9sIHRoZSB2ZW50IGZlYXR1cmUgb24gYSBzdW5yb29mLgorICoKKyAqIE1heCA9IHZlbnQgb3BlbgorICogTWluID0gdmVudCBjbG9zZWQKKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfWk9ORURfSU5UMzIKKyAqIEBjaGFuZ2VfbW9kZSBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFCisgKiBAYWNjZXNzIFZFSElDTEVfUFJPUF9BQ0NFU1NfUkVBRF9XUklURQorICogQGRhdGFfbWVtYmVyIGludDMyX3ZhbHVlCisgKi8KKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9XSU5ET1dfVkVOVF9QT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDBCQzIpCisKKy8qKgorICogV2luZG93IFZlbnQgTW92ZQorICoKKyAqIFRoaXMgZmVhdHVyZSBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZlbnQgZmVhdHVyZSBvbiBhIHN1bnJvb2YuCisgKgorICogTWF4ID0gdmVudCBvcGVuCisgKiBNaW4gPSB2ZW50IGNsb3NlZAorICoKKyAqIEB2YWx1ZV90eXBlIFZFSElDTEVfVkFMVUVfVFlQRV9aT05FRF9JTlQzMgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFfFZFSElDTEVfUFJPUF9BQ0NFU1NfV1JJVEUKKyAqIEBkYXRhX21lbWJlciBpbnQzMl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfV0lORE9XX1ZFTlRfTU9WRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQkMzKQorCisvKioKKyAqIFdpbmRvdyBMb2NrCisgKgorICogVHJ1ZSBpbmRpY2F0ZXMgd2luZG93cyBhcmUgbG9ja2VkIGFuZCBjYW4ndCBiZSBtb3ZlZC4KKyAqCisgKiBAdmFsdWVfdHlwZSBWRUhJQ0xFX1ZBTFVFX1RZUEVfQk9PTEVBTgorICogQGNoYW5nZV9tb2RlIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9PTl9DSEFOR0UKKyAqIEBhY2Nlc3MgVkVISUNMRV9QUk9QX0FDQ0VTU19SRUFEX1dSSVRFCisgKiBAZGF0YV9tZW1iZXIgYm9vbGVhbl92YWx1ZQorICovCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfV0lORE9XX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwQkM0KQorCisKKworLyoqCiAgKiAgSC9XIHNwZWNpZmljLCBub24tc3RhbmRhcmQgcHJvcGVydHkgY2FuIGJlIGFkZGVkIGFzIG5lY2Vzc2FyeS4gU3VjaCBwcm9wZXJ0eSBzaG91bGQgdXNlCiAgKiAgcHJvcGVydHkgbnVtYmVyIGluIHJhbmdlIG9mIFtWRUhJQ0xFX1BST1BFUlRZX0NVU1RPTV9TVEFSVCwgVkVISUNMRV9QUk9QRVJUWV9DVVNUT01fRU5EXS4KICAqICBEZWZpbml0aW9uIG9mIHByb3BlcnR5IGluIHRoaXMgcmFuZ2UgaXMgY29tcGxldGVseSB1cCB0byBlYWNoIEhBTCBpbXBsZW1lbnRhdGlvbi4KQEAgLTEwMjcsMjAgKzE4NjAsMjAgQEAKICAqICBpbmNsdWRlIGNvbmZpZ19zdHJpbmcgb2YgImNvbS5YWVouc29tZV9mdXJ0aGVyX2RldGFpbHMiLgogICogIEByYW5nZV9zdGFydAogICovCi0jZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQ1VTVE9NX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAoMHg3MDAwMDAwMCkKKyNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9DVVNUT01fU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzAwMDAwMDApCiAvKiogQHJhbmdlX2VuZCAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0NVU1RPTV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzNmZmZmZmYpCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfQ1VTVE9NX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDczZmZmZmZmKQogCiAvKioKICAqIFByb3BlcnR5IHJhbmdlIGFsbG9jYXRlZCBmb3Igc3lzdGVtJ3MgaW50ZXJuYWwgdXNhZ2UgbGlrZSB0ZXN0aW5nLiBIQUwgc2hvdWxkIG5ldmVyIGRlY2xhcmUKICAqIHByb3BlcnR5IGluIHRoaXMgcmFuZ2UuCiAgKiBAcmFuZ2Vfc3RhcnQKICAqLwotI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOVEVSTkFMX1NUQVJUICAgICAgICAgICAgICAgICAgICAgKDB4NzQwMDAwMDApCisjZGVmaW5lIFZFSElDTEVfUFJPUEVSVFlfSU5URVJOQUxfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDc0MDAwMDAwKQogLyoqCiAgKiBAcmFuZ2VfZW5kCiAgKi8KLSNkZWZpbmUgVkVISUNMRV9QUk9QRVJUWV9JTlRFUk5BTF9FTkQgICAgICAgICAgICAgICAgICAgICAgICgweDc0ZmZmZmZmKQorI2RlZmluZSBWRUhJQ0xFX1BST1BFUlRZX0lOVEVSTkFMX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3NGZmZmZmZikKIAogLyoqCiAgKiBWYWx1ZSB0eXBlcyBmb3IgdmFyaW91cyBwcm9wZXJ0aWVzLgpAQCAtMTA4NiwxMiArMTkxOSwxNCBAQAogICAgIFZFSElDTEVfVU5JVF9UWVBFX01FVEVSICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMjEsCiAgICAgVkVISUNMRV9VTklUX1RZUEVfS0lMT01FVEVSICAgICAgICAgICAgID0gMHgwMDAwMDAyMywKICAgICAvLyB0ZW1wZXJhdHVyZQotICAgIFZFSElDTEVfVU5JVF9UWVBFX0NFTENJVVMgICAgICAgICAgICAgICA9IDB4MDAwMDAwMzAsCisgICAgVkVISUNMRV9VTklUX1RZUEVfQ0VMU0lVUyAgICAgICAgICAgICAgID0gMHgwMDAwMDAzMCwKKyAgICBWRUhJQ0xFX1VOSVRfVFlQRV9GQUhSRU5IRUlUICAgICAgICAgICAgPSAweDAwMDAwMDMxLAorICAgIFZFSElDTEVfVU5JVF9UWVBFX0tFTFZJTiAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMzIsCiAgICAgLy8gdm9sdW1lCiAgICAgVkVISUNMRV9VTklUX1RZUEVfTUlMTElMSVRFUiAgICAgICAgICAgID0gMHgwMDAwMDA0MCwKICAgICAvLyB0aW1lCiAgICAgVkVISUNMRV9VTklUX1RZUEVfTkFOT19TRUNTICAgICAgICAgICAgID0gMHgwMDAwMDA1MCwKLSAgICBWRUhJQ0xFX1VOT1RfVFlQRV9TRUNTICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDUzLAorICAgIFZFSElDTEVfVU5JVF9UWVBFX1NFQ1MgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwNTMsCiAgICAgVkVISUNMRV9VTklUX1RZUEVfWUVBUiAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDA1OSwKIH07CiAKQEAgLTExMDUsOCArMTk0MCwxMiBAQAogICAgICAqLwogICAgIFZFSElDTEVfUFJPUF9DSEFOR0VfTU9ERV9TVEFUSUMgICAgICAgICA9IDB4MDAsCiAgICAgLyoqCi0gICAgICogUHJvcGVydHkgb2YgdGhpcyB0eXBlIHdpbGwgYmUgcmVwb3J0ZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZS4gZ2V0IHNob3VsZCByZXR1cm4gdGhlCi0gICAgICogY3VycmVudCB2YWx1ZS4KKyAgICAgKiBQcm9wZXJ0eSBvZiB0aGlzIHR5cGUgd2lsbCBiZSByZXBvcnRlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlLgorICAgICAqIGdldCBjYWxsIHNob3VsZCByZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUuCisgICAgICogU2V0IG9wZXJhdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSBpcyBhc3N1bWVkIHRvIGJlIGFzeW5jaHJvbm91cy4gV2hlbiB0aGUgcHJvcGVydHkgaXMgcmVhZAorICAgICAqIChnZXQpIGFmdGVyIHNldCwgaXQgbWF5IHN0aWxsIHJldHVybiBvbGQgdmFsdWUgdW50aWwgdW5kZXJseWluZyBIL1cgYmFja2luZyB0aGlzIHByb3BlcnR5CisgICAgICogaGFzIGFjdHVhbGx5IGNoYW5nZWQgdGhlIHN0YXRlLiBPbmNlIHN0YXRlIGlzIGNoYW5nZWQsIHRoZSBwcm9wZXJ0eSB3aWxsIGRpc3BhdGNoIGNoYW5nZWQKKyAgICAgKiB2YWx1ZSBhcyBldmVudC4KICAgICAgKi8KICAgICBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fQ0hBTkdFICAgICAgPSAweDAxLAogICAgIC8qKgpAQCAtMTExNCw2ICsxOTUzLDE4IEBACiAgICAgICogdGhlIGRhdGEuCiAgICAgICovCiAgICAgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX0NPTlRJTlVPVVMgICAgID0gMHgwMiwKKyAgICAvKioKKyAgICAgKiBQcm9wZXJ0eSBvZiB0aGlzIHR5cGUgbWF5IGJlIHBvbGxlZCB0byBnZXQgdGhlIGN1cnJlbnQgdmFsdWUuCisgICAgICovCisgICAgVkVISUNMRV9QUk9QX0NIQU5HRV9NT0RFX1BPTEwgICAgICAgICAgID0gMHgwMywKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGZvciBwcm9wZXJ0eSB3aGVyZSBjaGFuZ2UgZXZlbnQgc2hvdWxkIGJlIHNlbnQgb25seSB3aGVuIHRoZSB2YWx1ZSBpcworICAgICAqIHNldCBmcm9tIGV4dGVybmFsIGNvbXBvbmVudC4gTm9ybWFsIHZhbHVlIGNoYW5nZSB3aWxsIG5vdCB0cmlnZ2VyIGV2ZW50LgorICAgICAqIEZvciBleGFtcGxlLCBjbG9jayBwcm9wZXJ0eSBjYW4gc2VuZCBjaGFuZ2UgZXZlbnQgb25seSB3aGVuIGl0IGlzIHNldCwgb3V0c2lkZSBhbmRyb2lkLAorICAgICAqIGZvciBjYXNlIGxpa2UgdXNlciBzZXR0aW5nIHRpbWUgb3IgdGltZSBnZXR0aW5nIHVwZGF0ZS4gVGhlcmUgaXMgbm8gbmVlZCB0byBzZW5kIGl0CisgICAgICogcGVyIGV2ZXJ5IHZhbHVlIGNoYW5nZS4KKyAgICAgKi8KKyAgICBWRUhJQ0xFX1BST1BfQ0hBTkdFX01PREVfT05fU0VUICAgICAgICAgPSAweDA0LAogfTsKIAogLyoqCkBAIC0xMjM4LDE3ICsyMDg5LDE1IEBACiAgKiBWYXJpb3VzIFNlYXRzIGluIHRoZSBjYXIuCiAgKi8KIGVudW0gdmVoaWNsZV9zZWF0IHsKLSAgICBWRUhJQ0xFX1NFQVRfRFJJVkVSX0xIRCAgICAgICAgICAgICA9IDB4MDAwMSwKLSAgICBWRUhJQ0xFX1NFQVRfRFJJVkVSX1JIRCAgICAgICAgICAgICA9IDB4MDAwMiwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzFfUEFTU0VOR0VSX0xFRlQgICA9IDB4MDAxMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzFfUEFTU0VOR0VSX0NFTlRFUiA9IDB4MDAyMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzFfUEFTU0VOR0VSX1JJR0hUICA9IDB4MDA0MCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzJfUEFTU0VOR0VSX0xFRlQgICA9IDB4MDEwMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzJfUEFTU0VOR0VSX0NFTlRFUiA9IDB4MDIwMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzJfUEFTU0VOR0VSX1JJR0hUICA9IDB4MDQwMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzNfUEFTU0VOR0VSX0xFRlQgICA9IDB4MTAwMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzNfUEFTU0VOR0VSX0NFTlRFUiA9IDB4MjAwMCwKLSAgICBWRUhJQ0xFX1NFQVRfUk9XXzNfUEFTU0VOR0VSX1JJR0hUICA9IDB4NDAwMAorICAgIFZFSElDTEVfU0VBVF9ST1dfMV9MRUZUICAgPSAweDAwMDEsCisgICAgVkVISUNMRV9TRUFUX1JPV18xX0NFTlRFUiA9IDB4MDAwMiwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzFfUklHSFQgID0gMHgwMDA0LAorICAgIFZFSElDTEVfU0VBVF9ST1dfMl9MRUZUICAgPSAweDAwMTAsCisgICAgVkVISUNMRV9TRUFUX1JPV18yX0NFTlRFUiA9IDB4MDAyMCwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzJfUklHSFQgID0gMHgwMDQwLAorICAgIFZFSElDTEVfU0VBVF9ST1dfM19MRUZUICAgPSAweDAxMDAsCisgICAgVkVISUNMRV9TRUFUX1JPV18zX0NFTlRFUiA9IDB4MDIwMCwKKyAgICBWRUhJQ0xFX1NFQVRfUk9XXzNfUklHSFQgID0gMHgwNDAwCiB9OwogCiAvKioKQEAgLTEyODIsNiArMjEzMSw3IEBACiAgICAgVkVISUNMRV9NSVJST1JfRFJJVkVSX1JJR0hUICA9IDB4MDAwMDAwMDIsCiAgICAgVkVISUNMRV9NSVJST1JfRFJJVkVSX0NFTlRFUiA9IDB4MDAwMDAwMDQsCiB9OworCiBlbnVtIHZlaGljbGVfdHVybl9zaWduYWwgewogICAgIFZFSElDTEVfU0lHTkFMX05PTkUgICAgICAgICA9IDB4MDAsCiAgICAgVkVISUNMRV9TSUdOQUxfUklHSFQgICAgICAgID0gMHgwMSwKQEAgLTEyODksNiArMjEzOSwxNSBAQAogICAgIFZFSElDTEVfU0lHTkFMX0VNRVJHRU5DWSAgICA9IDB4MDQKIH07CiAKK2VudW0gdmVoaWNsZV96b25lX3R5cGUgeworICAgIFZFSElDTEVfWk9ORV9UWVBFX05PTkUgICAgICA9IDB4MDAsCisgICAgVkVISUNMRV9aT05FX1RZUEVfWk9ORSAgICA9IDB4MDEsCisgICAgVkVISUNMRV9aT05FX1RZUEVfU0VBVCAgICAgID0gMHgwMiwKKyAgICBWRUhJQ0xFX1pPTkVfVFlQRV9ET09SICAgICAgPSAweDA0LAorICAgIFZFSElDTEVfWk9ORV9UWVBFX1dJTkRPVyAgICA9IDB4MTAsCisgICAgVkVISUNMRV9aT05FX1RZUEVfTUlSUk9SICAgID0gMHgyMCwKK307CisKIC8qCiAgKiBCb29sZWFuIHR5cGUuCiAgKi8KQEAgLTE0NjgsNiArMjMyNyw3IEBACiAgICAgICAgIHZlaGljbGVfYm9vbGVhbl90IG1heF9kZWZyb3N0X29uOwogICAgICAgICB2ZWhpY2xlX2Jvb2xlYW5fdCByZWNpcmNfb247CiAgICAgICAgIHZlaGljbGVfYm9vbGVhbl90IGR1YWxfb247CisgICAgICAgIHZlaGljbGVfYm9vbGVhbl90IGF1dG9fb247CiAgICAgICAgIHZlaGljbGVfYm9vbGVhbl90IHBvd2VyX29uOwogCiAgICAgICAgIGZsb2F0IHRlbXBlcmF0dXJlX2N1cnJlbnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGVfY2FtZXJhLmggYi9pbmNsdWRlL2hhcmR3YXJlL3ZlaGljbGVfY2FtZXJhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNzVhZWUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9oYXJkd2FyZS92ZWhpY2xlX2NhbWVyYS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIEFORFJPSURfVkVISUNMRV9DQU1FUkFfSU5URVJGQUNFX0gKLSNkZWZpbmUgQU5EUk9JRF9WRUhJQ0xFX0NBTUVSQV9JTlRFUkZBQ0VfSAotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8Y3V0aWxzL25hdGl2ZV9oYW5kbGUuaD4KLSNpbmNsdWRlIDxzeXN0ZW0vd2luZG93Lmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFZFSElDTEVfQ0FNRVJBX0hFQURFUl9WRVJTSU9OICAgICAgICAgIDEKLSNkZWZpbmUgVkVISUNMRV9DQU1FUkFfTU9EVUxFX0FQSV9WRVJTSU9OXzFfMCAgSEFSRFdBUkVfTU9EVUxFX0FQSV9WRVJTSU9OKDEsIDApCi0jZGVmaW5lIFZFSElDTEVfQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8xXzAgIEhBUkRXQVJFX0RFVklDRV9BUElfVkVSU0lPTl8yKDEsIDAsIFZFSElDTEVfQ0FNRVJBX0hFQURFUl9WRVJTSU9OKQotCi0vKioKLSAqIFZlaGljbGUgQ2FtZXJhIHRvIHByb3ZpZGUgaW50ZXJmYWNlcyBmb3IgY29udHJvbGxpbmcgY2FtZXJhcwotICovCi0KLS8qKgotICogVGhlIGlkIG9mIHRoaXMgbW9kdWxlCi0gKi8KLSNkZWZpbmUgVkVISUNMRV9DQU1FUkFfSEFSRFdBUkVfTU9EVUxFX0lEICAidmVoaWNsZV9jYW1lcmEiCi0KLS8qKgotICogIE5hbWUgb2YgdGhlIHZlaGljbGUgZGV2aWNlIHRvIG9wZW4uICBFeHRlbmQgdGhpcyBsaXN0IGFzCi0gKiAgbW9yZSBjYW1lcmFzIGFyZSBhZGRlZC4gIEVhY2ggY2FtZXJhIGRlZmluZWQgaW4gdmVoaWNsZV9jYW1lcmFfdHlwZV90Ci0gKiAgc2hhbGwgaGF2ZSBhIHN0cmluZyBkZWZpbmVkIGZvciBpdC4KLSAqLwotI2RlZmluZSBWRUhJQ0xFX0NBTUVSQV9SVkNfREVWSUNFICAgICAgICJ2ZWhpY2xlX2NhbWVyYV9ydmNfZGV2aWNlIgotCi0vKioKLSAqIEVhY2ggY2FtZXJhIG9uIHRoZSBjYXIgc2hhbGwgYmUgZW51bWVyYXRlZAotICovCi10eXBlZGVmIGVudW0gewotICAgIFZFSElDTEVfQ0FNRVJBX1JWQyA9IDEsCi19IHZlaGljbGVfY2FtZXJhX3R5cGVfdDsKLQotLyoqCi0gKiBEZXNjcmliZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgY2FtZXJhIGRldmljZQotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWludDMyX3Qgb3ZlcmxheV9vbjsKLSAgICB1aW50MzJfdCBjYW1lcmFfb247Ci19IHZlaGljbGVfY2FtZXJhX3N0YXRlX3Q7Ci0KLS8qKgotICogQml0bWFzayBvZiBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgYSBjYW1lcmEgbW9kdWxlCi0gKi8KLWVudW0gewotICAgIFZFSElDTEVfQ0FNRVJBX0NPTkZJR19GTEFHX0FORFJPSURfT1ZFUkxBWV9TVVBQT1JUICAgICAgPSAweDEsCi0gICAgVkVISUNMRV9DQU1FUkFfQ09ORklHX0ZMQUdfQ0FNRVJBX0NST1BfU1VQUE9SVCAgICAgICAgICA9IDB4MiwKLSAgICBWRUhJQ0xFX0NBTUVSQV9DT05GSUdfRkxBR19DQU1FUkFfUE9TSVRJT05JTkdfU1VQUE9SVCAgID0gMHg0Ci19IHZlaGljbGVfY2FtZXJhX2NvbmZpZ19mbGFnOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWludDMyX3QgY2FwYWJpbGl0ZXNfZmxhZ3M7Ci0gICAgdWludDMyX3QgY2FtZXJhX3dpZHRoOwotICAgIHVpbnQzMl90IGNhbWVyYV9oZWlnaHQ7Ci0gICAgdWludDMyX3QgZGlzcGxheV93aWR0aDsKLSAgICB1aW50MzJfdCBkaXNwbGF5X2hlaWdodDsKLX0gdmVoaWNsZV9jYW1lcmFfY2FwX3Q7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogRXZlcnkgaGFyZHdhcmUgbW9kdWxlIG11c3QgaGF2ZSBhIGRhdGEgc3RydWN0dXJlIG5hbWVkIEhBTF9NT0RVTEVfSU5GT19TWU0KLSAqIGFuZCB0aGUgZmllbGRzIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgbXVzdCBiZWdpbiB3aXRoIGh3X21vZHVsZV90Ci0gKiBmb2xsb3dlZCBieSBtb2R1bGUgc3BlY2lmaWMgaW5mb3JtYXRpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBzdHJ1Y3QgaHdfbW9kdWxlX3QgY29tbW9uOwotICAgIC8qKgotICAgICAqIFF1ZXJpZXMgdGhlIEhXIGZvciB0aGUgY2FtZXJhcyBpbnN0YWxsZWQgb24gdGhlIHZlaGljbGUKLSAgICAgKiBAcGFyYW0gbnVtX2NhbWVyYXMgLSBudW1iZXIgb2YgY2FtZXJhIGRldmljZXMgYXZhaWxhYmxlLiAgSWYKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgMCBpcyByZXR1cm5lZCwgYW4gZXJyb3IgaGFzIG9jY3VycmVkIGFuZAotICAgICAqICAgICAgICAgICAgICAgICAgICB0aGUgcmV0dXJuIHBvaW50ZXIgc2hhbGwgYmUgTlVMTC4KLSAgICAgKiBAcmV0dXJuIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgdmVoaWNsZV9jYW1lcmFfdHlwZV90IHRvCi0gICAgICogICAgICAgICBkZW5vdGUgd2hpY2ggY2FtZXJhcyBhcmUgaW5zdGFsbGVkLiAgVGhpcyBwb2ludGVyIGlzCi0gICAgICogICAgICAgICBvbmx5IHZhbGlkIHdoaWxlIHRoZSB2ZWhpY2xlIGhhbCBpcyBsb2FkZWQuICBJZiB0aGUKLSAgICAgKiAgICAgICAgIHBvaW50ZXIgaXMgTlVMTCwgdGhlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQgYW5kCi0gICAgICogICAgICAgICBudW1fY2FtZXJhcyBzaGFsbCBiZSAwLgotICAgICAqLwotICAgIGNvbnN0IHVpbnQzMl90ICogKCpnZXRfY2FtZXJhX2RldmljZV9saXN0KSh1aW50MzJfdCAqbnVtX2NhbWVyYXMpOwotfSB2ZWhpY2xlX2NhbWVyYV9tb2R1bGVfdDsKLQotCi10eXBlZGVmIHN0cnVjdCB2ZWhpY2xlX2NhbWVyYV9kZXZpY2VfdCB7Ci0gICAgc3RydWN0IGh3X2RldmljZV90IGNvbW1vbjsKLQotICAgIGNvbnN0IHVpbnQzMl90IGNhbWVyYV90eXBlOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoaXMgY2FtZXJhLgotICAgICAqIEBwYXJhbSBkZXZpY2UgLSBkZXZpY2UgaGFuZGxlCi0gICAgICogQHBhcmFtIGNhcCAtIHBvaW50ZXIgdG8gY2FwYWJpbGl0aWVzIGZsYWdzIGJlaW5nIHJldHVybmVkCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIGludmFsaWQgb3Igbm90IGluaXRpYWxpemVkCi0gICAgICovCi0gICAgaW50ICgqZ2V0X2NhcGFiaWxpdGllcykoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIHZlaGljbGVfY2FtZXJhX2NhcF90ICpjYXApOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgY3VycmVudCBjYW1lcmEgY3JvcCBzZXR0aW5ncy4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSByZWN0IC0gY3VycmVudCBjYW1lcmEgY3JvcCBzZXR0aW5ncwotICAgICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gICAgICogICAgICAgICAgLUVQRVJNIGlmIGRldmljZSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKiAgICAgICAgICAtZXJybm8gb24gZXJyb3IKLSAgICAgKi8KLSAgICBpbnQgKCpnZXRfY2FtZXJhX2Nyb3ApKHN0cnVjdCB2ZWhpY2xlX2NhbWVyYV9kZXZpY2VfdCAqZGV2aWNlLCBhbmRyb2lkX25hdGl2ZV9yZWN0X3QgKnJlY3QpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY2FtZXJhIGNyb3AuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gcmVjdCAtIGFyZWEgb2YgY2FtZXJhIGlucHV0IHRvIGNyb3AuICBNdXN0IGZpdCB3aXRoaW4KLSAgICAgKiAgICAgICAgICAgICBjYW1lcmEgd2lkdGggYW5kIGhlaWdodCBmcm9tIGNhbWVyYSBjYXBhYmlsaXRpZXMuCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIG5vdCBpbml0aWFsaXplZAotICAgICAqICAgICAgICAgIC1lcnJubyBvbiBlcnJvcgotICAgICAqLwotICAgIGludCAoKnNldF9jYW1lcmFfY3JvcCkoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGNvbnN0IGFuZHJvaWRfbmF0aXZlX3JlY3RfdCAqcmVjdCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgb24gdGhlIGRpc3BsYXkuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gcmVjdCAtIGFyZWEgb2YgZGlzcGxheSB0aGUgY2FtZXJhIHdpbGwgYXBwZWFyIHdoZW4gb24KLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgbm90IGluaXRpYWxpemVkCi0gICAgICogICAgICAgICAgLWVycm5vIG9uIGVycm9yCi0gICAgICovCi0gICAgaW50ICgqZ2V0X2NhbWVyYV9wb3NpdGlvbikoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGFuZHJvaWRfbmF0aXZlX3JlY3RfdCAqcmVjdCk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHBvc2l0aW9uIG9mIHRoZSBjYW1lcmEgb24gdGhlIGRpc3BsYXkuCi0gICAgICogQHBhcmFtIGRldmljZSAtIGRldmljZSBoYW5kbGUKLSAgICAgKiBAcGFyYW0gcmVjdCAtIGFyZWEgb2YgZGlzcGxheSB0aGUgY2FtZXJhIHdpbGwgYXBwZWFyIHdoZW4gb24uCi0gICAgICogICAgICAgICAgICAgTXVzdCBmaXQgd2l0aGluIGRpc3BsYXkgd2lkdGggYW5kIGhlaWdodCBmcm9tCi0gICAgICogICAgICAgICAgICAgY2FtZXJhIGNhcGFiaWxpdGllcy4KLSAgICAgKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICAgICAqICAgICAgICAgIC1FUEVSTSBpZiBkZXZpY2UgaXMgbm90IGluaXRpYWxpemVkCi0gICAgICogICAgICAgICAgLWVycm5vIG9uIGVycm9yCi0gICAgICovCi0gICAgaW50ICgqc2V0X2NhbWVyYV9wb3NpdGlvbikoc3RydWN0IHZlaGljbGVfY2FtZXJhX2RldmljZV90ICpkZXZpY2UsIGNvbnN0IGFuZHJvaWRfbmF0aXZlX3JlY3RfdCAqcmVjdCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGNhbWVyYSBzdGF0ZS4KLSAgICAgKiBAcGFyYW0gZGV2aWNlIC0gZGV2aWNlIGhhbmRsZQotICAgICAqIEBwYXJhbSBzdGF0ZSAtIGxhc3Qgc2V0dGluZyBmb3IgdGhlIGNhbWVyYQotICAgICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gICAgICogICAgICAgICAgLUVQRVJNIGlmIGRldmljZSBpcyBub3QgaW5pdGlhbGl6ZWQKLSAgICAgKi8KLSAgICBpbnQgKCpnZXRfY2FtZXJhX3N0YXRlKShzdHJ1Y3QgdmVoaWNsZV9jYW1lcmFfZGV2aWNlX3QgKmRldmljZSwgdmVoaWNsZV9jYW1lcmFfc3RhdGVfdCAqc3RhdGUpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY2FtZXJhIHN0YXRlLgotICAgICAqIEBwYXJhbSBkZXZpY2UgLSBkZXZpY2UgaGFuZGxlCi0gICAgICogQHBhcmFtIHN0YXRlIC0gZGVzaXJlZCBzZXR0aW5nIGZvciB0aGUgY2FtZXJhCi0gICAgICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAgICAgKiAgICAgICAgICAtRVBFUk0gaWYgZGV2aWNlIGlzIG5vdCBpbml0aWFsaXplZAotICAgICAqICAgICAgICAgIC1lcnJubyBvbiBlcnJvcgotICAgICAqLwotICAgIGludCAoKnNldF9jYW1lcmFfc3RhdGUpKHN0cnVjdCB2ZWhpY2xlX2NhbWVyYV9kZXZpY2VfdCAqZGV2aWNlLCBjb25zdCB2ZWhpY2xlX2NhbWVyYV9zdGF0ZV90ICpzdGF0ZSk7Ci19IHZlaGljbGVfY2FtZXJhX2RldmljZV90OwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgIC8vIEFORFJPSURfVkVISUNMRV9DQU1FUkFfSU5URVJGQUNFX0gKZGlmZiAtLWdpdCBhL21vZHVsZXMvUkVBRE1FLmFuZHJvaWQgYi9tb2R1bGVzL1JFQURNRS5hbmRyb2lkCmluZGV4IDU3YWJiNzIuLjdmZmMwZjQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvUkVBRE1FLmFuZHJvaWQKKysrIGIvbW9kdWxlcy9SRUFETUUuYW5kcm9pZApAQCAtNCwxMyArNCwxMyBAQAogbGliaGFyZHdhcmUuc28gZXZlbnR1YWxseSBzaG91bGQgY29udGFpbiAqanVzdCogdGhlIEhBTCBodWIKIChoYXJkd2FyZS5jKSwgZXZlcnl0aGluZyBpbiBpdCBzaG91bGQgYmUgcmV3cml0dGVuIGFzIG1vZHVsZXMuCiAKLU1vZHVsZXMgYXJlIC5zbyBpbiAvc3lzdGVtL2xpYnMvaHcvIGFuZCBoYXZlIGEgd2VsbCBkZWZpbmVkIG5hbWluZworTW9kdWxlcyBhcmUgLnNvIGluIC92ZW5kb3IvbGliL2h3LyBhbmQgaGF2ZSBhIHdlbGwgZGVmaW5lZCBuYW1pbmcKIGNvbnZlbnRpb246CiAKLSAgICAvc3lzdGVtL2xpYnMvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8ucHJvZHVjdC5ib2FyZD4uc28KLSAgICAvc3lzdGVtL2xpYnMvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8uYm9hcmQucGxhdGZvcm0+LnNvCi0gICAgL3N5c3RlbS9saWJzL2h3LzwqX0hBUkRXQVJFX01PRFVMRV9JRD4uPHJvLmFyY2g+LnNvCi0gICAgL3N5c3RlbS9saWJzL2h3LzwqX0hBUkRXQVJFX01PRFVMRV9JRD4uZGVmYXVsdC5zbworICAgIC92ZW5kb3IvbGliL2h3LzwqX0hBUkRXQVJFX01PRFVMRV9JRD4uPHJvLnByb2R1Y3QuYm9hcmQ+LnNvCisgICAgL3ZlbmRvci9saWIvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8uYm9hcmQucGxhdGZvcm0+LnNvCisgICAgL3ZlbmRvci9saWIvaHcvPCpfSEFSRFdBUkVfTU9EVUxFX0lEPi48cm8uYXJjaD4uc28KKyAgICAvdmVuZG9yL2xpYi9ody88Kl9IQVJEV0FSRV9NT0RVTEVfSUQ+LmRlZmF1bHQuc28KIAogVGhleSBhbHNvIGhhdmUgYSB3ZWxsIGRlZmluZWQgaW50ZXJmYWNlIHdoaWNoIGxpdmVzIGluIGluY2x1ZGUvaGFyZHdhcmUvLgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2F1ZGlvL0FuZHJvaWQuYnAgYi9tb2R1bGVzL2F1ZGlvL0FuZHJvaWQuYnAKaW5kZXggODBjYWIxOS4uODRkYWVhZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hdWRpby9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvYXVkaW8vQW5kcm9pZC5icApAQCAtMjEsMTEgKzIxLDEyIEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImF1ZGlvLnByaW1hcnkuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsiYXVkaW9faHcuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgIF0sCi0gICAgY2ZsYWdzOiBbIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAorICAgIGNmbGFnczogWyItV2FsbCIsICItV2Vycm9yIiwgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAogfQogCiAvLyBUaGUgc3R1YiBhdWRpbyBIQUwgbW9kdWxlLCBpZGVudGljYWwgdG8gdGhlIGRlZmF1bHQgYXVkaW8gaGFsLCBidXQgd2l0aApAQCAtMzcsMTEgKzM4LDEyIEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImF1ZGlvLnN0dWIuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsiYXVkaW9faHcuYyJdLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJsb2ciLAogICAgIF0sCi0gICAgY2ZsYWdzOiBbIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAorICAgIGNmbGFnczogWyItV2FsbCIsICItV2Vycm9yIiwgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciJdLAogfQogCiAvLyBUaGUgc3R1YiBhdWRpbyBwb2xpY3kgSEFMIG1vZHVsZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgc2tlbGV0b24gZm9yCkBAIC00OSw5ICs1MSwxMCBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJhdWRpb19wb2xpY3kuc3R1YiIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsiYXVkaW9fcG9saWN5LmMiXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKICAgICBdLAotICAgIGNmbGFnczogWyItV25vLXVudXNlZC1wYXJhbWV0ZXIiXSwKKyAgICBjZmxhZ3M6IFsiLVdhbGwiLCAiLVdlcnJvciIsICItV25vLXVudXNlZC1wYXJhbWV0ZXIiXSwKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXVkaW8vYXVkaW9faHcuYyBiL21vZHVsZXMvYXVkaW8vYXVkaW9faHcuYwppbmRleCAzYzI4OGNhLi44ZjczZjExIDEwMDY0NAotLS0gYS9tb2R1bGVzL2F1ZGlvL2F1ZGlvX2h3LmMKKysrIGIvbW9kdWxlcy9hdWRpby9hdWRpb19ody5jCkBAIC0zMDAsMTEgKzMwMCw5IEBACiB7CiAgICAgQUxPR1YoImFkZXZfb3Blbl9vdXRwdXRfc3RyZWFtLi4uIik7CiAKLSAgICBzdHJ1Y3Qgc3R1Yl9hdWRpb19kZXZpY2UgKmxhZGV2ID0gKHN0cnVjdCBzdHViX2F1ZGlvX2RldmljZSAqKWRldjsKLSAgICBzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0ICpvdXQ7Ci0gICAgaW50IHJldDsKLQotICAgIG91dCA9IChzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0ICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9zdHJlYW1fb3V0KSk7CisgICAgKnN0cmVhbV9vdXQgPSBOVUxMOworICAgIHN0cnVjdCBzdHViX3N0cmVhbV9vdXQgKm91dCA9CisgICAgICAgICAgICAoc3RydWN0IHN0dWJfc3RyZWFtX291dCAqKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0dWJfc3RyZWFtX291dCkpOwogICAgIGlmICghb3V0KQogICAgICAgICByZXR1cm4gLUVOT01FTTsKIApAQCAtMzI4LDExICszMjYsNiBAQAogCiAgICAgKnN0cmVhbV9vdXQgPSAmb3V0LT5zdHJlYW07CiAgICAgcmV0dXJuIDA7Ci0KLWVycl9vcGVuOgotICAgIGZyZWUob3V0KTsKLSAgICAqc3RyZWFtX291dCA9IE5VTEw7Ci0gICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYWRldl9jbG9zZV9vdXRwdXRfc3RyZWFtKHN0cnVjdCBhdWRpb19od19kZXZpY2UgKmRldiwKQEAgLTQyNywxMSArNDIwLDggQEAKIHsKICAgICBBTE9HVigiYWRldl9vcGVuX2lucHV0X3N0cmVhbS4uLiIpOwogCi0gICAgc3RydWN0IHN0dWJfYXVkaW9fZGV2aWNlICpsYWRldiA9IChzdHJ1Y3Qgc3R1Yl9hdWRpb19kZXZpY2UgKilkZXY7Ci0gICAgc3RydWN0IHN0dWJfc3RyZWFtX2luICppbjsKLSAgICBpbnQgcmV0OwotCi0gICAgaW4gPSAoc3RydWN0IHN0dWJfc3RyZWFtX2luICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4pKTsKKyAgICAqc3RyZWFtX2luID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc3R1Yl9zdHJlYW1faW4gKmluID0gKHN0cnVjdCBzdHViX3N0cmVhbV9pbiAqKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0dWJfc3RyZWFtX2luKSk7CiAgICAgaWYgKCFpbikKICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAKQEAgLTQ1MywxMSArNDQzLDYgQEAKIAogICAgICpzdHJlYW1faW4gPSAmaW4tPnN0cmVhbTsKICAgICByZXR1cm4gMDsKLQotZXJyX29wZW46Ci0gICAgZnJlZShpbik7Ci0gICAgKnN0cmVhbV9pbiA9IE5VTEw7Ci0gICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYWRldl9jbG9zZV9pbnB1dF9zdHJlYW0oc3RydWN0IGF1ZGlvX2h3X2RldmljZSAqZGV2LApAQCAtNDg2LDcgKzQ3MSw2IEBACiAgICAgQUxPR1YoImFkZXZfb3BlbjogJXMiLCBuYW1lKTsKIAogICAgIHN0cnVjdCBzdHViX2F1ZGlvX2RldmljZSAqYWRldjsKLSAgICBpbnQgcmV0OwogCiAgICAgaWYgKHN0cmNtcChuYW1lLCBBVURJT19IQVJEV0FSRV9JTlRFUkZBQ0UpICE9IDApCiAgICAgICAgIHJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hdWRpby9hdWRpb19wb2xpY3kuYyBiL21vZHVsZXMvYXVkaW8vYXVkaW9fcG9saWN5LmMKaW5kZXggOTMzNTY1NC4uNGY5Y2Q1YSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hdWRpby9hdWRpb19wb2xpY3kuYworKysgYi9tb2R1bGVzL2F1ZGlvL2F1ZGlvX3BvbGljeS5jCkBAIC0yNDEsOSArMjQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF1ZGlvX3BvbGljeSAqKmFwKQogewotICAgIHN0cnVjdCBkZWZhdWx0X2FwX2RldmljZSAqZGV2OwogICAgIHN0cnVjdCBkZWZhdWx0X2F1ZGlvX3BvbGljeSAqZGFwOwotICAgIGludCByZXQ7CiAKICAgICAqYXAgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2F1ZGlvX3JlbW90ZV9zdWJtaXgvQW5kcm9pZC5tayBiL21vZHVsZXMvYXVkaW9fcmVtb3RlX3N1Ym1peC9BbmRyb2lkLm1rCmluZGV4IDkwZGEzOTYuLmM5ZTg1MWYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXVkaW9fcmVtb3RlX3N1Ym1peC9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvYXVkaW9fcmVtb3RlX3N1Ym1peC9BbmRyb2lkLm1rCkBAIC0xOCwxMSArMTgsMTMgQEAKIAogTE9DQUxfTU9EVUxFIDo9IGF1ZGlvLnJfc3VibWl4LmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKIAlhdWRpb19ody5jcHAKIExPQ0FMX0NfSU5DTFVERVMgKz0gXAogCWZyYW1ld29ya3MvYXYvaW5jbHVkZS8gXAotCWZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUvCisJZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS8gXAorCSQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby11dGlscykKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscyBsaWJ1dGlscyBsaWJuYmFpbwogTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJtZWRpYV9oZWxwZXIKIExPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS8zXzAvQW5kcm9pZC5tayBiL21vZHVsZXMvY2FtZXJhLzNfMC9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjhlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NhbWVyYS8zXzAvQW5kcm9pZC5tawpAQCAtMCwwICsxLDQ1IEBACisjIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEUgOj0gY2FtZXJhLmRlZmF1bHQKK0xPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CisKK0xPQ0FMX0NfSU5DTFVERVMgKz0gXAorCXN5c3RlbS9jb3JlL2luY2x1ZGUgXAorCXN5c3RlbS9tZWRpYS9jYW1lcmEvaW5jbHVkZSBcCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJQ2FtZXJhSEFMLmNwcCBcCisJQ2FtZXJhLmNwcCBcCisJRXhhbXBsZUNhbWVyYS5jcHAgXAorCU1ldGFkYXRhLmNwcCBcCisJU3RyZWFtLmNwcCBcCisJVmVuZG9yVGFncy5jcHAgXAorCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKKwlsaWJjYW1lcmFfbWV0YWRhdGEgXAorCWxpYmN1dGlscyBcCisJbGlibG9nIFwKKwlsaWJzeW5jIFwKKwlsaWJ1dGlscyBcCisKK0xPQ0FMX0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1mdmlzaWJpbGl0eT1oaWRkZW4KKworTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvQ2FtZXJhLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9DYW1lcmEuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9DYW1lcmEuY3BwCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvQ2FtZXJhLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvY2FtZXJhL0NhbWVyYS5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL0NhbWVyYUhBTC5jcHAgYi9tb2R1bGVzL2NhbWVyYS8zXzAvQ2FtZXJhSEFMLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvQ2FtZXJhSEFMLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL0NhbWVyYUhBTC5jcHAKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL0NhbWVyYUhBTC5oIGIvbW9kdWxlcy9jYW1lcmEvM18wL0NhbWVyYUhBTC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9DYW1lcmFIQUwuaApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL0NhbWVyYUhBTC5oCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9FeGFtcGxlQ2FtZXJhLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9FeGFtcGxlQ2FtZXJhLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvRXhhbXBsZUNhbWVyYS5jcHAKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9FeGFtcGxlQ2FtZXJhLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvRXhhbXBsZUNhbWVyYS5oIGIvbW9kdWxlcy9jYW1lcmEvM18wL0V4YW1wbGVDYW1lcmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvRXhhbXBsZUNhbWVyYS5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvRXhhbXBsZUNhbWVyYS5oCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9NZXRhZGF0YS5jcHAgYi9tb2R1bGVzL2NhbWVyYS8zXzAvTWV0YWRhdGEuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9NZXRhZGF0YS5jcHAKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9NZXRhZGF0YS5jcHAKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL01ldGFkYXRhLmggYi9tb2R1bGVzL2NhbWVyYS8zXzAvTWV0YWRhdGEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvTWV0YWRhdGEuaApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL01ldGFkYXRhLmgKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL1N0cmVhbS5jcHAgYi9tb2R1bGVzL2NhbWVyYS8zXzAvU3RyZWFtLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvU3RyZWFtLmNwcApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL1N0cmVhbS5jcHAKZGlmZiAtLWdpdCBhL21vZHVsZXMvY2FtZXJhL1N0cmVhbS5oIGIvbW9kdWxlcy9jYW1lcmEvM18wL1N0cmVhbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2NhbWVyYS9TdHJlYW0uaApyZW5hbWUgdG8gbW9kdWxlcy9jYW1lcmEvM18wL1N0cmVhbS5oCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9WZW5kb3JUYWdzLmNwcCBiL21vZHVsZXMvY2FtZXJhLzNfMC9WZW5kb3JUYWdzLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvVmVuZG9yVGFncy5jcHAKcmVuYW1lIHRvIG1vZHVsZXMvY2FtZXJhLzNfMC9WZW5kb3JUYWdzLmNwcApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jYW1lcmEvVmVuZG9yVGFncy5oIGIvbW9kdWxlcy9jYW1lcmEvM18wL1ZlbmRvclRhZ3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9jYW1lcmEvVmVuZG9yVGFncy5oCnJlbmFtZSB0byBtb2R1bGVzL2NhbWVyYS8zXzAvVmVuZG9yVGFncy5oCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NhbWVyYS9BbmRyb2lkLm1rIGIvbW9kdWxlcy9jYW1lcmEvQW5kcm9pZC5tawppbmRleCBhZTY4ZWQ1Li43MTM4OGFhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NhbWVyYS9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvY2FtZXJhL0FuZHJvaWQubWsKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCiAjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xMiwzNCArMTIsNCBAQAogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi1MT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gY2FtZXJhLmRlZmF1bHQKLUxPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3Ci0KLUxPQ0FMX0NfSU5DTFVERVMgKz0gXAotCXN5c3RlbS9jb3JlL2luY2x1ZGUgXAotCXN5c3RlbS9tZWRpYS9jYW1lcmEvaW5jbHVkZSBcCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSBcCi0JQ2FtZXJhSEFMLmNwcCBcCi0JQ2FtZXJhLmNwcCBcCi0JRXhhbXBsZUNhbWVyYS5jcHAgXAotCU1ldGFkYXRhLmNwcCBcCi0JU3RyZWFtLmNwcCBcCi0JVmVuZG9yVGFncy5jcHAgXAotCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLQlsaWJjYW1lcmFfbWV0YWRhdGEgXAotCWxpYmN1dGlscyBcCi0JbGlibG9nIFwKLQlsaWJzeW5jIFwKLQlsaWJ1dGlscyBcCi0KLUxPQ0FMX0NGTEFHUyArPSAtV2FsbCAtV2V4dHJhIC1mdmlzaWJpbGl0eT1oaWRkZW4KLQotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLQotaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQoraW5jbHVkZSAkKGNhbGwgYWxsLXN1YmRpci1tYWtlZmlsZXMpCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnN1bWVyaXIvQW5kcm9pZC5icCBiL21vZHVsZXMvY29uc3VtZXJpci9BbmRyb2lkLmJwCmluZGV4IDRlZTVmYjEuLmIxMzk0OTIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29uc3VtZXJpci9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvY29uc3VtZXJpci9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogImNvbnN1bWVyaXIuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNyY3M6IFsiY29uc3VtZXJpci5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ZpbmdlcnByaW50L0FuZHJvaWQuYnAgYi9tb2R1bGVzL2ZpbmdlcnByaW50L0FuZHJvaWQuYnAKaW5kZXggYTY2ZjlmOS4uYmE3NDllNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9maW5nZXJwcmludC9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvZmluZ2VycHJpbnQvQW5kcm9pZC5icApAQCAtMTUsNiArMTUsNyBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJmaW5nZXJwcmludC5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJmaW5nZXJwcmludC5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsibGlibG9nIl0sCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2dyYWxsb2MvQW5kcm9pZC5tayBiL21vZHVsZXMvZ3JhbGxvYy9BbmRyb2lkLm1rCmluZGV4IDA5MmU4NTEuLmZmNTgwOGQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvZ3JhbGxvYy9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvZ3JhbGxvYy9BbmRyb2lkLm1rCkBAIC0yMCw2ICsyMCw3IEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJjdXRpbHMKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IAlcCkBAIC0yNyw2ICsyOCw4IEBACiAJZnJhbWVidWZmZXIuY3BwIFwKIAltYXBwZXIuY3BwCiAKK0xPQ0FMX0hFQURFUl9MSUJSQVJJRVMgOj0gbGliaGFyZHdhcmVfaGVhZGVycworCiBMT0NBTF9NT0RVTEUgOj0gZ3JhbGxvYy5kZWZhdWx0CiBMT0NBTF9DRkxBR1M6PSAtRExPR19UQUc9XCJncmFsbG9jXCIgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycwogaWZlcSAoJChUQVJHRVRfVVNFX1BBTl9ESVNQTEFZKSx0cnVlKQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ncmFsbG9jL2dyYWxsb2MuY3BwIGIvbW9kdWxlcy9ncmFsbG9jL2dyYWxsb2MuY3BwCmluZGV4IGY4ZDNjNzguLjA3YmJmYmEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvZ3JhbGxvYy9ncmFsbG9jLmNwcAorKysgYi9tb2R1bGVzL2dyYWxsb2MvZ3JhbGxvYy5jcHAKQEAgLTIwOSw2ICsyMDksOSBAQAogCiAgICAgaW50IGJ5dGVzUGVyUGl4ZWwgPSAwOwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgSEFMX1BJWEVMX0ZPUk1BVF9SR0JBX0ZQMTY6CisgICAgICAgICAgICBieXRlc1BlclBpeGVsID0gODsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhBTF9QSVhFTF9GT1JNQVRfUkdCQV84ODg4OgogICAgICAgICBjYXNlIEhBTF9QSVhFTF9GT1JNQVRfUkdCWF84ODg4OgogICAgICAgICBjYXNlIEhBTF9QSVhFTF9GT1JNQVRfQkdSQV84ODg4OgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9od2NvbXBvc2VyL0FuZHJvaWQubWsgYi9tb2R1bGVzL2h3Y29tcG9zZXIvQW5kcm9pZC5tawppbmRleCAzNWMwZmFlLi5kYTBmNmRiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2h3Y29tcG9zZXIvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL2h3Y29tcG9zZXIvQW5kcm9pZC5tawpAQCAtMjAsNiArMjAsNyBAQAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliRUdMCiBMT0NBTF9TUkNfRklMRVMgOj0gaHdjb21wb3Nlci5jcHAKIExPQ0FMX01PRFVMRSA6PSBod2NvbXBvc2VyLmRlZmF1bHQKZGlmZiAtLWdpdCBhL21vZHVsZXMvaHdjb21wb3Nlci9od2NvbXBvc2VyLmNwcCBiL21vZHVsZXMvaHdjb21wb3Nlci9od2NvbXBvc2VyLmNwcAppbmRleCAyOTdjYWZkLi5mZDRlOTBkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2h3Y29tcG9zZXIvaHdjb21wb3Nlci5jcHAKKysrIGIvbW9kdWxlcy9od2NvbXBvc2VyL2h3Y29tcG9zZXIuY3BwCkBAIC0zNywxOCArMzcsMTggQEAKICAgICAgICAgc3RydWN0IGh3X2RldmljZV90KiogZGV2aWNlKTsKIAogc3RhdGljIHN0cnVjdCBod19tb2R1bGVfbWV0aG9kc190IGh3Y19tb2R1bGVfbWV0aG9kcyA9IHsKLSAgICBvcGVuOiBod2NfZGV2aWNlX29wZW4KKyAgICAub3BlbiA9IGh3Y19kZXZpY2Vfb3BlbgogfTsKIAogaHdjX21vZHVsZV90IEhBTF9NT0RVTEVfSU5GT19TWU0gPSB7Ci0gICAgY29tbW9uOiB7Ci0gICAgICAgIHRhZzogSEFSRFdBUkVfTU9EVUxFX1RBRywKLSAgICAgICAgdmVyc2lvbl9tYWpvcjogMSwKLSAgICAgICAgdmVyc2lvbl9taW5vcjogMCwKLSAgICAgICAgaWQ6IEhXQ19IQVJEV0FSRV9NT0RVTEVfSUQsCi0gICAgICAgIG5hbWU6ICJTYW1wbGUgaHdjb21wb3NlciBtb2R1bGUiLAotICAgICAgICBhdXRob3I6ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IiwKLSAgICAgICAgbWV0aG9kczogJmh3Y19tb2R1bGVfbWV0aG9kcywKKyAgICAuY29tbW9uID0geworICAgICAgICAudGFnID0gSEFSRFdBUkVfTU9EVUxFX1RBRywKKyAgICAgICAgLnZlcnNpb25fbWFqb3IgPSAxLAorICAgICAgICAudmVyc2lvbl9taW5vciA9IDAsCisgICAgICAgIC5pZCA9IEhXQ19IQVJEV0FSRV9NT0RVTEVfSUQsCisgICAgICAgIC5uYW1lID0gIlNhbXBsZSBod2NvbXBvc2VyIG1vZHVsZSIsCisgICAgICAgIC5hdXRob3IgPSAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIsCisgICAgICAgIC5tZXRob2RzID0gJmh3Y19tb2R1bGVfbWV0aG9kcywKICAgICB9CiB9OwogCkBAIC02Nyw4ICs2Nyw4IEBACiAgICAgICAgICAgICBsLT5kaXNwbGF5RnJhbWUuYm90dG9tKTsKIH0KIAotc3RhdGljIGludCBod2NfcHJlcGFyZShod2NfY29tcG9zZXJfZGV2aWNlXzFfdCAqZGV2LAotICAgICAgICBzaXplX3QgbnVtRGlzcGxheXMsIGh3Y19kaXNwbGF5X2NvbnRlbnRzXzFfdCoqIGRpc3BsYXlzKSB7CitzdGF0aWMgaW50IGh3Y19wcmVwYXJlKGh3Y19jb21wb3Nlcl9kZXZpY2VfMV90ICogLypkZXYqLywKKyAgICAgICAgc2l6ZV90IC8qbnVtRGlzcGxheXMqLywgaHdjX2Rpc3BsYXlfY29udGVudHNfMV90KiogZGlzcGxheXMpIHsKICAgICBpZiAoZGlzcGxheXMgJiYgKGRpc3BsYXlzWzBdLT5mbGFncyAmIEhXQ19HRU9NRVRSWV9DSEFOR0VEKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpPTAgOyBpPGRpc3BsYXlzWzBdLT5udW1Id0xheWVycyA7IGkrKykgewogICAgICAgICAgICAgLy9kdW1wX2xheWVyKCZsaXN0LT5od0xheWVyc1tpXSk7CkBAIC03OCwxNiArNzgsMTYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBod2Nfc2V0KGh3Y19jb21wb3Nlcl9kZXZpY2VfMV90ICpkZXYsCi0gICAgICAgIHNpemVfdCBudW1EaXNwbGF5cywgaHdjX2Rpc3BsYXlfY29udGVudHNfMV90KiogZGlzcGxheXMpCitzdGF0aWMgaW50IGh3Y19zZXQoaHdjX2NvbXBvc2VyX2RldmljZV8xX3QgKiAvKmRldiovLAorICAgICAgICBzaXplX3QgLypudW1EaXNwbGF5cyovLCBod2NfZGlzcGxheV9jb250ZW50c18xX3QqKiBkaXNwbGF5cykKIHsKICAgICAvL2ZvciAoc2l6ZV90IGk9MCA7IGk8bGlzdC0+bnVtSHdMYXllcnMgOyBpKyspIHsKICAgICAvLyAgICBkdW1wX2xheWVyKCZsaXN0LT5od0xheWVyc1tpXSk7CiAgICAgLy99CiAKLSAgICBFR0xCb29sZWFuIHN1Y2VzcyA9IGVnbFN3YXBCdWZmZXJzKChFR0xEaXNwbGF5KWRpc3BsYXlzWzBdLT5kcHksCisgICAgRUdMQm9vbGVhbiBzdWNjZXNzID0gZWdsU3dhcEJ1ZmZlcnMoKEVHTERpc3BsYXkpZGlzcGxheXNbMF0tPmRweSwKICAgICAgICAgICAgIChFR0xTdXJmYWNlKWRpc3BsYXlzWzBdLT5zdXIpOwotICAgIGlmICghc3VjZXNzKSB7CisgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIHJldHVybiBIV0NfRUdMX0VSUk9SOwogICAgIH0KICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW5wdXQvZXZkZXYvQW5kcm9pZC5tayBiL21vZHVsZXMvaW5wdXQvZXZkZXYvQW5kcm9pZC5tawppbmRleCA5YTVkMDkyLi5iZTRkYjZiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2lucHV0L2V2ZGV2L0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9pbnB1dC9ldmRldi9BbmRyb2lkLm1rCkBAIC00NSw2ICs0NSw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSBpbnB1dC5ldmRldi5kZWZhdWx0CiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKICAgICBFdmRldk1vZHVsZS5jcHAKZGlmZiAtLWdpdCBhL21vZHVsZXMvbG9jYWxfdGltZS9BbmRyb2lkLmJwIGIvbW9kdWxlcy9sb2NhbF90aW1lL0FuZHJvaWQuYnAKaW5kZXggZGYzMjMyNS4uNjQzYWZhNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9sb2NhbF90aW1lL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9sb2NhbF90aW1lL0FuZHJvaWQuYnAKQEAgLTI0LDYgKzI0LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAibG9jYWxfdGltZS5kZWZhdWx0IiwKICAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJodyIsCisgICAgcHJvcHJpZXRhcnk6IHRydWUsCiAgICAgc3JjczogWyJsb2NhbF90aW1lX2h3LmMiXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL21vZHVsZXMvbG9jYWxfdGltZS9sb2NhbF90aW1lX2h3LmMgYi9tb2R1bGVzL2xvY2FsX3RpbWUvbG9jYWxfdGltZV9ody5jCmluZGV4IDRiMjE2NTYuLmIzOGQ4YTUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbG9jYWxfdGltZS9sb2NhbF90aW1lX2h3LmMKKysrIGIvbW9kdWxlcy9sb2NhbF90aW1lL2xvY2FsX3RpbWVfaHcuYwpAQCAtMjgsNiArMjgsOSBAQAogI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8aGFyZHdhcmUvbG9jYWxfdGltZV9oYWwuaD4KIAorLy8gV2Ugb25seSBzdXBwb3J0IGdjYyBhbmQgY2xhbmcsIGJvdGggb2Ygd2hpY2ggc3VwcG9ydCB0aGlzIGF0dHJpYnV0ZS4KKyNkZWZpbmUgVU5VU0VEX0FSR1VNRU5UIF9fYXR0cmlidXRlKCh1bnVzZWQpKQorCiBzdHJ1Y3Qgc3R1Yl9sb2NhbF90aW1lX2RldmljZSB7CiAgICAgc3RydWN0IGxvY2FsX3RpbWVfaHdfZGV2aWNlIGRldmljZTsKIH07CkBAIC01MSw3ICs1NCw4IEBACiAgICAgcmV0dXJuIChpbnQ2NF90KW5vdzsKIH0KIAotc3RhdGljIHVpbnQ2NF90IGx0ZGV2X2dldF9sb2NhbF9mcmVxKHN0cnVjdCBsb2NhbF90aW1lX2h3X2RldmljZSogZGV2KQorc3RhdGljIHVpbnQ2NF90IGx0ZGV2X2dldF9sb2NhbF9mcmVxKAorICAgICAgICBzdHJ1Y3QgbG9jYWxfdGltZV9od19kZXZpY2UqIGRldiBVTlVTRURfQVJHVU1FTlQpCiB7CiAgICAgLy8gRm9yIGJldHRlciBvciB3b3JzZSwgbGludXggY2xvY2tfZ2V0dGltZSByb3V0aW5lcyBub3JtYWxpemUgYWxsIGNsb2NrCiAgICAgLy8gZnJlcXVlbmNpZXMgdG8gMUdIegpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9uZmMtbmNpL0FuZHJvaWQuYnAgYi9tb2R1bGVzL25mYy1uY2kvQW5kcm9pZC5icAppbmRleCBmYzczNzYxLi45MGQyYTI4IDEwMDY0NAotLS0gYS9tb2R1bGVzL25mYy1uY2kvQW5kcm9pZC5icAorKysgYi9tb2R1bGVzL25mYy1uY2kvQW5kcm9pZC5icApAQCAtMTUsNiArMTUsNyBAQAogY2NfbGlicmFyeV9zaGFyZWQgewogICAgIG5hbWU6ICJuZmNfbmNpLmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzcmNzOiBbIm5mY19uY2lfZXhhbXBsZS5jIl0sCiAgICAgc2hhcmVkX2xpYnM6IFsKICAgICAgICAgImxpYmxvZyIsCmRpZmYgLS1naXQgYS9tb2R1bGVzL25mYy1uY2kvbmZjX25jaV9leGFtcGxlLmMgYi9tb2R1bGVzL25mYy1uY2kvbmZjX25jaV9leGFtcGxlLmMKaW5kZXggY2RmZDdkNy4uZjNmNjBmNiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9uZmMtbmNpL25mY19uY2lfZXhhbXBsZS5jCisrKyBiL21vZHVsZXMvbmZjLW5jaS9uZmNfbmNpX2V4YW1wbGUuYwpAQCAtMjMsNDQgKzIzLDYxIEBACiAjaW5jbHVkZSA8aGFyZHdhcmUvbmZjLmg+CiAKIC8qCisgKiBXZSB3YW50IHRvIHNpbGVuY2UgdGhlICJ1bnVzZWQgYXJndW1lbnQiIHRoYXQgZ2NjIGFuZCBjbGFuZyBnaXZlLgorICogT3RoZXIgY29tcGlsZXJzIGdlbmVyYXRpbmcgdGhpcyB3YXJuaW5nIHdpbGwgbmVlZCB0byBwcm92aWRlIHRoZWlyCisgKiBjdXN0b20gYXR0cmlidXRlIHRvIHNpbGVuY2UgdGhpcy4KKyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19jbGFuZ19fKQorI2RlZmluZSBVTlVTRURfQVJHVU1FTlQgX19hdHRyaWJ1dGUoKHVudXNlZCkpCisjZWxzZQorI2RlZmluZSBVTlVTRURfQVJHVU1FTlQKKyNlbmRpZgorCisvKgogICogTkNJIEhBTCBtZXRob2QgaW1wbGVtZW50YXRpb25zLiBUaGVzZSBtdXN0IGJlIG92ZXJyaWRlbgogICovCi1zdGF0aWMgaW50IGhhbF9vcGVuKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2LAotICAgICAgICBuZmNfc3RhY2tfY2FsbGJhY2tfdCAqcF9jYmFjaywgbmZjX3N0YWNrX2RhdGFfY2FsbGJhY2tfdCAqcF9kYXRhX2NiYWNrKSB7CitzdGF0aWMgaW50IGhhbF9vcGVuKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2IFVOVVNFRF9BUkdVTUVOVCwKKyAgICAgICAgbmZjX3N0YWNrX2NhbGxiYWNrX3QgKnBfY2JhY2sgVU5VU0VEX0FSR1VNRU5ULAorICAgICAgICBuZmNfc3RhY2tfZGF0YV9jYWxsYmFja190ICpwX2RhdGFfY2JhY2sgVU5VU0VEX0FSR1VNRU5UKSB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFsX3dyaXRlKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2LAotICAgICAgICB1aW50MTZfdCBkYXRhX2xlbiwgY29uc3QgdWludDhfdCAqcF9kYXRhKSB7CitzdGF0aWMgaW50IGhhbF93cml0ZShjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiBVTlVTRURfQVJHVU1FTlQsCisgICAgICAgIHVpbnQxNl90IGRhdGFfbGVuIFVOVVNFRF9BUkdVTUVOVCwKKyAgICAgICAgY29uc3QgdWludDhfdCAqcF9kYXRhIFVOVVNFRF9BUkdVTUVOVCkgewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhhbF9jb3JlX2luaXRpYWxpemVkKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2LAotICAgICAgICB1aW50OF90KiBwX2NvcmVfaW5pdF9yc3BfcGFyYW1zKSB7CitzdGF0aWMgaW50IGhhbF9jb3JlX2luaXRpYWxpemVkKAorICAgICAgICBjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiBVTlVTRURfQVJHVU1FTlQsCisgICAgICAgIHVpbnQ4X3QqIHBfY29yZV9pbml0X3JzcF9wYXJhbXMgVU5VU0VEX0FSR1VNRU5UKSB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFsX3ByZV9kaXNjb3Zlcihjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldikgeworc3RhdGljIGludCBoYWxfcHJlX2Rpc2NvdmVyKAorICAgICAgICBjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKmRldiBVTlVTRURfQVJHVU1FTlQpIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoYWxfY2xvc2UoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpkZXYpIHsKK3N0YXRpYyBpbnQgaGFsX2Nsb3NlKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqZGV2IFVOVVNFRF9BUkdVTUVOVCkgewogICAgIEFMT0dFKCJORkMtTkNJIEhBTDogJXMiLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhhbF9jb250cm9sX2dyYW50ZWQgKGNvbnN0IHN0cnVjdCBuZmNfbmNpX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IGhhbF9jb250cm9sX2dyYW50ZWQgKAorICAgICAgICBjb25zdCBzdHJ1Y3QgbmZjX25jaV9kZXZpY2UgKnBfZGV2IFVOVVNFRF9BUkdVTUVOVCkKIHsKICAgICBBTE9HRSgiTkZDLU5DSSBIQUw6ICVzIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW50IGhhbF9wb3dlcl9jeWNsZSAoY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpwX2RldikKK3N0YXRpYyBpbnQgaGFsX3Bvd2VyX2N5Y2xlICgKKyAgICAgICAgY29uc3Qgc3RydWN0IG5mY19uY2lfZGV2aWNlICpwX2RldiBVTlVTRURfQVJHVU1FTlQpCiB7CiAgICAgQUxPR0UoIk5GQy1OQ0kgSEFMOiAlcyIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tb2R1bGVzL25mYy9BbmRyb2lkLmJwIGIvbW9kdWxlcy9uZmMvQW5kcm9pZC5icAppbmRleCA1M2FiMzA5Li4xMGRjMmMxIDEwMDY0NAotLS0gYS9tb2R1bGVzL25mYy9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvbmZjL0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAibmZjLmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzcmNzOiBbIm5mY19wbjU0NF9leGFtcGxlLmMiXSwKICAgICBzaGFyZWRfbGliczogWwogICAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL21vZHVsZXMvcG93ZXIvQW5kcm9pZC5icCBiL21vZHVsZXMvcG93ZXIvQW5kcm9pZC5icAppbmRleCAyYjg2YzhiLi5mNGM3NGNlIDEwMDY0NAotLS0gYS9tb2R1bGVzL3Bvd2VyL0FuZHJvaWQuYnAKKysrIGIvbW9kdWxlcy9wb3dlci9BbmRyb2lkLmJwCkBAIC0xNSw2ICsxNSw3IEBACiBjY19saWJyYXJ5X3NoYXJlZCB7CiAgICAgbmFtZTogInBvd2VyLmRlZmF1bHQiLAogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBzcmNzOiBbInBvd2VyLmMiXSwKICAgICBzaGFyZWRfbGliczogWyJsaWJsb2ciXSwKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvcmFkaW8vQW5kcm9pZC5tayBiL21vZHVsZXMvcmFkaW8vQW5kcm9pZC5tawppbmRleCAyMjE0MjRmLi42ZjExMTY5IDEwMDY0NAotLS0gYS9tb2R1bGVzL3JhZGlvL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy9yYWRpby9BbmRyb2lkLm1rCkBAIC0yMSw2ICsyMSw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSByYWRpby5mbS5kZWZhdWx0CiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NSQ19GSUxFUyA6PSByYWRpb19ody5jCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJjdXRpbHMgbGlicmFkaW9fbWV0YWRhdGEKIExPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3JhZGlvL3JhZGlvX2hhbF90b29sLmMgYi9tb2R1bGVzL3JhZGlvL3JhZGlvX2hhbF90b29sLmMKaW5kZXggYmFhMmVmZS4uMDExN2YyOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9yYWRpby9yYWRpb19oYWxfdG9vbC5jCisrKyBiL21vZHVsZXMvcmFkaW8vcmFkaW9faGFsX3Rvb2wuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAgICAgICAgIHJhZGlvX21ldGFkYXRhX2tleV90IGtleTsKICAgICAgICAgcmFkaW9fbWV0YWRhdGFfdHlwZV90IHR5cGU7CiAgICAgICAgIHZvaWQgKnZhbHVlOwotICAgICAgICB1aW50MzJfdCBzaXplOworICAgICAgICBzaXplX3Qgc2l6ZTsKIAogICAgICAgICByYWRpb19tZXRhZGF0YV9nZXRfYXRfaW5kZXgoaW5mby5tZXRhZGF0YSwgaSwgJmtleSwgJnR5cGUsICZ2YWx1ZSwgJnNpemUpOwogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3JhZGlvL3JhZGlvX2h3LmMgYi9tb2R1bGVzL3JhZGlvL3JhZGlvX2h3LmMKaW5kZXggZjE0NDhkYS4uNDU2Yzg2NiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9yYWRpby9yYWRpb19ody5jCisrKyBiL21vZHVsZXMvcmFkaW8vcmFkaW9faHcuYwpAQCAtNTEsNyArNTEsNyBAQAogICAgIC5iYW5kcyA9IHsKICAgICAgICAgewogICAgICAgICAgICAgLnR5cGUgPSBSQURJT19CQU5EX0ZNLAotICAgICAgICAgICAgLmFudGVubmFfY29ubmVjdGVkID0gZmFsc2UsCisgICAgICAgICAgICAuYW50ZW5uYV9jb25uZWN0ZWQgPSB0cnVlLAogICAgICAgICAgICAgLmxvd2VyX2xpbWl0ID0gODc5MDAsCiAgICAgICAgICAgICAudXBwZXJfbGltaXQgPSAxMDc5MDAsCiAgICAgICAgICAgICAubnVtX3NwYWNpbmdzID0gMSwKQEAgLTIxMyw2ICsyMTMsNyBAQAogICAgICptZXRhZGF0YSA9IE5VTEw7CiAKICAgICByZXQgPSByYWRpb19tZXRhZGF0YV9hbGxvY2F0ZShtZXRhZGF0YSwgdHVuZXItPnByb2dyYW0uY2hhbm5lbCwgMCk7CisKICAgICBpZiAocmV0ICE9IDApCiAgICAgICAgIHJldHVybiByZXQ7CiAKQEAgLTIyNCwxNCArMjI1LDE0IEBACiAgICAgICAgIGlmIChyZXQgIT0gMCkKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgcmV0ID0gYWRkX2JpdG1hcF9tZXRhZGF0YShtZXRhZGF0YSwgUkFESU9fTUVUQURBVEFfS0VZX0lDT04sIEJJVE1BUF9GSUxFX1BBVEgpOwotICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgIGlmIChyZXQgIT0gMCAmJiByZXQgIT0gLUVQSVBFKQogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICByZXQgPSByYWRpb19tZXRhZGF0YV9hZGRfY2xvY2sobWV0YWRhdGEsIFJBRElPX01FVEFEQVRBX0tFWV9DTE9DSywgJmh3X2Nsb2NrKTsKICAgICAgICAgaWYgKHJldCAhPSAwKQogICAgICAgICAgICAgZ290byBleGl0OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldCA9IGFkZF9iaXRtYXBfbWV0YWRhdGEobWV0YWRhdGEsIFJBRElPX01FVEFEQVRBX0tFWV9BUlQsIEJJVE1BUF9GSUxFX1BBVEgpOwotICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgIGlmIChyZXQgIT0gMCAmJiByZXQgIT0gLUVQSVBFKQogICAgICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMzU5LDYgKzM2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5zdGVyZW8gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0uc3RlcmVvID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHByZXBhcmVfbWV0YWRhdGEodHVuZXIsICZ0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSwgdHVuZXItPnByb2dyYW0udHVuZWQpOwogCiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBSQURJT19FVkVOVF9UVU5FRDsKICAgICAgICAgICAgICAgICAgICAgZXZlbnQuaW5mbyA9IHR1bmVyLT5wcm9ncmFtOwpAQCAtMzg1LDYgKzM4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnN0ZXJlbyA9IHR1bmVyLT5jb25maWcuYW0uc3RlcmVvOwogICAgICAgICAgICAgICAgICAgICB0dW5lci0+cHJvZ3JhbS5zaWduYWxfc3RyZW5ndGggPSA1MDsKKyAgICAgICAgICAgICAgICAgICAgcHJlcGFyZV9tZXRhZGF0YSh0dW5lciwgJnR1bmVyLT5wcm9ncmFtLm1ldGFkYXRhLCB0dW5lci0+cHJvZ3JhbS50dW5lZCk7CiAKICAgICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9IFJBRElPX0VWRU5UX1RVTkVEOwogICAgICAgICAgICAgICAgICAgICBldmVudC5pbmZvID0gdHVuZXItPnByb2dyYW07CkBAIC0zOTcsMTIgKzQwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHVuZXItPmNvbmZpZy5zcGFjaW5nc1swXSAqIDUpKSAlIDI7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bmVyLT5wcm9ncmFtLnR1bmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmVwYXJlX21ldGFkYXRhKHR1bmVyLCAmdHVuZXItPnByb2dyYW0ubWV0YWRhdGEsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9jb21tYW5kX2wodHVuZXIsIENNRF9BTk5PVU5DRU1FTlRTLCAxMDAwLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dW5lci0+cHJvZ3JhbS5tZXRhZGF0YSAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvX21ldGFkYXRhX2RlYWxsb2NhdGUodHVuZXItPnByb2dyYW0ubWV0YWRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0ubWV0YWRhdGEgPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnNpZ25hbF9zdHJlbmd0aCA9IDEwMDsKICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bmVyLT5jb25maWcudHlwZSA9PSBSQURJT19CQU5EX0ZNKQpAQCAtNDExLDYgKzQwOSw4IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVyLT5wcm9ncmFtLnN0ZXJlbyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVuZXItPnByb2dyYW0udHVuZWQgPyB0dW5lci0+Y29uZmlnLmFtLnN0ZXJlbyA6IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBwcmVwYXJlX21ldGFkYXRhKHR1bmVyLCAmdHVuZXItPnByb2dyYW0ubWV0YWRhdGEsIHR1bmVyLT5wcm9ncmFtLnR1bmVkKTsKKwogICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gUkFESU9fRVZFTlRfVFVORUQ7CiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmluZm8gPSB0dW5lci0+cHJvZ3JhbTsKICAgICAgICAgICAgICAgICAgICAgc2VuZF9tZXRhX2RhdGEgPSB0cnVlOwpAQCAtNDIyLDcgKzQyMiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC50eXBlID0gUkFESU9fRVZFTlRfTUVUQURBVEE7CiAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5tZXRhZGF0YSA9IG1ldGFkYXRhOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRfbWV0YV9kYXRhID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBDTURfQ0FOQ0VMOiB7CkBAIC01MDYsNiArNTA1LDEwIEBACiAgICAgICAgIHN0YXR1cyA9IC1FSU5WQUw7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CisgICAgaWYgKGNvbmZpZy0+bG93ZXJfbGltaXQgPiBjb25maWctPnVwcGVyX2xpbWl0KSB7CisgICAgICAgIHN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CiAgICAgc2VuZF9jb21tYW5kX2woc3R1Yl90dW5lciwgQ01EX0NBTkNFTCwgMCwgTlVMTCk7CiAgICAgc2VuZF9jb21tYW5kX2woc3R1Yl90dW5lciwgQ01EX0NPTkZJRywgNTAwLCAodm9pZCAqKWNvbmZpZyk7CiAKQEAgLTYxOCw3ICs2MjEsMTIgQEAKICAgICBtZXRhZGF0YSA9IGluZm8tPm1ldGFkYXRhOwogICAgICppbmZvID0gc3R1Yl90dW5lci0+cHJvZ3JhbTsKICAgICBpbmZvLT5tZXRhZGF0YSA9IG1ldGFkYXRhOwotICAgIGlmIChtZXRhZGF0YSAhPSBOVUxMICYmIHN0dWJfdHVuZXItPnByb2dyYW0ubWV0YWRhdGEgIT0gTlVMTCkKKyAgICBpZiAobWV0YWRhdGEgPT0gTlVMTCkgeworICAgICAgICBBTE9HRSgiJXMgbWV0YWRhdGEgaXMgYSBudWxscHRyIiwgX19mdW5jX18pOworICAgICAgICBzdGF0dXMgPSAtRUlOVkFMOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChzdHViX3R1bmVyLT5wcm9ncmFtLm1ldGFkYXRhICE9IE5VTEwpCiAgICAgICAgIHJhZGlvX21ldGFkYXRhX2FkZF9tZXRhZGF0YSgmaW5mby0+bWV0YWRhdGEsIHN0dWJfdHVuZXItPnByb2dyYW0ubWV0YWRhdGEpOwogCiBleGl0OgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQuYnAgYi9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE1MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL0FuZHJvaWQuYnAKQEAgLTAsMCArMSwxNSBAQAorY2NfbGlicmFyeV9zdGF0aWMgeworICAgIG5hbWU6ICJtdWx0aWhhbCIsCisgICAgdmVuZG9yOiB0cnVlLAorICAgIHNyY3M6IFsKKyAgICAgICAgIm11bHRpaGFsLmNwcCIsCisgICAgICAgICJTZW5zb3JFdmVudFF1ZXVlLmNwcCIKKyAgICBdLAorICAgIHNoYXJlZF9saWJzOiBbCisgICAgICAgICJsaWJsb2ciLAorICAgICAgICAibGliY3V0aWxzIiwKKyAgICAgICAgImxpYnV0aWxzIiwKKyAgICAgICAgImxpYmRsIgorICAgIF0sCisgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyIuIl0sCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvQW5kcm9pZC5tayBiL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLm1rCmluZGV4IDUzNGU2ZTkuLmNhMjc3ZTYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvc2Vuc29ycy9BbmRyb2lkLm1rCkBAIC0yMyw2ICsyMyw3IEBACiBMT0NBTF9NT0RVTEUgOj0gc2Vuc29ycy4kKFRBUkdFVF9ERVZJQ0UpCiAKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogCiBMT0NBTF9DRkxBR1MgOj0gLURMT0dfVEFHPVwiTXVsdGlIYWxcIgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQW5kcm9pZC5tayBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzE5MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQW5kcm9pZC5tawpAQCAtMCwwICsxLDg4IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCitDT01NT05fQ0ZMQUdTIDo9IC1XYWxsIC1XZXJyb3IgLVdleHRyYQorCisjCisjIFRoZXJlIGFyZSB0d28gd2F5cyB0byB1dGlsaXplIHRoZSBkeW5hbWljIHNlbnNvciBtb2R1bGU6CisjICAgMS4gVXNlIGFzIGFuIGV4dGVuc2lvbiBpbiBhbiBleGlzdGluZyBoYWw6IGRlY2xhcmUgZGVwZW5kZW5jeSBvbiBsaWJkeW5hbWljX3NlbnNvcl9leHQgc2hhcmVkCisjICAgICAgbGlicmFyeSBpbiBleGlzdGluZyBzZW5zb3IgaGFsLgorIyAgIDIuIFVzZSBhcyBhIHN0YW5kYWxvbmUgc2Vuc29yIEhBTCBhbmQgY29uZmlndXJlIG11bHRpaGFsIHRvIGNvbWJpbmUgaXQgd2l0aCBzZW5zb3IgaGFsIHRoYXQKKyMgICAgICBob3N0cyBvdGhlciBzZW5zb3JzOiBhZGQgZGVwZW5kZW5jeSBvbiBzZW5zb3JzLmR5bmFtaWNfc2Vuc29yX2hhbCBpbiBkZXZpY2UgbGV2ZWwgbWFrZWZpbGUgYW5kCisjICAgICAgd3JpdGUgbXVsdGloYWwgY29uZmlndXJhdGlvbiBmaWxlIGFjY29yZGluZ2x5LgorIworIyBQbGVhc2UgdGFrZSBvbmx5IG9uZSBvZiB0aGVzZSB0d28gb3B0aW9ucyB0byBhdm9pZCBjb25mbGljdCBvdmVyIGhhcmR3YXJlIHJlc291cmNlLgorIworCisjCisjIE9wdGlvbiAxOiBzZW5zb3IgZXh0ZW5zaW9uIG1vZHVsZQorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gbGliZHluYW1pY19zZW5zb3JfZXh0CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorIyBpbnRlbmRlZCB0byBiZSBpbnRlZ3JhdGVkIGludG8gaGFsLCB0aHVzIHByb3ByaWV0YXJ5CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKSAtRExPR19UQUc9XCJEeW5hbWljU2Vuc29yRXh0XCIKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICBCYXNlRHluYW1pY1NlbnNvckRhZW1vbi5jcHAgXAorICAgIEJhc2VTZW5zb3JPYmplY3QuY3BwIFwKKyAgICBDb25uZWN0aW9uRGV0ZWN0b3IuY3BwIFwKKyAgICBEdW1teUR5bmFtaWNBY2NlbERhZW1vbi5jcHAgXAorICAgIER5bmFtaWNTZW5zb3JNYW5hZ2VyLmNwcCBcCisgICAgUmluZ0J1ZmZlci5jcHAKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCisgICAgbGliY3V0aWxzIFwKKyAgICBsaWJ1dGlscyBcCisgICAgbGlibG9nCisKK0xPQ0FMX0VYUE9SVF9DX0lOQ0xVREVfRElSUyA6PSAkKExPQ0FMX1BBVEgpCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworIworIyBPcHRpb24gMjogaW5kZXBlbmRlbnQgc2Vuc29yIGhhbAorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gc2Vuc29ycy5keW5hbWljX3NlbnNvcl9oYWwKK0xPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorIyBoYWwgbW9kdWxlLCB0aHVzIHByb3ByaWV0YXJ5CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKSAtRExPR19UQUc9XCJEeW5hbWljU2Vuc29ySGFsXCIKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICBCYXNlRHluYW1pY1NlbnNvckRhZW1vbi5jcHAgXAorICAgIEJhc2VTZW5zb3JPYmplY3QuY3BwIFwKKyAgICBDb25uZWN0aW9uRGV0ZWN0b3IuY3BwIFwKKyAgICBEdW1teUR5bmFtaWNBY2NlbERhZW1vbi5jcHAgXAorICAgIER5bmFtaWNTZW5zb3JNYW5hZ2VyLmNwcCBcCisgICAgUmluZ0J1ZmZlci5jcHAgXAorICAgIHNlbnNvcnMuY3BwCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorICAgIGxpYmN1dGlscyBcCisgICAgbGlidXRpbHMgXAorICAgIGxpYmxvZworCitMT0NBTF9FWFBPUlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9IaWRVdGlscy9BbmRyb2lkLm1rCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlRHluYW1pY1NlbnNvckRhZW1vbi5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjY0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24uaCIKKyNpbmNsdWRlICJEeW5hbWljU2Vuc29yTWFuYWdlci5oIgorI2luY2x1ZGUgInV0aWxzL0xvZy5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworYm9vbCBCYXNlRHluYW1pY1NlbnNvckRhZW1vbjo6b25Db25uZWN0aW9uQ2hhbmdlKGNvbnN0IHN0ZDo6c3RyaW5nICZkZXZpY2VLZXksIGJvb2wgY29ubmVjdGVkKSB7CisgICAgYm9vbCByZXQgPSBmYWxzZTsKKyAgICBhdXRvIGkgPSBtRGV2aWNlcy5maW5kKGRldmljZUtleSk7CisgICAgaWYgKGNvbm5lY3RlZCkgeworICAgICAgICBpZiAoaSA9PSBtRGV2aWNlcy5lbmQoKSkgeworICAgICAgICAgICAgQUxPR1YoImRldmljZSAlcyBpcyBjb25uZWN0ZWQiLCBkZXZpY2VLZXkuY19zdHIoKSk7CisgICAgICAgICAgICBCYXNlU2Vuc29yT2JqZWN0KiBzID0gY3JlYXRlU2Vuc29yKGRldmljZUtleSk7CisgICAgICAgICAgICBpZiAocykgeworICAgICAgICAgICAgICAgIG1EZXZpY2VzLmVtcGxhY2UoZGV2aWNlS2V5LCBzcDxCYXNlU2Vuc29yT2JqZWN0PihzKSk7CisgICAgICAgICAgICAgICAgbU1hbmFnZXIucmVnaXN0ZXJTZW5zb3Iocyk7CisgICAgICAgICAgICAgICAgQUxPR1YoImRldmljZSAlcyBpcyByZWdpc3RlcmVkIiwgZGV2aWNlS2V5LmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBTE9HRCgiZGV2aWNlICVzIGFscmVhZHkgYWRkZWQgYW5kIGlzIGNvbm5lY3RlZCBhZ2FpbiwgaWdub3JlIiwgZGV2aWNlS2V5LmNfc3RyKCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQUxPR1YoImRldmljZSAlcyBpcyBkaXNjb25uZWN0ZWQiLCBkZXZpY2VLZXkuY19zdHIoKSk7CisgICAgICAgIGlmIChpICE9IG1EZXZpY2VzLmVuZCgpKSB7CisgICAgICAgICAgICBtTWFuYWdlci51bnJlZ2lzdGVyU2Vuc29yKGktPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBtRGV2aWNlcy5lcmFzZShpKTsKKyAgICAgICAgICAgIEFMT0dWKCJkZXZpY2UgJXMgaXMgdW5yZWdpc3RlcmVkIiwgZGV2aWNlS2V5LmNfc3RyKCkpOworICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFMT0dEKCJkZXZpY2Ugbm90IGZvdW5kIGluIHJlZ2lzdHJ5Iik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5OGI3ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfU0VOU09SSEFMX0VYVF9CQVNFX0RZTkFNSUNfU0VOU09SX0RBRU1PTl9ICisjZGVmaW5lIEFORFJPSURfU0VOU09SSEFMX0VYVF9CQVNFX0RZTkFNSUNfU0VOU09SX0RBRU1PTl9ICisKKyNpbmNsdWRlICJCYXNlU2Vuc29yT2JqZWN0LmgiCisKKyNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSBTZW5zb3JIYWxFeHQgeworCitjbGFzcyBEeW5hbWljU2Vuc29yTWFuYWdlcjsKKworY2xhc3MgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gOiBwdWJsaWMgUmVmQmFzZSB7CitwdWJsaWM6CisgICAgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24oRHluYW1pY1NlbnNvck1hbmFnZXImIG1hbmFnZXIpIDogbU1hbmFnZXIobWFuYWdlcikge30KKyAgICB2aXJ0dWFsIH5CYXNlRHluYW1pY1NlbnNvckRhZW1vbigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBvbkNvbm5lY3Rpb25DaGFuZ2UoY29uc3Qgc3RkOjpzdHJpbmcgJmRldmljZUtleSwgYm9vbCBjb25uZWN0ZWQpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQmFzZVNlbnNvck9iamVjdCAqIGNyZWF0ZVNlbnNvcihjb25zdCBzdGQ6OnN0cmluZyAmZGV2aWNlS2V5KSA9IDA7CisKKyAgICBEeW5hbWljU2Vuc29yTWFuYWdlciAmbU1hbmFnZXI7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzcDxCYXNlU2Vuc29yT2JqZWN0PiA+IG1EZXZpY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX1NFTlNPUkhBTF9FWFRfQkFTRV9EWU5BTUlDX1NFTlNPUl9EQUVNT05fSAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZVNlbnNvck9iamVjdC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQmFzZVNlbnNvck9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5ZTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlU2Vuc29yT2JqZWN0LmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIkJhc2VTZW5zb3JPYmplY3QuaCIKKyNpbmNsdWRlICJTZW5zb3JFdmVudENhbGxiYWNrLmgiCisKKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDxjc3RyaW5nPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworQmFzZVNlbnNvck9iamVjdDo6QmFzZVNlbnNvck9iamVjdCgpIDogbUNhbGxiYWNrKG51bGxwdHIpIHsKK30KKworYm9vbCBCYXNlU2Vuc29yT2JqZWN0OjpzZXRFdmVudENhbGxiYWNrKFNlbnNvckV2ZW50Q2FsbGJhY2sqIGNhbGxiYWNrKSB7CisgICAgaWYgKG1DYWxsYmFjayAhPSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCJjYWxsYmFjayBpcyBhbHJlYWR5IGFzc2lnbmVkLCBjYW5ub3QgY2hhbmdlLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1DYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJhc2VTZW5zb3JPYmplY3Q6OmdldFV1aWQodWludDhfdCogdXVpZCkgY29uc3QgeworICAgIC8vIGRlZmF1bHQgdXVpZCBkZW5vdGluZyB1dWlkIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHNlbnNvci4KKyAgICBtZW1zZXQodXVpZCwgMCwgMTYpOworfQorCitpbnQgQmFzZVNlbnNvck9iamVjdDo6Zmx1c2goKSB7CisgICAgc3RhdGljIGNvbnN0IHNlbnNvcnNfZXZlbnRfdCBldmVudCA9IHsKKyAgICAgICAgLnR5cGUgPSBTRU5TT1JfVFlQRV9NRVRBX0RBVEEsCisgICAgICAgIC50aW1lc3RhbXAgPSBUSU1FU1RBTVBfQVVUT19GSUxMICAvLyB0aW1lc3RhbXAgd2lsbCBiZSBmaWxsZWQgYXQgZGlzcGF0Y2hlcgorICAgIH07CisgICAgZ2VuZXJhdGVFdmVudChldmVudCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQmFzZVNlbnNvck9iamVjdDo6Z2VuZXJhdGVFdmVudChjb25zdCBzZW5zb3JzX2V2ZW50X3QgJmUpIHsKKyAgICBpZiAobUNhbGxiYWNrKSB7CisgICAgICAgIG1DYWxsYmFjay0+c3VibWl0RXZlbnQodGhpcywgZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0Jhc2VTZW5zb3JPYmplY3QuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlU2Vuc29yT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2ZTEzOAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9CYXNlU2Vuc29yT2JqZWN0LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQU5EUk9JRF9TRU5TT1JIQUxfQkFTRV9TRU5TT1JfT0JKRUNUX0gKKyNkZWZpbmUgQU5EUk9JRF9TRU5TT1JIQUxfQkFTRV9TRU5TT1JfT0JKRUNUX0gKKworI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDx1dGlscy9UaW1lcnMuaD4gLy8gZm9yIG5zZWNzX3QKKyNpbmNsdWRlIDxjc3RkaW50PgorCitzdHJ1Y3Qgc2Vuc29yX3Q7CitzdHJ1Y3Qgc2Vuc29yc19ldmVudF90OworCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworY2xhc3MgU2Vuc29yRXZlbnRDYWxsYmFjazsKKworY2xhc3MgQmFzZVNlbnNvck9iamVjdCA6IHZpcnR1YWwgcHVibGljIFJlZkJhc2UgeworcHVibGljOgorICAgIEJhc2VTZW5zb3JPYmplY3QoKTsKKyAgICB2aXJ0dWFsIH5CYXNlU2Vuc29yT2JqZWN0KCkgPSBkZWZhdWx0OworCisgICAgLy8gYWx3YXlzIGNhbGxlZCBieSBEeW5hbWljU2Vuc29yTWFuYWdlciwgY2FsbGJhY2sgbXVzdCBwb2ludCB0bworICAgIC8vIHZhbGlkIG9iamVjdCB0aHJvdWdob3V0IGxpZmUgY3ljbGUgb2YgQmFzZVNlbnNvck9iamVjdAorICAgIGJvb2wgc2V0RXZlbnRDYWxsYmFjayhTZW5zb3JFdmVudENhbGxiYWNrKiBjYWxsYmFjayk7CisKKyAgICAvLyB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBnZXQgc2Vuc29yIGluZm9ybWF0aW9uIGFuZCBvcGVyYXRlIHNlbnNvcgorICAgIHZpcnR1YWwgY29uc3Qgc2Vuc29yX3QqIGdldFNlbnNvcigpIGNvbnN0ID0gMDsKKworICAgIC8vIGdldCB1dWlkIG9mIHNlbnNvciwgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzZXQgaXQgdG8gYWxsIHplcm8sIG1lYW5zIGRvZXMgbm90IGhhdmUgYSB1dWlkLgorICAgIHZpcnR1YWwgdm9pZCBnZXRVdWlkKHVpbnQ4X3QqIHV1aWQpIGNvbnN0OworCisgICAgLy8gZW5hYmxlIHNlbnNvcgorICAgIHZpcnR1YWwgaW50IGVuYWJsZShib29sIGVuYWJsZSkgPSAwOworCisgICAgLy8gc2V0IHNhbXBsZSBwZXJpb2QgYW5kIGJhdGNoaW5nIHBlcmlvZCBvZiBzZW5zb3IuCisgICAgdmlydHVhbCBpbnQgYmF0Y2gobnNlY3NfdCBzYW1wbGVQZXJpb2QsIG5zZWNzX3QgYmF0Y2hQZXJpb2QpID0gMDsKKworICAgIC8vIGZsdXNoIHNlbnNvciwgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aWxsIHNlbmQgYSBmbHVzaCBjb21wbGV0ZSBldmVudCBiYWNrLgorICAgIHZpcnR1YWwgaW50IGZsdXNoKCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyB1dGlsaXR5IGZ1bmN0aW9uIGZvciBzdWItY2xhc3MKKyAgICB2b2lkIGdlbmVyYXRlRXZlbnQoY29uc3Qgc2Vuc29yc19ldmVudF90ICZlKTsKK3ByaXZhdGU6CisgICAgU2Vuc29yRXZlbnRDYWxsYmFjayogbUNhbGxiYWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX1NFTlNPUkhBTF9CQVNFX1NFTlNPUl9PQkpFQ1RfSAorCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQ29ubmVjdGlvbkRldGVjdG9yLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9Db25uZWN0aW9uRGV0ZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTk0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQ29ubmVjdGlvbkRldGVjdG9yLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJDb25uZWN0aW9uRGV0ZWN0b3IuaCIKKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL2lub3RpZnkuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxzc3RyZWFtPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworLy8gU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yIGZ1bmN0aW9ucworU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yOjpTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3IoQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gKmQsIGludCBwb3J0KQorICAgICAgICA6IENvbm5lY3Rpb25EZXRlY3RvcihkKSB7CisgICAgLy8gaW5pdGlhbGl6ZSBzb2NrZXQgdGhhdCBhY2NlcHQgY29ubmVjdGlvbiB0byBsb2NhbGhvc3Q6cG9ydAorICAgIG1MaXN0ZW5GZCA9IDo6c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAobUxpc3RlbkZkIDwgMCkgeworICAgICAgICBBTE9HRSgiQ2Fubm90IG9wZW4gc29ja2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyQWRkcmVzcyA9IHsKKyAgICAgICAgLnNpbl9mYW1pbHkgPSBBRl9JTkVULAorICAgICAgICAuc2luX3BvcnQgPSBodG9ucyhwb3J0KSwKKyAgICAgICAgLnNpbl9hZGRyID0geworICAgICAgICAgICAgLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSykKKyAgICAgICAgfQorICAgIH07CisKKyAgICA6OmJpbmQobUxpc3RlbkZkLCAoc3RydWN0IHNvY2thZGRyKikmc2VydmVyQWRkcmVzcywgc2l6ZW9mKHNlcnZlckFkZHJlc3MpKTsKKyAgICBpZiAoOjpsaXN0ZW4obUxpc3RlbkZkLCAwKSAhPSBOT19FUlJPUikgeworICAgICAgICBBTE9HRSgiQ2Fubm90IGxpc3RlbiB0byBwb3J0ICVkIiwgcG9ydCk7CisgICAgICAgIG1MaXN0ZW5GZCA9IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHM7CisgICAgcyA8PCAic29ja2V0OiIgPDwgcG9ydDsKKyAgICBtRGV2aWNlID0gcy5zdHIoKTsKKworICAgIHJ1bigiZGRhZF9zb2NrZXQiKTsKK30KKworU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yOjp+U29ja2V0Q29ubmVjdGlvbkRldGVjdG9yKCkgeworICAgIGlmIChtTGlzdGVuRmQgPj0gMCkgeworICAgICAgICByZXF1ZXN0RXhpdEFuZFdhaXQoKTsKKyAgICB9Cit9CisKK2ludCBTb2NrZXRDb25uZWN0aW9uRGV0ZWN0b3I6OndhaXRGb3JDb25uZWN0aW9uKCkgeworICAgIHJldHVybiA6OmFjY2VwdChtTGlzdGVuRmQsIG51bGxwdHIsIG51bGxwdHIpOworfQorCit2b2lkIFNvY2tldENvbm5lY3Rpb25EZXRlY3Rvcjo6d2FpdEZvckRpc2Nvbm5lY3Rpb24oaW50IGNvbm5GZCkgeworICAgIGNoYXIgYnVmZmVyWzE2XTsKKyAgICB3aGlsZSAoOjpyZWFkKGNvbm5GZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkgPiAwKSB7CisgICAgICAgIC8vIGRpc2NhcmQgZGF0YSBidXQgcmVzcG9uc2Ugc29tZXRoaW5nIHRvIGRlbm90ZSB0aHJlYWQgYWxpdmUKKyAgICAgICAgOjp3cml0ZShjb25uRmQsICIuIiwgMSk7CisgICAgfQorICAgIC8vIHJlYWQgZmFpbHVyZSBtZWFucyBkaXNjb25uZWN0aW9uCisgICAgOjpjbG9zZShjb25uRmQpOworfQorCitib29sIFNvY2tldENvbm5lY3Rpb25EZXRlY3Rvcjo6dGhyZWFkTG9vcCgpIHsKKyAgICB3aGlsZSAoIVRocmVhZDo6ZXhpdFBlbmRpbmcoKSkgeworICAgICAgICAvLyBibG9jayB3YWl0aW5nIGZvciBjb25uZWN0aW9uCisgICAgICAgIGludCBjb25uRmQgPSB3YWl0Rm9yQ29ubmVjdGlvbigpOworCisgICAgICAgIGlmIChjb25uRmQgPCAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEFMT0dWKCJSZWNlaXZlZCBjb25uZWN0aW9uLCByZWdpc3RlciBkeW5hbWljIGFjY2VsIHNlbnNvciIpOworICAgICAgICBtRGFlbW9uLT5vbkNvbm5lY3Rpb25DaGFuZ2UobURldmljZSwgdHJ1ZSk7CisKKyAgICAgICAgd2FpdEZvckRpc2Nvbm5lY3Rpb24oY29ubkZkKTsKKyAgICAgICAgQUxPR1YoIkNvbm5lY3Rpb24gYnJlYWssIHVucmVnaXN0ZXIgZHluYW1pYyBhY2NlbCBzZW5zb3IiKTsKKyAgICAgICAgbURhZW1vbi0+b25Db25uZWN0aW9uQ2hhbmdlKG1EZXZpY2UsIGZhbHNlKTsKKyAgICB9CisgICAgbURhZW1vbi0+b25Db25uZWN0aW9uQ2hhbmdlKG1EZXZpY2UsIGZhbHNlKTsKKyAgICBBTE9HRCgiU29ja2V0Q29ubmVjdGlvbkRldGVjdG9yIHRocmVhZCBleGl0ZWQiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3IgZnVuY3Rpb25zCitGaWxlQ29ubmVjdGlvbkRldGVjdG9yOjpGaWxlQ29ubmVjdGlvbkRldGVjdG9yICgKKyAgICAgICAgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gKmQsIGNvbnN0IHN0ZDo6c3RyaW5nICZwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyAmcmVnZXgpCisgICAgICAgICAgICA6IENvbm5lY3Rpb25EZXRlY3RvcihkKSwgbVBhdGgocGF0aCksIG1SZWdleChyZWdleCkgeworICAgIG1Jbm90aWZ5RmQgPSA6Omlub3RpZnlfaW5pdDEoSU5fTk9OQkxPQ0spOworICAgIGlmIChtSW5vdGlmeUZkIDwgMCkgeworICAgICAgICBBTE9HRSgiQ2Fubm90IGluaXQgaW5vdGlmeSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHdkID0gOjppbm90aWZ5X2FkZF93YXRjaChtSW5vdGlmeUZkLCBwYXRoLmNfc3RyKCksIElOX0NSRUFURSB8IElOX0RFTEVURSB8IElOX01PVkVEX0ZST00pOworICAgIGlmICh3ZCA8IDApIHsKKyAgICAgICAgOjpjbG9zZShtSW5vdGlmeUZkKTsKKyAgICAgICAgbUlub3RpZnlGZCA9IC0xOworICAgICAgICBBTE9HRSgiQ2Fubm90IHNldHVwIHdhdGNoIG9uIGRpciAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUG9sbEZkLmZkID0gd2Q7CisgICAgbVBvbGxGZC5ldmVudHMgPSBQT0xMSU47CisKKyAgICBydW4oImRkYWRfZmlsZSIpOworfQorCitGaWxlQ29ubmVjdGlvbkRldGVjdG9yOjp+RmlsZUNvbm5lY3Rpb25EZXRlY3RvcigpIHsKKyAgICBpZiAobUlub3RpZnlGZCkgeworICAgICAgICByZXF1ZXN0RXhpdEFuZFdhaXQoKTsKKyAgICAgICAgOjpjbG9zZShtSW5vdGlmeUZkKTsKKyAgICB9Cit9CisKK2Jvb2wgRmlsZUNvbm5lY3Rpb25EZXRlY3Rvcjo6bWF0Y2hlcyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QgeworICAgIHJldHVybiBzdGQ6OnJlZ2V4X21hdGNoKG5hbWUsIG1SZWdleCk7Cit9CisKK3N0ZDo6c3RyaW5nIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3I6OmdldEZ1bGxOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWUpIGNvbnN0IHsKKyAgICByZXR1cm4gbVBhdGggKyBuYW1lOworfQorCit2b2lkIEZpbGVDb25uZWN0aW9uRGV0ZWN0b3I6OnByb2Nlc3NFeGlzdGluZ0ZpbGVzKCkgY29uc3QgeworICAgIGF1dG8gZGlycCA9IDo6b3BlbmRpcihtUGF0aC5jX3N0cigpKTsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkcDsKKyAgICB3aGlsZSAoKGRwID0gOjpyZWFkZGlyKGRpcnApKSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWUoZHAtPmRfbmFtZSk7CisgICAgICAgIGlmIChtYXRjaGVzKG5hbWUpKSB7CisgICAgICAgICAgICBtRGFlbW9uLT5vbkNvbm5lY3Rpb25DaGFuZ2UoZ2V0RnVsbE5hbWUobmFtZSksIHRydWUgLypjb25uZWN0ZWQqLyk7CisgICAgICAgIH0KKyAgICB9CisgICAgOjpjbG9zZWRpcihkaXJwKTsKK30KKworYm9vbCBGaWxlQ29ubmVjdGlvbkRldGVjdG9yOjp0aHJlYWRMb29wKCkgeworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCBpbm90aWZ5X2V2ZW50IGU7CisgICAgICAgIHVpbnQ4X3QgcGFkZGluZ1tOQU1FX01BWCArIDFdOworICAgIH0gZXY7CisKKyAgICBwcm9jZXNzRXhpc3RpbmdGaWxlcygpOworCisgICAgd2hpbGUgKCFUaHJlYWQ6OmV4aXRQZW5kaW5nKCkpIHsKKyAgICAgICAgaW50IHBvbGxOdW0gPSA6OnBvbGwoJm1Qb2xsRmQsIDEsIC0xKTsKKyAgICAgICAgaWYgKHBvbGxOdW0gPT0gLTEpIHsKKyAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgIEFMT0dFKCJpbm90aWZ5IHBvbGwgZXJyb3I6ICVzIiwgOjpzdHJlcnJvcihlcnJubykpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvbGxOdW0gPiAwKSB7CisgICAgICAgICAgICBpZiAoISAobVBvbGxGZC5yZXZlbnRzICYgUE9MTElOKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJbm90aWZ5IGV2ZW50cyBhcmUgYXZhaWxhYmxlICovCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIC8qIFJlYWQgc29tZSBldmVudHMuICovCisgICAgICAgICAgICAgICAgc3NpemVfdCBsZW4gPSA6OnJlYWQobUlub3RpZnlGZCwgJmV2LCBzaXplb2YgZXYpOworICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gLTEgJiYgZXJybm8gIT0gRUFHQUlOKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJyZWFkIGVycm9yOiAlcyIsIDo6c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4aXQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogSWYgdGhlIG5vbmJsb2NraW5nIHJlYWQoKSBmb3VuZCBubyBldmVudHMgdG8gcmVhZCwgdGhlbgorICAgICAgICAgICAgICAgICAgIGl0IHJldHVybnMgLTEgd2l0aCBlcnJubyBzZXQgdG8gRUFHQUlOLiBJbiB0aGF0IGNhc2UsCisgICAgICAgICAgICAgICAgICAgd2UgZXhpdCB0aGUgbG9vcC4gKi8KKyAgICAgICAgICAgICAgICBpZiAobGVuIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGV2LmUubGVuICYmICEoZXYuZS5tYXNrICYgSU5fSVNESVIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWUoZXYuZS5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgQUxPR1YoImRldmljZSAlcyBzdGF0ZSBjaGFuZ2VkIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldi5lLm1hc2sgJiBJTl9DUkVBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGFlbW9uLT5vbkNvbm5lY3Rpb25DaGFuZ2UoZ2V0RnVsbE5hbWUobmFtZSksIHRydWUgLyogY29ubmVjdGVkKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXYuZS5tYXNrICYgSU5fREVMRVRFIHx8IGV2LmUubWFzayAmIElOX01PVkVEX0ZST00pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGFlbW9uLT5vbkNvbm5lY3Rpb25DaGFuZ2UoZ2V0RnVsbE5hbWUobmFtZSksIGZhbHNlIC8qIGNvbm5lY3RlZCovKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEFMT0dEKCJGaWxlQ29ubmVjdGlvbkRldGVjdGlvbiB0aHJlYWQgZXhpdGVkIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQ29ubmVjdGlvbkRldGVjdG9yLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvQ29ubmVjdGlvbkRldGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyZDgzMgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9Db25uZWN0aW9uRGV0ZWN0b3IuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1NFTlNPUkhBTF9FWFRfQ09OTkVDVElPTl9ERVRFQ1RPUl9ICisjZGVmaW5lIEFORFJPSURfU0VOU09SSEFMX0VYVF9DT05ORUNUSU9OX0RFVEVDVE9SX0gKKworI2luY2x1ZGUgIkJhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmgiCisjaW5jbHVkZSA8dXRpbHMvVGhyZWFkLmg+CisKKyNpbmNsdWRlIDxyZWdleD4KKworI2luY2x1ZGUgPHBvbGwuaD4KKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisKKy8vIEFic3RyYWN0aW9uIG9mIGNvbm5lY3Rpb24gZGV0ZWN0b3I6IGFuIGVudGl0eSB0aGF0IGNhbGxzCisvLyBCYXNlRHluYW1pY1NlbnNvckRhZW1vbjo6b25Db25uZWN0aW9uQ2hhbmdlKCkgd2hlbiBuZWNlc3NhcnkuCitjbGFzcyBDb25uZWN0aW9uRGV0ZWN0b3IgOiB2aXJ0dWFsIHB1YmxpYyBSZWZCYXNlIHsKK3B1YmxpYzoKKyAgICBDb25uZWN0aW9uRGV0ZWN0b3IoQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gKmQpIDogbURhZW1vbihkKSB7IH0KKyAgICB2aXJ0dWFsIH5Db25uZWN0aW9uRGV0ZWN0b3IoKSA9IGRlZmF1bHQ7Citwcm90ZWN0ZWQ6CisgICAgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24qIG1EYWVtb247Cit9OworCisvLyBPcGVuIGEgc29ja2V0IHRoYXQgbGlzdGVuIHRvIGxvY2FsaG9zdDpwb3J0IGFuZCBub3RpZnkgc2Vuc29yIGRhZW1vbiBvZiBjb25uZWN0aW9uIGFuZAorLy8gZGlzY29ubmVjdGlvbiBldmVudCB3aGVuIHNvY2tldCBpcyBjb25uZWN0ZWQgb3IgZGlzY29ubmVjdGVkLCByZXNwZWN0aXZlbHkuIE9ubHkgb25lIGNvbmN1cnJlbnQKKy8vIGNsaWVudCBpcyBhY2NlcHRlZC4KK2NsYXNzIFNvY2tldENvbm5lY3Rpb25EZXRlY3RvciA6IHB1YmxpYyBDb25uZWN0aW9uRGV0ZWN0b3IsIHB1YmxpYyBUaHJlYWQgeworcHVibGljOgorICAgIFNvY2tldENvbm5lY3Rpb25EZXRlY3RvcihCYXNlRHluYW1pY1NlbnNvckRhZW1vbiAqZCwgaW50IHBvcnQpOworICAgIHZpcnR1YWwgflNvY2tldENvbm5lY3Rpb25EZXRlY3RvcigpOworcHJpdmF0ZToKKyAgICAvLyBpbXBsZW1lbnQgdmlydHVhbCBvZiBUaHJlYWQKKyAgICB2aXJ0dWFsIGJvb2wgdGhyZWFkTG9vcCgpOworICAgIGludCB3YWl0Rm9yQ29ubmVjdGlvbigpOworICAgIHN0YXRpYyB2b2lkIHdhaXRGb3JEaXNjb25uZWN0aW9uKGludCBjb25uRmQpOworCisgICAgaW50IG1MaXN0ZW5GZDsKKyAgICBzdGQ6OnN0cmluZyBtRGV2aWNlOworfTsKKworLy8gRGV0ZWN0IGZpbGUgY2hhbmdlIHVuZGVyIHBhdGggYW5kIG5vdGlmeSBzZW5zb3IgZGFlbW9uIG9mIGNvbm5lY3Rpb24gYW5kIGRpc2Nvbm5lY3Rpb24gZXZlbnQgd2hlbgorLy8gZmlsZSBpcyBjcmVhdGVkIGluIG9yIHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5LCByZXNwZWN0aXZlbHkuCitjbGFzcyBGaWxlQ29ubmVjdGlvbkRldGVjdG9yIDogcHVibGljIENvbm5lY3Rpb25EZXRlY3RvciwgcHVibGljIFRocmVhZCB7CitwdWJsaWM6CisgICAgRmlsZUNvbm5lY3Rpb25EZXRlY3RvcigKKyAgICAgICAgICAgIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uICpkLCBjb25zdCBzdGQ6OnN0cmluZyAmcGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcgJnJlZ2V4KTsKKyAgICB2aXJ0dWFsIH5GaWxlQ29ubmVjdGlvbkRldGVjdG9yKCk7Citwcml2YXRlOgorICAgIC8vIGltcGxlbWVudCB2aXJ0dWFsIG9mIFRocmVhZAorICAgIHZpcnR1YWwgYm9vbCB0aHJlYWRMb29wKCk7CisKKyAgICBib29sIG1hdGNoZXMoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0OworICAgIHZvaWQgcHJvY2Vzc0V4aXN0aW5nRmlsZXMoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBnZXRGdWxsTmFtZShjb25zdCBzdGQ6OnN0cmluZyBuYW1lKSBjb25zdDsKKworICAgIHN0ZDo6c3RyaW5nIG1QYXRoOworICAgIHN0ZDo6cmVnZXggbVJlZ2V4OworICAgIGludCBtSW5vdGlmeUZkOworICAgIHN0cnVjdCBwb2xsZmQgbVBvbGxGZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RZTkFNSUNfU0VOU09SX0RBRU1PTl9ICmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R1bW15RHluYW1pY0FjY2VsRGFlbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc3OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R1bW15RHluYW1pY0FjY2VsRGFlbW9uLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJCYXNlU2Vuc29yT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbkRldGVjdG9yLmgiCisjaW5jbHVkZSAiRHVtbXlEeW5hbWljQWNjZWxEYWVtb24uaCIKKyNpbmNsdWRlICJEeW5hbWljU2Vuc29yTWFuYWdlci5oIgorCisjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KKyNpbmNsdWRlIDx1dGlscy9TeXN0ZW1DbG9jay5oPgorI2luY2x1ZGUgPHV0aWxzL21pc2MuaD4KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPiAgICAgICAgICAgIC8vc3RkOjptYXgKKworI2RlZmluZSBTWVNQUk9QX1BSRUZJWCAgICAgICAgICAgICAgICAgICJkeW5hbWljX3NlbnNvci5kdW1teSIKKyNkZWZpbmUgRklMRV9OQU1FX0JBU0UgICAgICAgICAgICAgICAgICAiZHVtbXlfYWNjZWxfZmlsZSIKKyNkZWZpbmUgRklMRV9OQU1FX1JFR0VYICAgICAgICAgICAgICAgICAoIl4iIEZJTEVfTkFNRV9CQVNFICJbMC05XSQiKQorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OkR1bW15RHluYW1pY0FjY2VsRGFlbW9uKER5bmFtaWNTZW5zb3JNYW5hZ2VyJiBtYW5hZ2VyKQorICAgICAgICA6IEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uKG1hbmFnZXIpIHsKKyAgICBjaGFyIHByb3BlcnR5W1BST1BFUlRZX1ZBTFVFX01BWCsxXTsKKworICAgIHByb3BlcnR5X2dldChTWVNQUk9QX1BSRUZJWCAiLmZpbGUiLCBwcm9wZXJ0eSwgIiIpOworICAgIGlmIChzdHJjbXAocHJvcGVydHksICIiKSAhPSAwKSB7CisgICAgICAgIG1GaWxlRGV0ZWN0b3IgPSBuZXcgRmlsZUNvbm5lY3Rpb25EZXRlY3RvcigKKyAgICAgICAgICAgICAgICB0aGlzLCBzdGQ6OnN0cmluZyhwcm9wZXJ0eSksIHN0ZDo6c3RyaW5nKEZJTEVfTkFNRV9SRUdFWCkpOworICAgIH0KKworICAgIHByb3BlcnR5X2dldChTWVNQUk9QX1BSRUZJWCAiLnNvY2tldCIsIHByb3BlcnR5LCAiIik7CisgICAgaWYgKHN0cmNtcChwcm9wZXJ0eSwgIiIpICE9IDApIHsKKyAgICAgICAgbVNvY2tldERldGVjdG9yID0gbmV3IFNvY2tldENvbm5lY3Rpb25EZXRlY3Rvcih0aGlzLCBhdG9pKHByb3BlcnR5KSk7CisgICAgfQorfQorCitCYXNlU2Vuc29yT2JqZWN0ICogRHVtbXlEeW5hbWljQWNjZWxEYWVtb246OmNyZWF0ZVNlbnNvcihjb25zdCBzdGQ6OnN0cmluZyAmZGV2aWNlS2V5KSB7CisgICAgaWYgKGRldmljZUtleS5jb21wYXJlKDAsIDEsICIvIikgPT0gMCkgeworICAgICAgICAvLyBmaWxlIGRldGVjdG9yIHJlc3VsdCwgZGV2aWNlS2V5IGlzIGZpbGUgYWJzb2x1dGUgcGF0aAorICAgICAgICBzaXplX3Qgc3RhcnQgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VLZXkubGVuZ3RoKCkgLSAoOjpzdHJsZW4oRklMRV9OQU1FX0JBU0UpICsgMSkpOworICAgICAgICByZXR1cm4gbmV3IER1bW15U2Vuc29yKGRldmljZUtleS5zdWJzdHIoc3RhcnQpKTsKKworICAgIH0gZWxzZSBpZiAoZGV2aWNlS2V5LmNvbXBhcmUoMCwgOjpzdHJsZW4oInNvY2tldDoiKSwgInNvY2tldDoiKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBuZXcgRHVtbXlTZW5zb3IoZGV2aWNlS2V5KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyB1bmtub3duIGRldmljZUtleQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK0R1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6RHVtbXlTZW5zb3IoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIDogbVJ1blN0YXRlKGZhbHNlKSB7CisgICAgbVNlbnNvck5hbWUgPSAiRHVtbXkgQWNjZWwgLSAiICsgbmFtZTsKKyAgICBtU2Vuc29yID0gKHN0cnVjdCBzZW5zb3JfdCkgeworICAgICAgICBtU2Vuc29yTmFtZS5jX3N0cigpLAorICAgICAgICAiRGVtb1NlbnNlLCBJbmMuIiwKKyAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24KKyAgICAgICAgLTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSwgZHVtbXkgbnVtYmVyIGhlcmUKKyAgICAgICAgU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiwKKyAgICAgICAgOS44ICogOC4wZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFJhbmdlCisgICAgICAgIDkuOCAqIDguMGYgLyAzMjc2OC4wZiwgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHV0aW9uCisgICAgICAgIDAuNWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3dlcgorICAgICAgICAoaW50MzJfdCkoMS4wRTZmIC8gNTApLCAgICAgICAgICAgICAgICAgICAgLy8gbWluRGVsYXkKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpZm9SZXNlcnZlZEV2ZW50Q291bnQKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpZm9NYXhFdmVudENvdW50CisgICAgICAgIFNFTlNPUl9TVFJJTkdfVFlQRV9BQ0NFTEVST01FVEVSLAorICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZWRQZXJtaXNzaW9uCisgICAgICAgIChsb25nKSgxLjBFNmYgLyA1MCksICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhEZWxheQorICAgICAgICBTRU5TT1JfRkxBR19DT05USU5VT1VTX01PREUsCisgICAgICAgIHsgTlVMTCwgTlVMTCB9CisgICAgfTsKKyAgICBtUnVuTG9jay5sb2NrKCk7CisgICAgcnVuKCJEdW1teVNlbnNvciIpOworfQorCitEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6On5EdW1teVNlbnNvcigpIHsKKyAgICByZXF1ZXN0RXhpdEFuZFdhaXQoKTsKKyAgICAvLyB1bmxvY2sgbVJ1bkxvY2sgc28gdGhyZWFkIGNhbiBiZSB1bmJsb2NrZWQKKyAgICBtUnVuTG9jay51bmxvY2soKTsKK30KKworY29uc3Qgc2Vuc29yX3QqIER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6Z2V0U2Vuc29yKCkgY29uc3QgeworICAgIHJldHVybiAmbVNlbnNvcjsKK30KKwordm9pZCBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OmdldFV1aWQodWludDhfdCogdXVpZCkgY29uc3QgeworICAgIC8vIGF0IG1heGltdW0sIHRoZXJlIHdpbGwgYmUgYWx3YXlzIG9uZSBpbnN0YW5jZSwgc28gd2UgY2FuIGhhcmRjb2RlCisgICAgc2l6ZV90IGhhc2ggPSBzdGQ6Omhhc2g8c3RkOjpzdHJpbmc+KCkobVNlbnNvck5hbWUpOworICAgIG1lbXNldCh1dWlkLCAneCcsIDE2KTsKKyAgICBtZW1jcHkodXVpZCwgJmhhc2gsIHNpemVvZihoYXNoKSk7Cit9CisKK2ludCBEdW1teUR5bmFtaWNBY2NlbERhZW1vbjo6RHVtbXlTZW5zb3I6OmVuYWJsZShib29sIGVuYWJsZSkgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtTG9jayk7CisgICAgaWYgKG1SdW5TdGF0ZSAhPSBlbmFibGUpIHsKKyAgICAgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAgICAgbVJ1bkxvY2sudW5sb2NrKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtUnVuTG9jay5sb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgbVJ1blN0YXRlID0gZW5hYmxlOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6YmF0Y2gobnNlY3NfdCwgbnNlY3NfdCkgeworICAgIHJldHVybiAwOworfQorCit2b2lkIER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6d2FpdFVudGlsTmV4dFNhbXBsZSgpIHsKKyAgICAvLyBibG9jayB3aGVuIGRpc2FibGVkIChtUnVuTG9jayBsb2NrZWQpCisgICAgbVJ1bkxvY2subG9jaygpOworICAgIG1SdW5Mb2NrLnVubG9jaygpOworCisgICAgaWYgKCFUaHJlYWQ6OmV4aXRQZW5kaW5nKCkpIHsKKyAgICAgICAgLy8gc2xlZXAgMjAgbXMgKDUwSHopCisgICAgICAgIHVzbGVlcCgyMDAwMCk7CisgICAgfQorfQorCitib29sIER1bW15RHluYW1pY0FjY2VsRGFlbW9uOjpEdW1teVNlbnNvcjo6dGhyZWFkTG9vcCgpIHsKKyAgICAvLyBkZXNpZ25hdGVkIGludGlhbGl6YXRpb24gd2lsbCBsZWF2ZSB0aGUgdW5zcGVjaWZpZWQgZmllbGRzIHplcm9lZAorICAgIHNlbnNvcnNfZXZlbnRfdCBldmVudCA9IHsKKyAgICAgICAgLnZlcnNpb24gPSBzaXplb2YoZXZlbnQpLAorICAgICAgICAuc2Vuc29yID0gLTEsCisgICAgICAgIC50eXBlID0gU0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUiwKKyAgICB9OworCisgICAgaW50NjRfdCBzdGFydFRpbWVOcyA9IGVsYXBzZWRSZWFsdGltZU5hbm8oKTsKKworICAgIEFMT0dJKCJEeW5hbWljIER1bW15IEFjY2VsIHN0YXJ0ZWQgZm9yIHNlbnNvciAlcyIsIG1TZW5zb3JOYW1lLmNfc3RyKCkpOworICAgIHdoaWxlICghVGhyZWFkOjpleGl0UGVuZGluZygpKSB7CisgICAgICAgIHdhaXRVbnRpbE5leHRTYW1wbGUoKTsKKworICAgICAgICBpZiAoVGhyZWFkOjpleGl0UGVuZGluZygpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IG5vd1RpbWVOcyA9IGVsYXBzZWRSZWFsdGltZU5hbm8oKTsKKyAgICAgICAgZmxvYXQgdCA9IChub3dUaW1lTnMgLSBzdGFydFRpbWVOcykgLyAxZTlmOworCisgICAgICAgIGV2ZW50LmRhdGFbMF0gPSAyICogOjpzaW4oMyAqIE1fUEkgKiB0KTsKKyAgICAgICAgZXZlbnQuZGF0YVsxXSA9IDMgKiA6OmNvcygzICogTV9QSSAqIHQpOworICAgICAgICBldmVudC5kYXRhWzJdID0gMS41ICogOjpzaW4oNiAqIE1fUEkgKiB0KTsKKyAgICAgICAgZXZlbnQudGltZXN0YW1wID0gbm93VGltZU5zOworICAgICAgICBnZW5lcmF0ZUV2ZW50KGV2ZW50KTsKKyAgICB9CisKKyAgICBBTE9HSSgiRHluYW1pYyBEdW1teSBBY2NlbCB0aHJlYWQgZW5kZWQgZm9yIHNlbnNvciAlcyIsIG1TZW5zb3JOYW1lLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EdW1teUR5bmFtaWNBY2NlbERhZW1vbi5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R1bW15RHluYW1pY0FjY2VsRGFlbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmZmJlZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EdW1teUR5bmFtaWNBY2NlbERhZW1vbi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfU0VOU09SSEFMX0VYVF9EVU1NWV9EWU5BTUlDX0FDQ0VMX0RBRU1PTl9ICisjZGVmaW5lIEFORFJPSURfU0VOU09SSEFMX0VYVF9EVU1NWV9EWU5BTUlDX0FDQ0VMX0RBRU1PTl9ICisKKyNpbmNsdWRlICJCYXNlRHluYW1pY1NlbnNvckRhZW1vbi5oIgorI2luY2x1ZGUgIkJhc2VTZW5zb3JPYmplY3QuaCIKKworI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy9UaHJlYWQuaD4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworY2xhc3MgQ29ubmVjdGlvbkRldGVjdG9yOworCisvKioKKyAqIFRoaXMgZGFlbW9uIHNpbXVsYXRlcyBkeW5hbWljIHNlbnNvciBjb25uZWN0aW9uIHdpdGhvdXQgdGhlIG5lZWQgb2YgYWN0dWFsbHkgY29ubmVjdCBwZXJpcGhlcmFsCisgKiB0byBBbmRyb2lkLiBJdCBpcyBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nLiBJdCBjYW4gaGFuZGxlIG9uZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIGF0IG1heGltdW0uCisgKi8KK2NsYXNzIER1bW15RHluYW1pY0FjY2VsRGFlbW9uIDogcHVibGljIEJhc2VEeW5hbWljU2Vuc29yRGFlbW9uIHsKK3B1YmxpYzoKKyAgICBEdW1teUR5bmFtaWNBY2NlbERhZW1vbihEeW5hbWljU2Vuc29yTWFuYWdlciYgbWFuYWdlcik7CisgICAgdmlydHVhbCB+RHVtbXlEeW5hbWljQWNjZWxEYWVtb24oKSA9IGRlZmF1bHQ7Citwcml2YXRlOgorICAgIGNsYXNzIER1bW15U2Vuc29yIDogcHVibGljIEJhc2VTZW5zb3JPYmplY3QsIHB1YmxpYyBUaHJlYWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRHVtbXlTZW5zb3IoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworICAgICAgICB+RHVtbXlTZW5zb3IoKTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBzZW5zb3JfdCogZ2V0U2Vuc29yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRVdWlkKHVpbnQ4X3QqIHV1aWQpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGludCBlbmFibGUoYm9vbCBlbmFibGUpOworICAgICAgICB2aXJ0dWFsIGludCBiYXRjaChuc2Vjc190IHNhbXBsZV9wZXJpb2QsIG5zZWNzX3QgYmF0Y2hfcGVyaW9kKTsKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBpbXBsZW1lbnQgVGhyZWFkIGZ1bmN0aW9uCisgICAgICAgIHZpcnR1YWwgYm9vbCB0aHJlYWRMb29wKCkgb3ZlcnJpZGU7CisKKyAgICAgICAgdm9pZCB3YWl0VW50aWxOZXh0U2FtcGxlKCk7CisKKyAgICAgICAgc2Vuc29yX3QgbVNlbnNvcjsKKyAgICAgICAgc3RkOjpzdHJpbmcgbVNlbnNvck5hbWU7CisKKyAgICAgICAgc3RkOjptdXRleCBtTG9jazsKKyAgICAgICAgc3RkOjptdXRleCBtUnVuTG9jazsKKyAgICAgICAgYm9vbCBtUnVuU3RhdGU7CisgICAgfTsKKyAgICAvLyBpbXBsZW1lbnQgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb24gZnVuY3Rpb24KKyAgICBCYXNlU2Vuc29yT2JqZWN0ICogY3JlYXRlU2Vuc29yKGNvbnN0IHN0ZDo6c3RyaW5nICZkZXZpY2VLZXkpIG92ZXJyaWRlOworCisgICAgc3A8Q29ubmVjdGlvbkRldGVjdG9yPiBtRmlsZURldGVjdG9yOworICAgIHNwPENvbm5lY3Rpb25EZXRlY3Rvcj4gbVNvY2tldERldGVjdG9yOworfTsKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgLy8gQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RZTkFNSUNfU0VOU09SX0RBRU1PTl9ICisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9EeW5hbWljU2Vuc29yTWFuYWdlci5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHluYW1pY1NlbnNvck1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNDkwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHluYW1pY1NlbnNvck1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIkJhc2VEeW5hbWljU2Vuc29yRGFlbW9uLmgiCisjaW5jbHVkZSAiQmFzZVNlbnNvck9iamVjdC5oIgorI2luY2x1ZGUgIkR1bW15RHluYW1pY0FjY2VsRGFlbW9uLmgiCisjaW5jbHVkZSAiRHluYW1pY1NlbnNvck1hbmFnZXIuaCIKKworI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL1N5c3RlbUNsb2NrLmg+CisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworRHluYW1pY1NlbnNvck1hbmFnZXIqIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpjcmVhdGVJbnN0YW5jZSgKKyAgICAgICAgaW50IGhhbmRsZUJhc2UsIGludCBoYW5kbGVDb3VudCwgU2Vuc29yRXZlbnRDYWxsYmFjayAqY2FsbGJhY2spIHsKKyAgICBhdXRvIG0gPSBuZXcgRHluYW1pY1NlbnNvck1hbmFnZXIoaGFuZGxlQmFzZSwgaGFuZGxlQmFzZSArIGhhbmRsZUNvdW50IC0gMSwgY2FsbGJhY2spOworICAgIG0tPm1EYWVtb25WZWN0b3IucHVzaF9iYWNrKG5ldyBEdW1teUR5bmFtaWNBY2NlbERhZW1vbigqbSkpOworICAgIHJldHVybiBtOworfQorCitEeW5hbWljU2Vuc29yTWFuYWdlcjo6RHluYW1pY1NlbnNvck1hbmFnZXIoCisgICAgICAgIGludCBoYW5kbGVCYXNlLCBpbnQgaGFuZGxlTWF4LCBTZW5zb3JFdmVudENhbGxiYWNrKiBjYWxsYmFjaykgOgorICAgICAgICBtSGFuZGxlUmFuZ2UoaGFuZGxlQmFzZSwgaGFuZGxlTWF4KSwKKyAgICAgICAgbUNhbGxiYWNrKGNhbGxiYWNrKSwKKyAgICAgICAgbUZpZm8oY2FsbGJhY2sgPyAwIDoga0ZpZm9TaXplKSwKKyAgICAgICAgbU5leHRIYW5kbGUoaGFuZGxlQmFzZSsxKSB7CisgICAgYXNzZXJ0KGhhbmRsZUJhc2UgPiAwICYmIGhhbmRsZU1heCA+IGhhbmRsZUJhc2UgKyAxKTsgLy8gaGFuZGxlQmFzZSBpcyByZXNlcnZlZAorCisgICAgbU1ldGFTZW5zb3IgPSAoY29uc3Qgc2Vuc29yX3QpIHsKKyAgICAgICAgIkR5bmFtaWMgU2Vuc29yIE1hbmFnZXIiLAorICAgICAgICAiR29vZ2xlIiwKKyAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uCisgICAgICAgIGhhbmRsZUJhc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlCisgICAgICAgIFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEsCisgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4UmFuZ2UKKyAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHV0aW9uCisgICAgICAgIDFlLTZmLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG93ZXIsIHZlcnkgc21hbGwgbnVtYmVyIGluc3RlYWQgb2YgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIHNpZ3VsYXJpdHkgaW4gYXBwCisgICAgICAgIChpbnQzMl90KSgxMDAwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluRGVsYXkKKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWZvUmVzZXJ2ZWRFdmVudENvdW50CisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlmb01heEV2ZW50Q291bnQKKyAgICAgICAgU0VOU09SX1NUUklOR19UWVBFX0RZTkFNSUNfU0VOU09SX01FVEEsCisgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZWRQZXJtaXNzaW9uCisgICAgICAgIChsb25nKSgxMDAwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4RGVsYXkKKyAgICAgICAgU0VOU09SX0ZMQUdfU1BFQ0lBTF9SRVBPUlRJTkdfTU9ERSB8IFNFTlNPUl9GTEFHX1dBS0VfVVAsCisgICAgICAgIHsgTlVMTCwgTlVMTCB9CisgICAgfTsKK30KKworRHluYW1pY1NlbnNvck1hbmFnZXI6On5EeW5hbWljU2Vuc29yTWFuYWdlcigpIHsKKyAgICAvLyBmcmVlIGFsbCBkYWVtb25zIGZpcnN0CisgICAgbURhZW1vblZlY3Rvci5jbGVhcigpOworfQorCitib29sIER5bmFtaWNTZW5zb3JNYW5hZ2VyOjpvd25zKGludCBoYW5kbGUpIGNvbnN0IHsKKyAgICByZXR1cm4gaGFuZGxlID49IG1IYW5kbGVSYW5nZS5maXJzdCAmJiBoYW5kbGUgPCBtSGFuZGxlUmFuZ2Uuc2Vjb25kOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OmFjdGl2YXRlKGludCBoYW5kbGUsIGJvb2wgZW5hYmxlKSB7CisgICAgaWYgKGhhbmRsZSA9PSBtSGFuZGxlUmFuZ2UuZmlyc3QpIHsKKyAgICAgICAgLy8gaWdub3JlZAorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBpbiBjYXNlIHRoZXJlIGlzIGEgcGVuZGluZyByZXBvcnQsIG5vdyBpdCBpcyB0aW1lIHRvIHJlbW92ZSBpdCBhcyBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1Mb2NrKTsKKyAgICAgICAgbVBlbmRpbmdSZXBvcnQuZXJhc2UoaGFuZGxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gb3BlcmF0ZVNlbnNvcihoYW5kbGUsCisgICAgICAgICAgICBbJmVuYWJsZV0gKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHMpLT5pbnQgeworICAgICAgICAgICAgICAgIHJldHVybiBzLT5lbmFibGUoZW5hYmxlKTsKKyAgICAgICAgICAgIH0pOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OmJhdGNoKGludCBoYW5kbGUsIG5zZWNzX3Qgc2FtcGxlX3BlcmlvZCwgbnNlY3NfdCBiYXRjaF9wZXJpb2QpIHsKKyAgICBpZiAoaGFuZGxlID09IG1IYW5kbGVSYW5nZS5maXJzdCkgeworICAgICAgICAvLyBpZ25vcmVkCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gb3BlcmF0ZVNlbnNvcihoYW5kbGUsCisgICAgICAgICAgICBbJnNhbXBsZV9wZXJpb2QsICZiYXRjaF9wZXJpb2RdIChzcDxCYXNlU2Vuc29yT2JqZWN0PiBzKS0+aW50IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcy0+YmF0Y2goc2FtcGxlX3BlcmlvZCwgYmF0Y2hfcGVyaW9kKTsKKyAgICAgICAgICAgIH0pOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OnNldERlbGF5KGludCBoYW5kbGUsIG5zZWNzX3Qgc2FtcGxlX3BlcmlvZCkgeworICAgIHJldHVybiBiYXRjaChoYW5kbGUsIHNhbXBsZV9wZXJpb2QsIDApOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OmZsdXNoKGludCBoYW5kbGUpIHsKKyAgICBpZiAoaGFuZGxlID09IG1IYW5kbGVSYW5nZS5maXJzdCkgeworICAgICAgICAvLyBUT0RPOiBzdWJtaXQgYSBmbHVzaCBjb21wbGV0ZSBoZXJlCisgICAgICAgIHN0YXRpYyBjb25zdCBzZW5zb3JzX2V2ZW50X3QgZXZlbnQgPSB7CisgICAgICAgICAgICAudHlwZSA9IFNFTlNPUl9UWVBFX01FVEFfREFUQSwKKyAgICAgICAgICAgIC5zZW5zb3IgPSBtSGFuZGxlUmFuZ2UuZmlyc3QsCisgICAgICAgICAgICAudGltZXN0YW1wID0gVElNRVNUQU1QX0FVVE9fRklMTCwgIC8vIHRpbWVzdGFtcCB3aWxsIGJlIGZpbGxlZCBhdCBkaXNwYXRjaGVyCisgICAgICAgIH07CisgICAgICAgIHN1Ym1pdEV2ZW50KG51bGxwdHIsIGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBvcGVyYXRlU2Vuc29yKGhhbmRsZSwgW10gKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHMpLT5pbnQge3JldHVybiBzLT5mbHVzaCgpO30pOworfQorCitpbnQgRHluYW1pY1NlbnNvck1hbmFnZXI6OnBvbGwoc2Vuc29yc19ldmVudF90ICogZGF0YSwgaW50IGNvdW50KSB7CisgICAgYXNzZXJ0KG1DYWxsYmFjayA9PSBudWxscHRyKTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUZpZm9Mb2NrKTsKKyAgICByZXR1cm4gbUZpZm8ucmVhZChkYXRhLCBjb3VudCk7Cit9CisKK2Jvb2wgRHluYW1pY1NlbnNvck1hbmFnZXI6OnJlZ2lzdGVyU2Vuc29yKHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvcikgeworICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsayhtTG9jayk7CisgICAgaWYgKG1SZXZlcnNlTWFwLmZpbmQoc2Vuc29yLmdldCgpKSAhPSBtUmV2ZXJzZU1hcC5lbmQoKSkgeworICAgICAgICBBTE9HRSgidHJ5aW5nIHRvIGFkZCB0aGUgc2FtZSBzZW5zb3IgdHdpY2UsIGlnbm9yZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGludCBoYW5kbGUgPSBnZXROZXh0QXZhaWxhYmxlSGFuZGxlKCk7CisgICAgaWYgKGhhbmRsZSA8IDApIHsKKyAgICAgICAgQUxPR0UoIlJ1bm5pbmcgb3V0IG9mIGhhbmRsZSwgcXVpdC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHRoZXNlIGVtcGxhY2Ugd2lsbCBhbHdheXMgYmUgc3VjY2Vzc2Z1bAorICAgIG1NYXAuZW1wbGFjZShoYW5kbGUsIHNlbnNvcik7CisgICAgbVJldmVyc2VNYXAuZW1wbGFjZShzZW5zb3IuZ2V0KCksIGhhbmRsZSk7CisgICAgc2Vuc29yLT5zZXRFdmVudENhbGxiYWNrKHRoaXMpOworCisgICAgYXV0byBlbnRyeSA9IG1QZW5kaW5nUmVwb3J0LmVtcGxhY2UoCisgICAgICAgICAgICBzdGQ6OnBpZWNld2lzZV9jb25zdHJ1Y3QsCisgICAgICAgICAgICBzdGQ6OmZvcndhcmRfYXNfdHVwbGUoaGFuZGxlKSwKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9hc190dXBsZShoYW5kbGUsIHNlbnNvcikpOworICAgIGlmIChlbnRyeS5zZWNvbmQpIHsKKyAgICAgICAgc3VibWl0RXZlbnQobnVsbHB0ciwgZW50cnkuZmlyc3QtPnNlY29uZC5nZW5lcmF0ZUNvbm5lY3Rpb25FdmVudChtSGFuZGxlUmFuZ2UuZmlyc3QpKTsKKyAgICB9CisgICAgcmV0dXJuIGVudHJ5LnNlY29uZDsKK30KKwordm9pZCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6dW5yZWdpc3RlclNlbnNvcihzcDxCYXNlU2Vuc29yT2JqZWN0PiBzZW5zb3IpIHsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUxvY2spOworICAgIGF1dG8gaSA9IG1SZXZlcnNlTWFwLmZpbmQoc2Vuc29yLmdldCgpKTsKKyAgICBpZiAoaSA9PSBtUmV2ZXJzZU1hcC5lbmQoKSkgeworICAgICAgICBBTE9HRSgiY2Fubm90IHJlbW92ZSBhIG5vbi1leGlzdCBzZW5zb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgaGFuZGxlID0gaS0+c2Vjb25kOworICAgIG1SZXZlcnNlTWFwLmVyYXNlKGkpOworICAgIG1NYXAuZXJhc2UoaGFuZGxlKTsKKworICAgIC8vIHdpbGwgbm90IGNsZWFuIHVwIG1QZW5kaW5nUmVwb3J0IGhlcmUsIGl0IHdpbGwgYmUgY2xlYW5lZCB1cCB3aGVuIGF0IGZpcnN0IGFjdGl2YXRlIGNhbGwuCisgICAgLy8gc2Vuc29yc2VydmljZSBpcyBndXJhbnRlZWQgdG8gY2FsbCBhY3RpdmF0ZSB1cG9uIGFycml2YWwgb2YgZHluYW1pYyBzZW5zb3IgbWV0YSBjb25uZWN0aW9uCisgICAgLy8gZXZlbnQuCisKKyAgICAvLyBzZW5kIGRpc2Nvbm5lY3Rpb24gZXZlbnQKKyAgICBzZW5zb3JzX2V2ZW50X3QgZXZlbnQ7CisgICAgQ29ubmVjdGlvblJlcG9ydDo6ZmlsbERpc2Nvbm5lY3Rpb25FdmVudCgmZXZlbnQsIG1IYW5kbGVSYW5nZS5maXJzdCwgaGFuZGxlKTsKKyAgICBzdWJtaXRFdmVudChudWxscHRyLCBldmVudCk7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6c3VibWl0RXZlbnQoc3A8QmFzZVNlbnNvck9iamVjdD4gc291cmNlLCBjb25zdCBzZW5zb3JzX2V2ZW50X3QgJmUpIHsKKyAgICBpbnQgaGFuZGxlOworICAgIGlmIChzb3VyY2UgPT0gbnVsbHB0cikgeworICAgICAgICBoYW5kbGUgPSBtSGFuZGxlUmFuZ2UuZmlyc3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1Mb2NrKTsKKyAgICAgICAgYXV0byBpID0gbVJldmVyc2VNYXAuZmluZChzb3VyY2UuZ2V0KCkpOworICAgICAgICBpZiAoaSA9PSBtUmV2ZXJzZU1hcC5lbmQoKSkgeworICAgICAgICAgICAgQUxPR0UoImNhbm5vdCBzdWJtaXQgZXZlbnQgZm9yIHNlbnNvciB0aGF0IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkIik7CisgICAgICAgICAgICByZXR1cm4gTkFNRV9OT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICAgICAgaGFuZGxlID0gaS0+c2Vjb25kOworICAgIH0KKworICAgIC8vIG1ha2luZyBhIGNvcHkgb2YgZXZlbnRzLCBwcmVwYXJlIGZvciBlZGl0aW5nCisgICAgc2Vuc29yc19ldmVudF90IGV2ZW50ID0gZTsKKyAgICBldmVudC52ZXJzaW9uID0gc2l6ZW9mKGV2ZW50KTsKKworICAgIC8vIHNwZWNpYWwgY2FzZSBvZiBmbHVzaCBjb21wbGV0ZQorICAgIGlmIChldmVudC50eXBlID09IFNFTlNPUl9UWVBFX01FVEFfREFUQSkgeworICAgICAgICBldmVudC5zZW5zb3IgPSAwOworICAgICAgICBldmVudC5tZXRhX2RhdGEuc2Vuc29yID0gaGFuZGxlOworICAgIH0gZWxzZSB7CisgICAgICAgIGV2ZW50LnNlbnNvciA9IGhhbmRsZTsKKyAgICB9CisKKyAgICAvLyBzZXQgdGltZXN0YW1wIGlmIGl0IGlzIGRlZmF1bHQgdmFsdWUKKyAgICBpZiAoZXZlbnQudGltZXN0YW1wID09IFRJTUVTVEFNUF9BVVRPX0ZJTEwpIHsKKyAgICAgICAgZXZlbnQudGltZXN0YW1wID0gZWxhcHNlZFJlYWx0aW1lTmFubygpOworICAgIH0KKworICAgIGlmIChtQ2FsbGJhY2spIHsKKyAgICAgICAgLy8gZXh0ZW50aW9uIG1vZGUsIGNhbGxpbmcgY2FsbGJhY2sgZGlyZWN0bHkKKyAgICAgICAgaW50IHJldDsKKworICAgICAgICByZXQgPSBtQ2FsbGJhY2stPnN1Ym1pdEV2ZW50KG51bGxwdHIsIGV2ZW50KTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCJEeW5hbWljU2Vuc29yTWFuYWdlciBjYWxsYmFjayBmYWlsZWQsIHJldDogJWQiLCByZXQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gc3RhbmRhbG9uZSBtb2RlLCBhZGQgZXZlbnQgdG8gaW50ZXJuYWwgYnVmZmVyIGZvciBwb2xsKCkgdG8gcGljayB1cAorICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGsobUZpZm9Mb2NrKTsKKyAgICAgICAgaWYgKG1GaWZvLndyaXRlKCZldmVudCwgMSkgPCAwKSB7CisgICAgICAgICAgICBBTE9HRSgiRHluYW1pY1NlbnNvck1hbmFnZXIgZmlmbyBmdWxsIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBEeW5hbWljU2Vuc29yTWFuYWdlcjo6Z2V0TmV4dEF2YWlsYWJsZUhhbmRsZSgpIHsKKyAgICBpZiAobU5leHRIYW5kbGUgPT0gbUhhbmRsZVJhbmdlLnNlY29uZCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtTmV4dEhhbmRsZSsrOworfQorCitjb25zdCBzZW5zb3JfdCYgRHluYW1pY1NlbnNvck1hbmFnZXI6OmdldER5bmFtaWNNZXRhU2Vuc29yKCkgY29uc3QgeworICAgIHJldHVybiBtTWV0YVNlbnNvcjsKK30KKworRHluYW1pY1NlbnNvck1hbmFnZXI6OkNvbm5lY3Rpb25SZXBvcnQ6OkNvbm5lY3Rpb25SZXBvcnQoCisgICAgICAgIGludCBoYW5kbGUsIHNwPEJhc2VTZW5zb3JPYmplY3Q+IHNlbnNvcikgOgorICAgICAgICBtU2Vuc29yKCooc2Vuc29yLT5nZXRTZW5zb3IoKSkpLAorICAgICAgICBtTmFtZShtU2Vuc29yLm5hbWUpLAorICAgICAgICBtVmVuZG9yKG1TZW5zb3IudmVuZG9yKSwKKyAgICAgICAgbVBlcm1pc3Npb24obVNlbnNvci5yZXF1aXJlZFBlcm1pc3Npb24pLAorICAgICAgICBtU3RyaW5nVHlwZShtU2Vuc29yLnN0cmluZ1R5cGUpLAorICAgICAgICBtR2VuZXJhdGVkKGZhbHNlKSB7CisgICAgbVNlbnNvci5uYW1lID0gbU5hbWUuY19zdHIoKTsKKyAgICBtU2Vuc29yLnZlbmRvciA9IG1WZW5kb3IuY19zdHIoKTsKKyAgICBtU2Vuc29yLnJlcXVpcmVkUGVybWlzc2lvbiA9IG1QZXJtaXNzaW9uLmNfc3RyKCk7CisgICAgbVNlbnNvci5zdHJpbmdUeXBlID0gbVN0cmluZ1R5cGUuY19zdHIoKTsKKyAgICBtU2Vuc29yLmhhbmRsZSA9IGhhbmRsZTsKKyAgICBtZW1zZXQoJm1FdmVudCwgMCwgc2l6ZW9mKG1FdmVudCkpOworICAgIG1FdmVudC52ZXJzaW9uID0gc2l6ZW9mKG1FdmVudCk7CisgICAgc2Vuc29yLT5nZXRVdWlkKG1VdWlkKTsKKyAgICBBTE9HVigiQ29ubmVjdGlvbiByZXBvcnQgaW5pdDogbmFtZSA9ICVzLCBoYW5kbGUgPSAlZCIsIG1TZW5zb3IubmFtZSwgbVNlbnNvci5oYW5kbGUpOworfQorCitEeW5hbWljU2Vuc29yTWFuYWdlcjo6Q29ubmVjdGlvblJlcG9ydDo6fkNvbm5lY3Rpb25SZXBvcnQoKSB7CisgICAgQUxPR1YoIkNvbm5lY3Rpb24gcmVwb3J0IGR0b3I6IG5hbWUgPSAlcywgaGFuZGxlID0gJWQiLCBtU2Vuc29yLm5hbWUsIG1TZW5zb3IuaGFuZGxlKTsKK30KKworY29uc3Qgc2Vuc29yc19ldmVudF90JiBEeW5hbWljU2Vuc29yTWFuYWdlcjo6Q29ubmVjdGlvblJlcG9ydDo6CisgICAgICAgIGdlbmVyYXRlQ29ubmVjdGlvbkV2ZW50KGludCBtZXRhSGFuZGxlKSB7CisgICAgaWYgKCFtR2VuZXJhdGVkKSB7CisgICAgICAgIG1FdmVudC5zZW5zb3IgPSBtZXRhSGFuZGxlOworICAgICAgICBtRXZlbnQudHlwZSA9IFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEE7CisgICAgICAgIG1FdmVudC50aW1lc3RhbXAgPSBlbGFwc2VkUmVhbHRpbWVOYW5vKCk7CisgICAgICAgIG1FdmVudC5keW5hbWljX3NlbnNvcl9tZXRhID0KKyAgICAgICAgICAgICAgICAoZHluYW1pY19zZW5zb3JfbWV0YV9ldmVudF90KSB7dHJ1ZSwgbVNlbnNvci5oYW5kbGUsICZtU2Vuc29yLCB7MH19OworICAgICAgICBtZW1jcHkoJm1FdmVudC5keW5hbWljX3NlbnNvcl9tZXRhLnV1aWQsICZtVXVpZCwgc2l6ZW9mKG1FdmVudC5keW5hbWljX3NlbnNvcl9tZXRhLnV1aWQpKTsKKyAgICAgICAgbUdlbmVyYXRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBtRXZlbnQ7Cit9CisKK3ZvaWQgRHluYW1pY1NlbnNvck1hbmFnZXI6OkNvbm5lY3Rpb25SZXBvcnQ6OgorICAgICAgICBmaWxsRGlzY29ubmVjdGlvbkV2ZW50KHNlbnNvcnNfZXZlbnRfdCogZXZlbnQsIGludCBtZXRhSGFuZGxlLCBpbnQgaGFuZGxlKSB7CisgICAgbWVtc2V0KGV2ZW50LCAwLCBzaXplb2Yoc2Vuc29yc19ldmVudF90KSk7CisgICAgZXZlbnQtPnZlcnNpb24gPSBzaXplb2Yoc2Vuc29yc19ldmVudF90KTsKKyAgICBldmVudC0+c2Vuc29yID0gbWV0YUhhbmRsZTsKKyAgICBldmVudC0+dHlwZSA9IFNFTlNPUl9UWVBFX0RZTkFNSUNfU0VOU09SX01FVEE7CisgICAgZXZlbnQtPnRpbWVzdGFtcCA9IGVsYXBzZWRSZWFsdGltZU5hbm8oKTsKKyAgICBldmVudC0+ZHluYW1pY19zZW5zb3JfbWV0YS5jb25uZWN0ZWQgPSBmYWxzZTsKKyAgICBldmVudC0+ZHluYW1pY19zZW5zb3JfbWV0YS5oYW5kbGUgPSBoYW5kbGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFNlbnNvckhhbEV4dAorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R5bmFtaWNTZW5zb3JNYW5hZ2VyLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvRHluYW1pY1NlbnNvck1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGZkNDcyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0R5bmFtaWNTZW5zb3JNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfU0VOU09SSEFMX0VYVF9EWU5BTUlDX1NFTlNPUl9NQU5BR0VSX0gKKyNkZWZpbmUgQU5EUk9JRF9TRU5TT1JIQUxfRVhUX0RZTkFNSUNfU0VOU09SX01BTkFHRVJfSAorCisjaW5jbHVkZSAiU2Vuc29yRXZlbnRDYWxsYmFjay5oIgorI2luY2x1ZGUgIlJpbmdCdWZmZXIuaCIKKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworY2xhc3MgQmFzZUR5bmFtaWNTZW5zb3JEYWVtb247CisKK2NsYXNzIER5bmFtaWNTZW5zb3JNYW5hZ2VyIDogcHVibGljIFNlbnNvckV2ZW50Q2FsbGJhY2sgeworcHVibGljOgorICAgIC8vIGhhbmRsZUJhc2UgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBkeW5hbWljIHNlbnNvciBtZXRhIHNlbnNvci4KKyAgICAvLyBoYW5kbGVNYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gaGFuZGxlQmFzZSArIDEuCisgICAgLy8gVGhpcyBjbGFzcyBoYXMgdHdvIG9wZXJhdGlvbiBtb2RlIGRlcGVuZGluZyBvbiBjYWxsYmFjazogMSkgZXh0ZW5zaW9uLCAyKSBzdGFuZC1hbG9uZS4KKyAgICAvLyBJbiBleHRlbnNpb24gbW9kZSwgY2FsbGJhY2sgbXVzdCBub3QgYmUgbnVsbHB0ci4gU2Vuc29yIGV2ZW50IGdlbmVyYXRlZCB3aWxsIGJlIHN1Ym1pdHRlZCB0bworICAgIC8vIGJ1ZmZlciBvZiBwcmltYXJ5IHNlbnNvciBIQUwgaW1wbGVtZW50YXRpb24uIEluIHN0YW5kLWFsb25lIG1vZGUsIGNhbGxiYWNrIG11c3QgYmUgbnVsbHB0ci4KKyAgICAvLyBHZW5lcmF0ZWQgc2Vuc29yIGV2ZW50cyB3aWxsIGJlIGFkZGVkIGludG8gaW50ZXJuYWwgYnVmZmVyIHdhaXRpbmcgZm9yIHBvbGwoKSBmdW5jdGlvbiB0bworICAgIC8vIHBpY2sgdXAuCisgICAgLy8KKyAgICBzdGF0aWMgRHluYW1pY1NlbnNvck1hbmFnZXIqIGNyZWF0ZUluc3RhbmNlKAorICAgICAgICAgICAgaW50IGhhbmRsZUJhc2UsIGludCBoYW5kbGVDb3VudCwgU2Vuc29yRXZlbnRDYWxsYmFjayAqY2FsbGJhY2spOworICAgIHZpcnR1YWwgfkR5bmFtaWNTZW5zb3JNYW5hZ2VyKCk7CisKKyAgICAvLyBjYWxscyB0byBhZGQgb3IgcmVtb3ZlIHNlbnNvciwgY2FsbGVkIGZyb20gc2Vuc29yIGRhZW1vbgorICAgIGJvb2wgcmVnaXN0ZXJTZW5zb3Ioc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTZW5zb3Ioc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yKTsKKworICAgIC8vIERldGVybWluZSBpZiBhIHNlbnNvciBoYW5kbGUgaXMgaW4gdGhlIHJhbmdlIGRlZmluZWQgaW4gY29uc3RydWN0b3IuCisgICAgLy8gSXQgZG9lcyBub3QgdGVzdCBpZiBzZW5zb3IgaGFuZGxlIGlzIHZhbGlkLgorICAgIGJvb2wgb3ducyhpbnQgaGFuZGxlKSBjb25zdDsKKworICAgIC8vIGhhbmRsZXMgc2Vuc29yIGhhbCByZXF1ZXN0cy4KKyAgICBpbnQgYWN0aXZhdGUoaW50IGhhbmRsZSwgYm9vbCBlbmFibGUpOworICAgIGludCBiYXRjaChpbnQgaGFuZGxlLCBuc2Vjc190IHNhbXBsZV9wZXJpb2QsIG5zZWNzX3QgYmF0Y2hfcGVyaW9kKTsKKyAgICBpbnQgc2V0RGVsYXkoaW50IGhhbmRsZSwgbnNlY3NfdCBzYW1wbGVfcGVyaW9kKTsKKyAgICBpbnQgZmx1c2goaW50IGhhbmRsZSk7CisgICAgaW50IHBvbGwoc2Vuc29yc19ldmVudF90ICogZGF0YSwgaW50IGNvdW50KTsKKworICAgIC8vIFNlbnNvckV2ZW50Q2FsbGJhY2sKKyAgICB2aXJ0dWFsIGludCBzdWJtaXRFdmVudChzcDxCYXNlU2Vuc29yT2JqZWN0PiwgY29uc3Qgc2Vuc29yc19ldmVudF90ICZlKSBvdmVycmlkZTsKKworICAgIC8vIGdldCBtZXRhIHNlbnNvciBzdHJ1Y3QKKyAgICBjb25zdCBzZW5zb3JfdCYgZ2V0RHluYW1pY01ldGFTZW5zb3IoKSBjb25zdDsKK3Byb3RlY3RlZDoKKyAgICBEeW5hbWljU2Vuc29yTWFuYWdlcihpbnQgaGFuZGxlQmFzZSwgaW50IGhhbmRsZU1heCwgU2Vuc29yRXZlbnRDYWxsYmFjayogY2FsbGJhY2spOworcHJpdmF0ZToKKyAgICAvLyBhIGhlbHBlciBjbGFzcyB1c2VkIGZvciBnZW5lcmF0ZSBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIHJlcG9ydAorICAgIGNsYXNzIENvbm5lY3Rpb25SZXBvcnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ29ubmVjdGlvblJlcG9ydCgpIHt9CisgICAgICAgIENvbm5lY3Rpb25SZXBvcnQoaW50IGhhbmRsZSwgc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yKTsKKyAgICAgICAgfkNvbm5lY3Rpb25SZXBvcnQoKTsKKyAgICAgICAgY29uc3Qgc2Vuc29yc19ldmVudF90JiBnZW5lcmF0ZUNvbm5lY3Rpb25FdmVudChpbnQgbWV0YUhhbmRsZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGZpbGxEaXNjb25uZWN0aW9uRXZlbnQoc2Vuc29yc19ldmVudF90KiBldmVudCwgaW50IG1ldGFIYW5kbGUsIGludCBoYW5kbGUpOworICAgIHByaXZhdGU6CisgICAgICAgIHNlbnNvcl90IG1TZW5zb3I7CisgICAgICAgIHN0ZDo6c3RyaW5nIG1OYW1lOworICAgICAgICBzdGQ6OnN0cmluZyBtVmVuZG9yOworICAgICAgICBzdGQ6OnN0cmluZyBtUGVybWlzc2lvbjsKKyAgICAgICAgc3RkOjpzdHJpbmcgbVN0cmluZ1R5cGU7CisgICAgICAgIHNlbnNvcnNfZXZlbnRfdCBtRXZlbnQ7CisgICAgICAgIHVpbnQ4X3QgbVV1aWRbMTZdOworICAgICAgICBib29sIG1HZW5lcmF0ZWQ7CisgICAgICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKENvbm5lY3Rpb25SZXBvcnQpOworICAgIH07CisKKyAgICAvLyByZXR1cm5zIG5leHQgYXZhaWxhYmxlIGhhbmRsZSB0byB1c2UgdXBvbiBhIG5ldyBzZW5zb3IgY29ubmVjdGlvbiwgb3IgLTEgaWYgd2UgcnVuIG91dC4KKyAgICBpbnQgZ2V0TmV4dEF2YWlsYWJsZUhhbmRsZSgpOworCisgICAgLy8gVEY6ICBpbnQgZm9vKHNwPEJhc2VTZW5zb3JPYmplY3Q+IG9iaik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRGPgorICAgIGludCBvcGVyYXRlU2Vuc29yKGludCBoYW5kbGUsIFRGIGYpIGNvbnN0IHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxrKG1Mb2NrKTsKKyAgICAgICAgY29uc3QgYXV0byBpID0gbU1hcC5maW5kKGhhbmRsZSk7CisgICAgICAgIGlmIChpID09IG1NYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgc3A8QmFzZVNlbnNvck9iamVjdD4gcyA9IGktPnNlY29uZC5wcm9tb3RlKCk7CisgICAgICAgIGlmIChzID09IG51bGxwdHIpIHsKKyAgICAgICAgICAgIC8vIHNlbnNvciBvYmplY3QgaXMgYWxyZWFkeSBnb25lCisgICAgICAgICAgICByZXR1cm4gQkFEX1ZBTFVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmKHMpOworICAgIH0KKworICAgIC8vIGF2YWlsYWJsZSBzZW5zb3IgaGFuZGxlIHNwYWNlCisgICAgY29uc3Qgc3RkOjpwYWlyPGludCwgaW50PiBtSGFuZGxlUmFuZ2U7CisgICAgc2Vuc29yX3QgbU1ldGFTZW5zb3I7CisKKyAgICAvLyBpbW11dGFibGUgcG9pbnRlciB0byBldmVudCBjYWxsYmFjaywgdXNlZCBpbiBleHRlbnRpb24gbW9kZS4KKyAgICBTZW5zb3JFdmVudENhbGxiYWNrICogY29uc3QgbUNhbGxiYWNrOworCisgICAgLy8gUmluZ0J1ZmZlciB1c2VkIGluIHN0YW5kYWxvbmUgbW9kZQorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtGaWZvU2l6ZSA9IDQwOTY7IC8vNEsgZXZlbnRzCisgICAgbXV0YWJsZSBzdGQ6Om11dGV4IG1GaWZvTG9jazsKKyAgICBSaW5nQnVmZmVyIG1GaWZvOworCisgICAgLy8gbWFwcGluZyBiZXR3ZWVuIGhhbmRsZSBhbmQgU2Vuc29yT2JqZWN0cworICAgIG11dGFibGUgc3RkOjptdXRleCBtTG9jazsKKyAgICBpbnQgbU5leHRIYW5kbGU7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGludCwgd3A8QmFzZVNlbnNvck9iamVjdD4gPiBtTWFwOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDx2b2lkICosIGludD4gbVJldmVyc2VNYXA7CisgICAgbXV0YWJsZSBzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCBDb25uZWN0aW9uUmVwb3J0PiBtUGVuZGluZ1JlcG9ydDsKKworICAgIC8vIGRhZW1vbnMKKyAgICBzdGQ6OnZlY3RvcjxzcDxCYXNlRHluYW1pY1NlbnNvckRhZW1vbj4+IG1EYWVtb25WZWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBTZW5zb3JIYWxFeHQKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIEFORFJPSURfU0VOU09SSEFMX0VYVF9EWU5BTUlDX1NFTlNPUl9NQU5BR0VSX0gKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9BbmRyb2lkLm1rIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExZDg5MAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsOTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK0xPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKK0NPTU1PTl9DRkxBR1MgOj0gLVdhbGwgLVdlcnJvciAtV2V4dHJhCisKK2hpZHBhcnNlcl9zcmMgOj0gXAorICAgIEhpZEdsb2JhbC5jcHAgXAorICAgIEhpZEl0ZW0uY3BwIFwKKyAgICBIaWRMb2NhbC5jcHAgXAorICAgIEhpZFBhcnNlci5jcHAgXAorICAgIEhpZFJlcG9ydC5jcHAgXAorICAgIEhpZFRyZWUuY3BwCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGxpYmhpZHBhcnNlcgorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKyMgaW5kZW5kZWQgdG8gYmUgdXNlZCBieSBoYWwgY29tcG9uZW50cywgdGh1cyBwcm9waWV0YXJ5CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKSAtRExPR19UQUc9XCJIaWRVdGlsXCIKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGhpZHBhcnNlcl9zcmMpCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmJhc2UKK0xPQ0FMX0VYUE9SVF9DX0lOQ0xVREVfRElSUyA6PSAkKExPQ0FMX1BBVEgpCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKKyMKKyMgaG9zdCBzaWRlIHNoYXJlZCBsaWJyYXJ5IChmb3IgaG9zdCB0ZXN0LCBleGFtcGxlLCBldGMpCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBsaWJoaWRwYXJzZXJfaG9zdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQoaGlkcGFyc2VyX3NyYykKKworTE9DQUxfRVhQT1JUX0NfSU5DTFVERV9ESVJTIDo9ICQoTE9DQUxfUEFUSCkKK2luY2x1ZGUgJChCVUlMRF9IT1NUX1NIQVJFRF9MSUJSQVJZKQorCisjCisjIEV4YW1wbGUgb2YgSGlkUGFyc2VyCisjCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBoaWRwYXJzZXJfZXhhbXBsZQorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworTE9DQUxfQ0ZMQUdTICs9ICQoQ09NTU9OX0NGTEFHUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisgICAgJChoaWRwYXJzZXJfc3JjKSBcCisgICAgdGVzdC9IaWRQYXJzZXJFeGFtcGxlLmNwcCBcCisgICAgdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5jcHAKKworTE9DQUxfQ19JTkNMVURFUyArPSAkKExPQ0FMX1BBVEgpL3Rlc3QKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCisKKyMKKyMgQW5vdGhlciBleGFtcGxlIG9mIEhpZFBhcnNlcgorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9NT0RVTEUgOj0gaGlkcGFyc2VyX2V4YW1wbGUyCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorCitMT0NBTF9DRkxBR1MgKz0gJChDT01NT05fQ0ZMQUdTKQorTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICAkKGhpZHBhcnNlcl9zcmMpIFwKKyAgICB0ZXN0L0hpZFBhcnNlckV4YW1wbGUyLmNwcCBcCisgICAgdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5jcHAKKworTE9DQUxfQ19JTkNMVURFUyArPSAkKExPQ0FMX1BBVEgpL3Rlc3QKK2luY2x1ZGUgJChCVUlMRF9IT1NUX0VYRUNVVEFCTEUpCisKKyMKKyMgVGVzdCBmb3IgVHJpU3RhdGUgdGVtcGxhdGUKKyMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IHRyaXN0YXRlX3Rlc3QKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCisKK0xPQ0FMX0NGTEFHUyArPSAkKENPTU1PTl9DRkxBR1MpCitMT0NBTF9TUkNfRklMRVMgOj0gdGVzdC9UcmlTdGF0ZVRlc3QuY3BwCisKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAorICAgICBsaWJndGVzdCBcCisgICAgIGxpYmd0ZXN0X21haW4KKworTE9DQUxfQ19JTkNMVURFUyArPSAkKExPQ0FMX1BBVEgpL3Rlc3QKK2luY2x1ZGUgJChCVUlMRF9IT1NUX05BVElWRV9URVNUKQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZERlZnMuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWREZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0NDVkYgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWREZWZzLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRERFRlNfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURERUZTX0hfCisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworLy8gSElEIHNwZWNpZmljYXRpb24gY29uc3RhbnRzIGRlZmluaXRpb24KKy8vCisvLyBEZWZpbml0aW9ucyBhcmUgZnJvbSBISUQgc3BlY2lmaWNhdGlvbiB2MS4xMSwgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20gaHR0cDovL3d3dy51c2Iub3JnCisvLworLy8gUHJlZmVycmVkIG5hbWVzcGFjZSBmb3IgbmFtZXNwYWNlIHJlc3RyaWN0aW9uIHRoYW4gZW51bSBjbGFzcyBhcyBlbnVtIGNsYXNzIGhhcyBzdHJvbmcgdHlwZQorLy8gd2hpY2ggaXMgaW5jb252ZW5pZW50IGluIGEgcGFyc2VyLCBpbiB3aGljaCBpbnB1dCBiaW5hcnkgdmFsdWVzIGhhcyB0byBiZSBjb21wYXJlZCB3aXRoIHRoZXNlCisvLyBkZWZpbml0aW9ucyBmcmVxdW5ldGx5LgorbmFtZXNwYWNlIEhpZERlZiB7CisvLyBIaWQgc3BlYyA2LjIuMi4zCituYW1lc3BhY2UgVGFnVHlwZSB7CitlbnVtIHsKKyAgICBNQUlOLAorICAgIEdMT0JBTCwKKyAgICBMT0NBTCwKKyAgICBSRVNFUlZFRAorfTsKK30gLy8gbmFtZXNwYWNlIFRhZ1R5cGUKKworLy8gSElEIHNwZWMgNi4yLjIuNAorbmFtZXNwYWNlIFJlcG9ydEZsYWcgeworZW51bSB7CisgICAgREFUQV9DT05TVCA9IDEsCisgICAgQVJSQVlfVkFSSUFCTEUgPSAyLAorICAgIFdSQVAgPSA0LAorICAgIE5PTkxJTkVBUiA9IDgsCisgICAgTk9fUFJFRkVSUkVEID0gMHgxMCwKKyAgICBOVUxMX1NUQVRFID0gMHgyMCwKKyAgICBWT0xBVElMRSA9IDB4NDAsCisgICAgLy8gYml0IDcgcmVzZXJ2ZWQKKyAgICBCVUZGRVJFRF9CWVRFUyA9IDB4MTAwCit9OworfSAvLyBuYW1lc3BhY2UgUmVwb3J0RmxhZworCisvLyBISUQgc3BlYyA2LjIuMi41CituYW1lc3BhY2UgTWFpblRhZyB7CitlbnVtIHsKKyAgICBJTlBVVCA9IDgsCisgICAgT1VUUFVUID0gOSwKKyAgICBDT0xMRUNUSU9OID0gMTAsCisgICAgRkVBVFVSRSA9IDExLAorICAgIEVORF9DT0xMRUNUSU9OID0gMTIsCisgICAgTE9OR19JVEVNID0gMTUsCit9OworfSAvLyBuYW1lc3BhY2UgTWFpblRhZworCisvLyBISUQgc3BlYyA2LjIuMi42CituYW1lc3BhY2UgQ29sbGVjdGlvblR5cGUgeworZW51bSB7CisgICAgUEhZU0lDQUwgPSAwLAorICAgIEFQUExJQ0FUSU9OLAorICAgIExPR0lDQUwsCisgICAgUkVQT1JULAorICAgIE5BTUVEX0FSUkFZLAorICAgIFVTQUdFX1NXSVRDSCwKKyAgICBVU0FHRV9NT0RJRklFUgorfTsKK30gLy8gbmFtZXNwYWNlIENvbGxlY3Rpb25UeXBlCisKKy8vIEhJRCBzcGVjIDYuMi4yLjcKK25hbWVzcGFjZSBHbG9iYWxUYWcgeworZW51bSB7CisgICAgVVNBR0VfUEFHRSwKKyAgICBMT0dJQ0FMX01JTklNVU0sCisgICAgTE9HSUNBTF9NQVhJTVVNLAorICAgIFBIWVNJQ0FMX01JTklNVU0sCisgICAgUEhZU0lDQUxfTUFYSU1VTSwKKyAgICBVTklUX0VYUE9ORU5ULAorICAgIFVOSVQsCisgICAgUkVQT1JUX1NJWkUsCisgICAgUkVQT1JUX0lELAorICAgIFJFUE9SVF9DT1VOVCwKKyAgICBQVVNILAorICAgIFBPUAorfTsKK30gLy9uYW1lc3BhY2UgR2xvYmFsVGFnCisKKy8vIEhJRCBzcGVjIDYuMi4yLjgKK25hbWVzcGFjZSBMb2NhbFRhZyB7CitlbnVtIEhpZExvY2FsVGFnIHsKKyAgICBVU0FHRSwKKyAgICBVU0FHRV9NSU5JTVVNLAorICAgIFVTQUdFX01BWElNVU0sCisgICAgREVTSUdOQVRPUl9JTkRFWCwKKyAgICBERVNJR05BVE9SX01JTklNVU0sCisgICAgREVTSUdOQVRPUl9NQVhJTVVNLAorICAgIC8vIHRoZXJlIGlzIGEgaG9sZSBoZXJlIGluIHRoZSBzcGVjCisgICAgU1RSSU5HX0lOREVYID0gNywKKyAgICBTVFJJTkdfTUlOSU1VTSwKKyAgICBTVFJJTkdfTUFYSU1VTSwKKyAgICBERUxJTUlUT1IKK307Cit9IC8vIG5hbWVzcGFjZSBMb2NhbFRhZworCit9IC8vbmFtZXNwYWNlIEhpZERlZgorfSAvL25hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX0hJRERFRlNfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRHbG9iYWwuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEdsb2JhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0NzEzYgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRHbG9iYWwuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWREZWZzLmgiCisjaW5jbHVkZSAiSGlkR2xvYmFsLmgiCisjaW5jbHVkZSAiSGlkTG9nLmgiCisKK25hbWVzcGFjZSBIaWRVdGlsIHsKK3VzaW5nIG5hbWVzcGFjZSBIaWREZWY6Okdsb2JhbFRhZzsKKworYm9vbCBIaWRHbG9iYWw6OmFwcGVuZChjb25zdCBIaWRJdGVtICZpKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6VGFnVHlwZTsKKyAgICBpZiAoaS50eXBlICE9IEdMT0JBTCkgeworICAgICAgICBMT0dfRSA8PCAiSGlkR2xvYmFsOjphcHBlbmQgY2Fubm90IHByb2Nlc3MgdGFnIHRoYXQgaXMgbm90IGdsb2JhbCwgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGkudGFnID09IFBVU0ggfHwgaS50YWcgPT0gUE9QKSB7CisgICAgICAgIExPR19FIDw8ICJQVVNIIGFuZCBQT1Agc2hvdWxkIGJlIGhhbmRsZWQgaW4gSGlkR2xvYmFsU3RhY2ssICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBzaWduZWRJbnRlZ2VyOworICAgIHVuc2lnbmVkIHVuc2lnbmVkSW50ZWdlcjsKKyAgICBib29sIHNpZ25lZEVycm9yID0gIWkuZGF0YUFzU2lnbmVkKCZzaWduZWRJbnRlZ2VyKTsKKyAgICBib29sIHVuc2lnbmVkRXJyb3IgPSAhaS5kYXRhQXNVbnNpZ25lZCgmdW5zaWduZWRJbnRlZ2VyKTsKKworICAgIGJvb2wgdmFsdWVFcnJvciA9IGZhbHNlOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICBzd2l0Y2ggKGkudGFnKSB7CisgICAgICAgIGNhc2UgVVNBR0VfUEFHRToKKyAgICAgICAgICAgIHVzYWdlUGFnZSA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTE9HSUNBTF9NSU5JTVVNOgorICAgICAgICAgICAgbG9naWNhbE1pbiA9IHNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMT0dJQ0FMX01BWElNVU06CisgICAgICAgICAgICBsb2dpY2FsTWF4ID0gc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSBzaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBIWVNJQ0FMX01JTklNVU06CisgICAgICAgICAgICBwaHlzaWNhbE1pbiA9IHNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQSFlTSUNBTF9NQVhJTVVNOgorICAgICAgICAgICAgcGh5c2ljYWxNYXggPSBzaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVU5JVF9FWFBPTkVOVDoKKyAgICAgICAgICAgIGV4cG9uZW50ID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVTklUOgorICAgICAgICAgICAgdW5pdCA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVQT1JUX1NJWkU6CisgICAgICAgICAgICByZXBvcnRTaXplID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRVBPUlRfSUQ6CisgICAgICAgICAgICByZXBvcnRJZCA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVQT1JUX0NPVU5UOgorICAgICAgICAgICAgcmVwb3J0Q291bnQgPSB1bnNpZ25lZEludGVnZXI7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HX0UgPDwgInVua25vd24gZ2xvYmFsIHRhZywgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZhbHVlRXJyb3IpIHsKKyAgICAgICAgTE9HX0UgPDwgIkNhbm5vdCBnZXQgc2lnbmVkIC8gdW5zaWduZWQgZGF0YSBhdCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgIHJldCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitib29sIEhpZEdsb2JhbFN0YWNrOjphcHBlbmQoY29uc3QgSGlkSXRlbSAmaSkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlRhZ1R5cGU7CisgICAgaWYgKGkudHlwZSAhPSBHTE9CQUwpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICBpZiAoaS50YWcgPT0gUFVTSCkgeworICAgICAgICBtU3RhY2sucHVzaF9iYWNrKHRvcCgpKTsKKyAgICB9IGVsc2UgaWYgKGkudGFnID09IFBPUCkgeworICAgICAgICBtU3RhY2sucG9wX2JhY2soKTsKKyAgICAgICAgaWYgKG1TdGFjay5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgbVN0YWNrLnB1c2hfYmFjayhIaWRHbG9iYWwoKSk7IC8vIGZhaWwtc2FmZQorICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICByZXQgPSBtU3RhY2suYmFjaygpLmFwcGVuZChpKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworSGlkR2xvYmFsU3RhY2s6OkhpZEdsb2JhbFN0YWNrKCkgeworICAgIC8vIGRlZmF1bHQgZWxlbWVudAorICAgIG1TdGFjay5wdXNoX2JhY2soSGlkR2xvYmFsKCkpOworfQorCitjb25zdCBIaWRHbG9iYWwmIEhpZEdsb2JhbFN0YWNrOjp0b3AoKSBjb25zdCB7CisgICAgcmV0dXJuIG1TdGFjay5iYWNrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRHbG9iYWwuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRHbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTEzOWQwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEdsb2JhbC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJREdMT0JBTF9IXworI2RlZmluZSBISURVVElMX0hJREdMT0JBTF9IXworCisjaW5jbHVkZSAiSGlkSXRlbS5oIgorI2luY2x1ZGUgIlRyaVN0YXRlLmgiCisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKy8vIEEgc2V0IG9mIGdsb2JhbCBzdGF0ZXMgdGhhdCBwYXJzZXIgaGFzIHRvIGtlZXAgdHJhY2sgZHVyaW5nIHBhcnNpbmcuCisvLyBUaGV5IGFyZSBhbGwgc3BlY2lmaWVkIGluIEhJRCBzcGVjIHYxLjExIHNlY3Rpb24gNi4yLjIuNworc3RydWN0IEhpZEdsb2JhbCB7CisgICAgLy8gYWRkIGEgdG9rZW4gYW5kIGNoYW5nZSBnbG9iYWwgc3RhdGVzLCByZXR1cm5zIHZhbHVlIGluZGljYXRlcyBpZiBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bAorICAgIGJvb2wgYXBwZW5kKGNvbnN0IEhpZEl0ZW0gJmkpOworCisgICAgdHJpX3VpbnQgdXNhZ2VQYWdlOworICAgIHRyaV9pbnQgIGxvZ2ljYWxNaW47CisgICAgdHJpX2ludCAgbG9naWNhbE1heDsKKyAgICB0cmlfaW50ICBwaHlzaWNhbE1pbjsKKyAgICB0cmlfaW50ICBwaHlzaWNhbE1heDsKKyAgICB0cmlfdWludCBleHBvbmVudDsKKyAgICB0cmlfdWludCB1bml0OworICAgIHRyaV91aW50IHJlcG9ydFNpemU7CisgICAgdHJpX3VpbnQgcmVwb3J0SWQ7CisgICAgdHJpX3VpbnQgcmVwb3J0Q291bnQ7Cit9OworCisvLyBISUQgc3BlY3MgYWxsb3dzIFBVU0ggYW5kIFBPUCB0byBzYXZlIGEgc25hcHNob3Qgb2YgY3VycmVudCBnbG9iYWwgc3RhdGVzIGFuZCBjb21lIGJhY2sgdG8gdGhlCisvLyBzYXZlZCBzYXRlcyBsYXRlci4gSGlkU3RhY2sgbWFuYWdlcyB0aGlzIGxvZ2ljLiBOb3RlIHRoYXQgUFVTSCBhbmQgUE9QIGFyZSBhbHNvIEhpZEl0ZW1zLCBzbworLy8gdGhlcmUgaXMgbm8gZXhwbGljaXQgcHVzaCBhbmQgcG9wIGZ1bmN0aW9uIGluIHRoaXMgc3RhY2sgaW1wbGVtZW50YXRpb24uCitjbGFzcyBIaWRHbG9iYWxTdGFjayB7CitwdWJsaWM6CisgICAgSGlkR2xvYmFsU3RhY2soKTsKKworICAgIC8vIGFkZCBhIHRva2VuIGFuZCBjaGFuZ2UgZ2xvYmFsIHN0YXRlcywgcmV0dXJucyB2YWx1ZSBpbmRpY2F0ZXMgaWYgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAgICAvLyBpdCB0aGUgdG9rZW4gaXMgcHVzaC9wb3AsIHRoZSBzdGFjayBwdXNoL3BvcCBhY2NvcmRpbmdseS4KKyAgICBib29sIGFwcGVuZChjb25zdCBIaWRJdGVtICZpKTsKKworICAgIC8vIGdldCByZWZlcmVuY2UgdG8gdG9wIGVsZW1lbnQgb24gdGhlIHN0YWNrCisgICAgY29uc3QgSGlkR2xvYmFsJiB0b3AoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgc3RkOjp2ZWN0b3I8SGlkR2xvYmFsPiBtU3RhY2s7Cit9OworCit9IC8vbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfSElER0xPQUJMX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkSXRlbS5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkSXRlbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwNGRiNwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRJdGVtLmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkSXRlbS5oIgorI2luY2x1ZGUgIkhpZERlZnMuaCIKKyNpbmNsdWRlICJTdHJlYW1Jb1V0aWwuaCIKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworCitib29sIEhpZEl0ZW06OmRhdGFBc1Vuc2lnbmVkKHVuc2lnbmVkIGludCAqb3V0KSBjb25zdCAgeworICAgIGlmIChkYXRhLnNpemUoKSA+IDQgfHwgZGF0YS5zaXplKCkgPT0gMCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgKm91dCA9IDA7CisgICAgaW50IHNoaWZ0ID0gMDsKKworICAgIGZvciAoYXV0byBpIDogZGF0YSkgeworICAgICAgICAqb3V0IHw9IChpIDw8IHNoaWZ0KTsKKyAgICAgICAgc2hpZnQgKz0gODsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSGlkSXRlbTo6ZGF0YUFzU2lnbmVkKGludCAqb3V0KSBjb25zdCB7CisgICAgdW5zaWduZWQgaW50IHU7CisgICAgaWYgKCFkYXRhQXNVbnNpZ25lZCgmdSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzaXplX3QgYml0U2l6ZV8xID0gZGF0YS5zaXplKCkgKiA4IC0gMTsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA9IHUgJiAoMSA8PCBiaXRTaXplXzEpOworICAgICpvdXQgPSB1IHwgKChzaWduID09IDApID8gMCA6ICggfjAgPDwgYml0U2l6ZV8xKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0ZDo6dmVjdG9yPEhpZEl0ZW0+IEhpZEl0ZW06OnRva2VuaXplKGNvbnN0IHVpbnQ4X3QgKmJlZ2luLCBzaXplX3Qgc2l6ZSkgeworICAgIC8vIGNvbnN0cnVjdCBhIHN0cmVhbQorICAgIGNoYXJ2ZWN0b3JidWY8dW5zaWduZWQgY2hhcj4gYnVmKGJlZ2luLCBzaXplKTsKKyAgICBzdGQ6OmlzdHJlYW0gaXMoJmJ1Zik7CisgICAgcmV0dXJuIHRva2VuaXplKGlzKTsKK30KKworc3RkOjp2ZWN0b3I8SGlkSXRlbT4gSGlkSXRlbTo6dG9rZW5pemUoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJmRlc2NyaXB0b3IpIHsKKyAgICAvLyBjb25zdHJ1Y3QgYSBzdHJlYW0KKyAgICBjaGFydmVjdG9yYnVmPHVuc2lnbmVkIGNoYXI+IGJ1ZihkZXNjcmlwdG9yKTsKKyAgICBzdGQ6OmlzdHJlYW0gaXMoJmJ1Zik7CisgICAgcmV0dXJuIHRva2VuaXplKGlzKTsKK30KKworc3RkOjp2ZWN0b3I8SGlkSXRlbT4gSGlkSXRlbTo6dG9rZW5pemUoc3RkOjppc3RyZWFtICZpcykgeworICAgIHN0ZDo6dmVjdG9yPEhpZEl0ZW0+IGhpZFRva2VuOworCisgICAgLy8gdGhpcyBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgc2tpcHBpbmcgY2hhcmFjdGVycworICAgIGlzLnVuc2V0ZihzdGQ6Omlvc19iYXNlOjpza2lwd3MpOworICAgIHdoaWxlICghaXMuZW9mKCkpIHsKKyAgICAgICAgSGlkSXRlbSBpOworICAgICAgICBpcyA+PiBpOworICAgICAgICBpZiAoaS52YWxpZCkgeworICAgICAgICAgICAgaGlkVG9rZW4ucHVzaF9iYWNrKGkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGhpZFRva2VuOworfQorCitzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZpcywgSGlkVXRpbDo6SGlkSXRlbSAmaCkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWRVdGlsOjpIaWREZWY6Ok1haW5UYWc7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZFV0aWw6OkhpZERlZjo6VGFnVHlwZTsKKworICAgIGgudmFsaWQgPSBmYWxzZTsKKyAgICBoLm9mZnNldCA9IGlzLnRlbGxnKCk7CisgICAgaC5ieXRlU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBmaXJzdDsKKyAgICBpcyA+PiBmaXJzdDsKKyAgICBpZiAoIWlzLmVvZigpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGVuVGFibGVbXSA9IHsgMCwgMSwgMiwgNCB9OworICAgICAgICBzaXplX3QgbGVuID0gbGVuVGFibGVbZmlyc3QgJiAweDNdOyAvLyBsb3cgMiBiaXRzIGFyZSBsZW5ndGggZGVzY3JpcHRvcgorICAgICAgICBoLnRhZyA9IChmaXJzdCA+PiA0KTsKKyAgICAgICAgaC50eXBlID0gKGZpcnN0ICYgMHhDKSA+PiAyOworCisgICAgICAgIGlmIChoLnRhZyA9PSBMT05HX0lURU0gJiYgaC50eXBlID09IFJFU0VSVkVEKSB7IC8vIGxvbmcgaXRlbQorICAgICAgICAgICAgLy9sb25nIGl0ZW0KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYiA9IDA7CisgICAgICAgICAgICBpcyA+PiBiOworICAgICAgICAgICAgbGVuID0gYjsKKyAgICAgICAgICAgIGlzID4+IGI7CisgICAgICAgICAgICBoLnRhZyA9IGI7CisgICAgICAgIH0KKworICAgICAgICBoLmRhdGEucmVzaXplKGxlbik7CisgICAgICAgIGZvciAoYXV0byAmaSA6IGguZGF0YSkgeworICAgICAgICAgICAgaWYgKGlzLmVvZigpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpcyA+PiBpOworICAgICAgICB9CisgICAgICAgIGguYnl0ZVNpemUgPSAoc3NpemVfdCkgaXMudGVsbGcoKSAtIGgub2Zmc2V0OworICAgICAgICBoLnZhbGlkID0gIWlzLmVvZigpOworICAgIH0KKworICAgIHJldHVybiBpczsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEhpZFV0aWw6OkhpZEl0ZW0gJmgpIHsKKyAgICBvcyA8PCAib2Zmc2V0OiAiIDw8IGgub2Zmc2V0IDw8ICIsIHNpemU6ICIgPDwgaC5ieXRlU2l6ZQorICAgICAgIDw8ICIsIHRhZzogIiA8PCBoLnRhZyA8PCAiLCB0eXBlOiAiIDw8IGgudHlwZSA8PCAiLCBkYXRhOiAiOworICAgIGlmIChoLmRhdGEuZW1wdHkoKSkgeworICAgICAgICBvcyA8PCAiW2VtcHR5XSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3MgPDwgaC5kYXRhLnNpemUoKSA8PCAiIGJ5dGUocykgeyI7CisgICAgICAgIGZvciAoYXV0byBpIDogaC5kYXRhKSB7CisgICAgICAgICAgICBvcyA8PCAoaW50KSBpIDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgb3MgPDwgIn0iOworICAgIH0KKyAgICByZXR1cm4gb3M7Cit9Cit9IC8vIG5hbWVzcGFjZSBIaWRVdGlsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkSXRlbS5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM3OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZEl0ZW0uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURJVEVNX0hfCisjZGVmaW5lIEhJRFVUSUxfSElESVRFTV9IXworCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8aXN0cmVhbT4KKyNpbmNsdWRlIDxvc3RyZWFtPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKK3N0cnVjdCBIaWRJdGVtIHsKKyAgICBib29sIHZhbGlkOworICAgIHVuc2lnbmVkIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCB0YWc7CisgICAgc3NpemVfdCBvZmZzZXQ7CisgICAgc3NpemVfdCBieXRlU2l6ZTsKKyAgICBzdGQ6OnZlY3Rvcjx1aW50OF90PiBkYXRhOworCisgICAgYm9vbCBkYXRhQXNVbnNpZ25lZCh1bnNpZ25lZCBpbnQgKm91dCkgY29uc3Q7CisgICAgYm9vbCBkYXRhQXNTaWduZWQoaW50ICpvdXQpIGNvbnN0OworCisgICAgLy8gZnJpZW5kIHN0cmVhbSBmdW5jdGlvbnMKKyAgICBmcmllbmQgc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSAmaXMsIEhpZEl0ZW0gJmgpOworICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgSGlkSXRlbSAmaCk7CisKKyAgICAvLyB0b2tlbml6ZSBmcm9tIGEgdW5zaWduZWQgY2hhciB2ZWN0b3IKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gdG9rZW5pemUoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4gJmRlc2NyaXB0b3IpOworICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxIaWRJdGVtPiB0b2tlbml6ZShjb25zdCB1aW50OF90ICpiZWdpbiwgc2l6ZV90IHNpemUpOworICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxIaWRJdGVtPiB0b2tlbml6ZShzdGQ6OmlzdHJlYW0gJmlzKTsKK307CisKKy8vIHBhcnNpbmcgaW4gZnJvbSBiaW5hcnkgc3RyZWFtCitzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPj4oc3RkOjppc3RyZWFtICZpcywgSGlkVXRpbDo6SGlkSXRlbSAmaCk7CisKKy8vIG91dHB1dCBhcyBodW1hbiByZWFkYWJsZSBzdHJpbmcgdG8gc3RyZWFtCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgSGlkVXRpbDo6SGlkSXRlbSAmaCk7Cit9IC8vbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfSElESVRFTV9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvY2FsLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2NhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxN2FiZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRMb2NhbC5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZERlZnMuaCIKKyNpbmNsdWRlICJIaWRMb2NhbC5oIgorI2luY2x1ZGUgIkhpZExvZy5oIgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworY29uc3RleHByIHVpbnQzMl90IElOVkFMSURfVVNBR0UgPSAweEZGRkY7Citjb25zdGV4cHIgdWludDMyX3QgSU5WQUxJRF9ERVNJR05BVE9SID0gMHhGRkZGOworY29uc3RleHByIHVpbnQzMl90IElOVkFMSURfU1RSSU5HID0gMHhGRkZGOworCit1aW50MzJfdCBIaWRMb2NhbDo6Z2V0VXNhZ2Uoc2l6ZV90IGluZGV4KSBjb25zdCB7CisgICAgaWYgKHVzYWdlLmVtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIElOVkFMSURfVVNBR0U7CisgICAgfQorICAgIHJldHVybiAoaW5kZXggPj0gdXNhZ2Uuc2l6ZSgpKSA/IHVzYWdlLmJhY2soKSA6IHVzYWdlW2luZGV4XTsKK30KKwordWludDMyX3QgSGlkTG9jYWw6OmdldERlc2lnbmF0b3Ioc2l6ZV90IGluZGV4KSBjb25zdCB7CisgICAgaWYgKGRlc2lnbmF0b3IuZW1wdHkoKSkgeworICAgICAgICByZXR1cm4gSU5WQUxJRF9ERVNJR05BVE9SOworICAgIH0KKyAgICByZXR1cm4gKGluZGV4ID49IGRlc2lnbmF0b3Iuc2l6ZSgpKSA/IGRlc2lnbmF0b3IuYmFjaygpIDogZGVzaWduYXRvcltpbmRleF07Cit9CisKK3VpbnQzMl90IEhpZExvY2FsOjpnZXRTdHJpbmcoc2l6ZV90IGluZGV4KSBjb25zdCB7CisgICAgaWYgKHN0cmluZy5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBJTlZBTElEX1NUUklORzsKKyAgICB9CisgICAgcmV0dXJuIChpbmRleCA+PSBzdHJpbmcuc2l6ZSgpKSA/IHN0cmluZy5iYWNrKCkgOiBzdHJpbmdbaW5kZXhdOworfQorCit2b2lkIEhpZExvY2FsOjpjbGVhcigpIHsKKyAgICAqdGhpcyA9IEhpZExvY2FsKCk7Cit9CisKK2Jvb2wgSGlkTG9jYWw6OmFwcGVuZChjb25zdCBIaWRJdGVtICZpKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6TG9jYWxUYWc7CisKKyAgICBib29sIHJldCA9IHRydWU7CisgICAgdW5zaWduZWQgdW5zaWduZWRJbnRlZ2VyOworICAgIGJvb2wgdW5zaWduZWRFcnJvciA9ICFpLmRhdGFBc1Vuc2lnbmVkKCZ1bnNpZ25lZEludGVnZXIpOworICAgIGJvb2wgdmFsdWVFcnJvciA9IGZhbHNlOworCisgICAgc3dpdGNoIChpLnRhZykgeworICAgICAgICBjYXNlIFVTQUdFOgorICAgICAgICAgICAgdXNhZ2UucHVzaF9iYWNrKHVuc2lnbmVkSW50ZWdlcik7CisgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVTQUdFX01JTklNVU06CisgICAgICAgICAgICB1c2FnZU1pbiA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVNBR0VfTUFYSU1VTToKKyAgICAgICAgICAgIGlmICghdXNhZ2VNaW4uaXNTZXQoKSkgeworICAgICAgICAgICAgICAgIExPR19FIDw8ICJ1c2FnZSBtaW4gbm90IHNldCB3aGVuIHNhdyB1c2FnZSBtYXggIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB1c2FnZW1heCA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gdXNhZ2VNaW4uZ2V0KDApOyBqIDw9IHVzYWdlbWF4OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgdXNhZ2UucHVzaF9iYWNrKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1c2FnZU1pbi5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RSSU5HX0lOREVYOgorICAgICAgICAgICAgc3RyaW5nLnB1c2hfYmFjayh1bnNpZ25lZEludGVnZXIpOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVFJJTkdfTUlOSU1VTToKKyAgICAgICAgICAgIHN0cmluZ01pbiA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgIHZhbHVlRXJyb3IgPSB1bnNpZ25lZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RSSU5HX01BWElNVU06IHsKKyAgICAgICAgICAgIGlmICghdXNhZ2VNaW4uaXNTZXQoKSkgeworICAgICAgICAgICAgICAgIExPR19FIDw8ICJzdHJpbmcgbWluIG5vdCBzZXQgd2hlbiBzYXcgc3RyaW5nIG1heCAiIDw8IGkgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0cmluZ01heCA9IHVuc2lnbmVkSW50ZWdlcjsKKyAgICAgICAgICAgICAgICB2YWx1ZUVycm9yID0gdW5zaWduZWRFcnJvcjsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gc3RyaW5nTWluLmdldCgwKTsgaiA8PSBzdHJpbmdNYXg7ICsraikgeworICAgICAgICAgICAgICAgICAgICBzdHJpbmcucHVzaF9iYWNrKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHJpbmdNaW4uY2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgREVMSU1JVE9SOgorICAgICAgICAgICAgZGVsaW1ldGVyID0gdW5zaWduZWRJbnRlZ2VyOworICAgICAgICAgICAgdmFsdWVFcnJvciA9IHVuc2lnbmVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIExPR19FIDw8ICJ1bmtub3duIGxvY2FsIHRhZywgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWx1ZUVycm9yKSB7CisgICAgICAgIExPR19FIDw8ICJDYW5ub3QgZ2V0IHVuc2lnbmVkIGRhdGEgYXQgIiA8PCBpIDw8IExPR19FTkRMOworICAgICAgICByZXQgPSBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK30gLy9uYW1lc3BhY2UgSGlkVXRpbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvY2FsLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzMwYjMwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvY2FsLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElETE9DQUxfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURMT0NBTF9IXworCisjaW5jbHVkZSAiSGlkSXRlbS5oIgorI2luY2x1ZGUgIlRyaVN0YXRlLmgiCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworLy8gQSBzZXQgb2YgbG9jYWwgc3RhdGVzIHRoYXQgcGFyc2VyIGhhcyB0byBrZWVwIHRyYWNrIGR1cmluZyBwYXJzaW5nLgorLy8gVGhleSBhcmUgYWxsIHNwZWNpZmllZCBpbiBISUQgc3BlYyB2MS4xMSBzZWN0aW9uIDYuMi4yLjgKK3N0cnVjdCBIaWRMb2NhbCB7CisgICAgLy8gYWRkIGEgdG9rZW4gdG8gY2hhbmdlIGxvY2FsIHN0YXRlcywgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bAorICAgIGJvb2wgYXBwZW5kKGNvbnN0IEhpZEl0ZW0gJmkpOworICAgIC8vIGNsZWFyIGFsbCBsb2NhbCBzdGF0ZXMuIFRoaXMgbmVlZCB0byBiZSBkb25lIGFmdGVyIGVhY2ggbWFpbiB0YWcKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAvLyBtdWx0aXBsZSB1c2FnZSwgZGVzaWduYXRvciBvciBzdHJpbmdzIG1heSBleGlzdCBmb3Igc2luZ2xlIGlucHV0L291dHB1dC9mZWF0dXJlIHJlcG9ydAorICAgIHVpbnQzMl90IGdldFVzYWdlKHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgdWludDMyX3QgZ2V0RGVzaWduYXRvcihzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIHVpbnQzMl90IGdldFN0cmluZyhzaXplX3QgaW5kZXgpIGNvbnN0OworCisgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHVzYWdlOworICAgIC8vIGtlZXAgdHJhY2sgb2YgdXNhZ2UgbWluIHdoZW4gZXhwZWN0aW5nIGEgdXNhZ2UgbWF4CisgICAgdHJpX3VpbnQgdXNhZ2VNaW47CisKKyAgICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gZGVzaWduYXRvcjsKKyAgICAvLyBrZWVwIHRyYWNrIG9mIGRlc2lnbmF0b3IgbWluIHdoZW4gZXhwZWN0aW5nIGRlc2lnbmF0b3IgbWF4CisgICAgdHJpX3VpbnQgZGVzaWduYXRvck1pbjsKKworICAgIHN0ZDo6dmVjdG9yPHVpbnQzMl90PiBzdHJpbmc7CisgICAgLy8ga2VlcCB0cmFjayBvZiBzdHJpbmcgbWluIHdoZW4gZXhwZWN0aW5nIHN0cmluZyBtYXgKKyAgICB0cmlfdWludCBzdHJpbmdNaW47CisKKyAgICB0cmlfdWludCBkZWxpbWV0ZXI7Cit9OworfSAvLyBuYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9ISURMT0NBTF9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvZy5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZExvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3N2RlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkTG9nLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElETE9HX0hfCisjZGVmaW5lIEhJRFVUSUxfSElETE9HX0hfCisKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKSAmJiAhZGVmaW5lZChMT0dfVE9fQ09OU09MRSkKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbG9nZ2luZy5oPgorI2RlZmluZSBMT0dfRU5ETCAiIgorI2RlZmluZSBMT0dfRSBMT0coRVJST1IpCisjZGVmaW5lIExPR19XIExPRyhXQVJOSU5HKQorI2RlZmluZSBMT0dfSSBMT0coSU5GTykKKyNkZWZpbmUgTE9HX0QgTE9HKERFQlVHKQorI2RlZmluZSBMT0dfViBMT0coVkVSQk9TRSkKKyNlbHNlCisjaW5jbHVkZSA8aW9zdHJlYW0+CisjZGVmaW5lIExPR19FTkRMIHN0ZDo6ZW5kbAorI2RlZmluZSBMT0dfRSAoc3RkOjpjZXJyIDw8ICJFOiAiKQorI2RlZmluZSBMT0dfVyAoc3RkOjpjZXJyIDw8ICJXOiAiKQorI2RlZmluZSBMT0dfSSAoc3RkOjpjZXJyIDw8ICJJOiAiKQorI2RlZmluZSBMT0dfRCAoc3RkOjpjZXJyIDw8ICJEOiAiKQorI2RlZmluZSBMT0dfViAoc3RkOjpjZXJyIDw8ICJWOiAiKQorI2VuZGlmCisKKyNlbmRpZiAvLyBISURVVElMX0hJRExPR19IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFBhcnNlci5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWZhZjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFBhcnNlci5jcHAKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgIkhpZERlZnMuaCIKKyNpbmNsdWRlICJIaWRQYXJzZXIuaCIKKyNpbmNsdWRlICJIaWRMb2cuaCIKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxpb21hbmlwPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKK3ZvaWQgSGlkUGFyc2VyOjpyZXNldCgpIHsKKyAgICBtR2xvYmFsU3RhY2sgPSBIaWRHbG9iYWxTdGFjaygpOworICAgIG1Mb2NhbCA9IEhpZExvY2FsKCk7CisgICAgbVRyZWUgPSBzdGQ6Om1ha2Vfc2hhcmVkPEhpZFRyZWVOb2RlPigpOworICAgIG1DdXJyZW50ID0gbVRyZWU7Cit9CisKK2Jvb2wgSGlkUGFyc2VyOjpwYXJzZShjb25zdCBzdGQ6OnZlY3RvcjxIaWRJdGVtPiAmdG9rZW4pIHsKKyAgICAvLyBDbGVhbiB1cCBpbnRlcm5hbCBzdGF0ZXMgb2YgdGhlIHBhcnNlciBmb3IgYSBuZXcgc3RyZWFtIG9mIGRlc2NyaXB0b3IgdG9rZW4KKyAgICByZXNldCgpOworCisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlRhZ1R5cGU7CisKKyAgICBmb3IgKGF1dG8gJmkgOiB0b2tlbikgeworICAgICAgICBzd2l0Y2ggKGkudHlwZSkgeworICAgICAgICAgICAgY2FzZSBNQUlOOgorICAgICAgICAgICAgICAgIHJldCA9IHByb2Nlc3NNYWluVGFnKGkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHTE9CQUw6CisgICAgICAgICAgICAgICAgcmV0ID0gbUdsb2JhbFN0YWNrLmFwcGVuZChpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTE9DQUw6CisgICAgICAgICAgICAgICAgcmV0ID0gbUxvY2FsLmFwcGVuZChpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgIkhpZFBhcnNlciBmb3VuZCBpbGxlZ2FsIEhpZEl0ZW06ICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGluIGNhc2UgYSBwYXJzZSBmYWlsdXJlLCBxdWl0IHByZW1hdHVyZWx5CisgICAgICAgIGlmICghcmV0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitib29sIEhpZFBhcnNlcjo6cHJvY2Vzc01haW5UYWcoY29uc3QgSGlkSXRlbSAmaSkgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6Ok1haW5UYWc7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6UmVwb3J0RmxhZzsKKworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKyAgICBzd2l0Y2ggKGkudGFnKSB7CisgICAgICAgIGNhc2UgQ09MTEVDVElPTjogeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbGxlY3Rpb25UeXBlOworICAgICAgICAgICAgaWYgKCFpLmRhdGFBc1Vuc2lnbmVkKCZjb2xsZWN0aW9uVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAiQ2Fubm90IGdldCBjb2xsZWN0aW9uIHR5cGUgYXQgb2Zmc2V0ICIgPDwgaS5vZmZzZXQgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZnVsbFVzYWdlID0KKyAgICAgICAgICAgICAgICAgICAgbUdsb2JhbFN0YWNrLnRvcCgpLnVzYWdlUGFnZS5nZXQoMCkgPDwgMTYgfCBtTG9jYWwuZ2V0VXNhZ2UoMCk7CisgICAgICAgICAgICBtQ3VycmVudCA9IG1DdXJyZW50LT5hZGRDaGlsZCgKKyAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3NoYXJlZDxIaWRUcmVlTm9kZT4obUN1cnJlbnQsIGNvbGxlY3Rpb25UeXBlLCBmdWxsVXNhZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRU5EX0NPTExFQ1RJT046CisgICAgICAgICAgICBtQ3VycmVudCA9IG1DdXJyZW50LT5nZXRQYXJlbnQoKTsKKyAgICAgICAgICAgIGlmICghbUN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIHBhcnNlIGZhaWx1cmUgc28gdGhhdCBtQ3VycmVudCB3aWxsIG5vdCBiZSBhY2Nlc3NlZAorICAgICAgICAgICAgICAgIExPR19FIDw8ICJ1bm1hdGNoZWQgRU5EX0NPTExFQ1RJT04gYXQgIiA8PCBpLm9mZnNldCA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgICAgICByZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElOUFVUOgorICAgICAgICBjYXNlIE9VVFBVVDoKKyAgICAgICAgY2FzZSBGRUFUVVJFOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVwb3J0VHlwZSA9IGkudGFnOworICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWc7CisgICAgICAgICAgICBpZiAoIWkuZGF0YUFzVW5zaWduZWQoJmZsYWcpKSB7CisgICAgICAgICAgICAgICAgTE9HX0UgPDwgIkNhbm5vdCBnZXQgcmVwb3J0IGZsYWcgYXQgb2Zmc2V0ICIgPDwgaS5vZmZzZXQgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBIaWRHbG9iYWwgJnRvcCA9IG1HbG9iYWxTdGFjay50b3AoKTsKKworICAgICAgICAgICAgLy8gdXNhZ2UgcGFnZSwgbG9jYWwgbWluL21heCwgcmVwb3J0IHNpemUgYW5kIGNvdW50IGhhdmUgdG8gYmUgZGVmaW5lZCBhdCByZXBvcnQKKyAgICAgICAgICAgIC8vIGRlZmluaXRpb24uCisgICAgICAgICAgICBpZiAoISh0b3AudXNhZ2VQYWdlLmlzU2V0KCkgJiYgdG9wLmxvZ2ljYWxNaW4uaXNTZXQoKSAmJiB0b3AubG9naWNhbE1heC5pc1NldCgpCisgICAgICAgICAgICAgICAgICAmJiB0b3AucmVwb3J0U2l6ZS5pc1NldCgpICYmIHRvcC5yZXBvcnRDb3VudC5pc1NldCgpKSkgeworICAgICAgICAgICAgICAgIExPR19FIDw8ICJSZXBvcnQgZGVmaW5lZCBhdCAiIDw8IGkub2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgPDwgIiBkb2VzIG5vdCBoYXZlIGFsbCBtYW5kYXRvcnkgZmllbGRzIHNldCIgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9wLnJlcG9ydFNpemUuZ2V0KDApID4gMzIpIHsKKyAgICAgICAgICAgICAgICBMT0dfRSA8PCAiUmVwb3J0IGRlZmluZWQgYXQgIiA8PCBpLm9mZnNldAorICAgICAgICAgICAgICAgICAgICAgIDw8ICIgaGFzIHVuc3VwcG9ydGVkIHJlcG9ydCBzaXplKD4gMzIgYml0KSIgPDwgTE9HX0VOREw7CisgICAgICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEhpZFJlcG9ydCByZXBvcnQocmVwb3J0VHlwZSwgZmxhZywgdG9wLCBtTG9jYWwpOworICAgICAgICAgICAgbVJlcG9ydC5wdXNoX2JhY2socmVwb3J0KTsKKyAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gbm9kZShuZXcgSGlkUmVwb3J0Tm9kZShtQ3VycmVudCwgcmVwb3J0KSk7CisgICAgICAgICAgICBtQ3VycmVudC0+YWRkQ2hpbGQobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HX0UgPDwgInVua25vd24gbWFpbiB0YWcsICIgPDwgaSA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgIH0KKyAgICAvLyBsb2NhbHMgaXMgY2xlYXJlZCBhZnRlciBhbnkgbWFpbiB0YWcgYWNjb3JkaW5nIHRvIEhJRCBzcGVjCisgICAgbUxvY2FsLmNsZWFyKCk7CisgICAgcmV0dXJuIHJldDsKK30KKworYm9vbCBIaWRQYXJzZXI6OnBhcnNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJlZ2luLCBzaXplX3Qgc2l6ZSkgeworICAgIHN0ZDo6dmVjdG9yPEhpZEl0ZW0+IGhpZEl0ZW1WZWN0b3IgPSBIaWRJdGVtOjp0b2tlbml6ZShiZWdpbiwgc2l6ZSk7CisgICAgcmV0dXJuIHBhcnNlKGhpZEl0ZW1WZWN0b3IpOworfQorCit2b2lkIEhpZFBhcnNlcjo6ZmlsdGVyVHJlZSgpIHsKKyAgICBpZiAobVRyZWUgIT0gbnVsbHB0cikgeworICAgICAgICBmaWx0ZXJUcmVlKG1UcmVlKTsKKyAgICB9Cit9CisKK3ZvaWQgSGlkUGFyc2VyOjpmaWx0ZXJUcmVlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gJm5vZGUpIHsKKyAgICBpZiAobm9kZS0+aXNSZXBvcnRDb2xsZWN0aW9uKCkpIHsKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFJlcG9ydE5vZGU+IHJlcG9ydE5vZGUgPQorICAgICAgICAgICAgICAgIHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxIaWRSZXBvcnROb2RlPihub2RlLT5nZXRDaGlsZHJlbigpLmZyb250KCkpOworICAgICAgICBpZiAocmVwb3J0Tm9kZSAhPSBudWxscHRyKSB7CisgICAgICAgICAgICByZXBvcnROb2RlLT5jb2xsYXBzZShub2RlLT5nZXRGdWxsVXNhZ2UoKSk7CisgICAgICAgICAgICBub2RlID0gcmVwb3J0Tm9kZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoYXV0byAmaSA6IG5vZGUtPmdldENoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIGZpbHRlclRyZWUoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0hpZFBhcnNlcjo6RGlnZXN0VmVjdG9yIEhpZFBhcnNlcjo6Z2VuZXJhdGVEaWdlc3QoCisgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDx1bnNpZ25lZCBpbnQ+ICZpbnRlcmVzdGVkVXNhZ2UpIHsKKyAgICBEaWdlc3RWZWN0b3IgZGlnZXN0VmVjdG9yOworICAgIGRpZ2VzdCgmZGlnZXN0VmVjdG9yLCBtVHJlZSwgaW50ZXJlc3RlZFVzYWdlKTsKKyAgICByZXR1cm4gZGlnZXN0VmVjdG9yOworfQorCit2b2lkIEhpZFBhcnNlcjo6ZGlnZXN0KEhpZFBhcnNlcjo6RGlnZXN0VmVjdG9yICpkaWdlc3RWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gJm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDx1bnNpZ25lZCBpbnQ+ICZpbnRlcmVzdGVkVXNhZ2UpIHsKKyAgICBpZiAoZGlnZXN0VmVjdG9yID09IG51bGxwdHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChub2RlLT5pc1VzYWdlQ29sbGVjdGlvbigpCisgICAgICAgICAgICAmJiBpbnRlcmVzdGVkVXNhZ2UuZmluZChub2RlLT5nZXRGdWxsVXNhZ2UoKSkgIT0gaW50ZXJlc3RlZFVzYWdlLmVuZCgpKSB7CisgICAgICAgIC8vIHRoaXMgY29sbGVjdGlvbiBjb250YWlucyB0aGUgdXNhZ2UgaW50ZXJlc3RlZAorICAgICAgICBSZXBvcnRTZXRHcm91cCByZXBvcnRTZXRHcm91cDsKKworICAgICAgICAvLyBvbmUgbGF5ZXIgZGVlcCBzZWFyY2gKKyAgICAgICAgZm9yIChhdXRvICZpIDogbm9kZS0+Z2V0Q2hpbGRyZW4oKSkgeworICAgICAgICAgICAgLy8gc2tpcCBhbGwgbm9kZXMgdGhhdCBpcyBub3QgYSByZXBvcnQgbm9kZQorICAgICAgICAgICAgaWYgKGktPmdldE5vZGVUeXBlKCkgIT0gSGlkVHJlZU5vZGU6OlRZUEVfUkVQT1JUKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBIaWRSZXBvcnQgJnJlcG9ydCA9CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxIaWRSZXBvcnROb2RlPihpKS0+Z2V0UmVwb3J0KCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCA9IHJlcG9ydC5nZXRSZXBvcnRJZCgpOzsKKyAgICAgICAgICAgIGlmIChyZXBvcnRTZXRHcm91cC5maW5kKGlkKSA9PSByZXBvcnRTZXRHcm91cC5lbmQoKSkgeworICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpZCBncm91cCBpZiBpdCBpcyBub3QgY3JlYXRlZAorICAgICAgICAgICAgICAgIHJlcG9ydFNldEdyb3VwLmVtcGxhY2UoaWQsIFJlcG9ydFNldCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVwb3J0U2V0ICZyZXBvcnRHcm91cCA9IHJlcG9ydFNldEdyb3VwW2lkXTsKKyAgICAgICAgICAgIHN3aXRjaChyZXBvcnQuZ2V0VHlwZSgpKSB7CisgICAgICAgICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6TWFpblRhZzsKKyAgICAgICAgICAgICAgICBjYXNlIEZFQVRVUkU6CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydEdyb3VwW1JFUE9SVF9UWVBFX0ZFQVRVUkVdLnB1c2hfYmFjayhyZXBvcnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElOUFVUOgorICAgICAgICAgICAgICAgICAgICByZXBvcnRHcm91cFtSRVBPUlRfVFlQRV9JTlBVVF0ucHVzaF9iYWNrKHJlcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgT1VUUFVUOgorICAgICAgICAgICAgICAgICAgICByZXBvcnRHcm91cFtSRVBPUlRfVFlQRV9PVVRQVVRdLnB1c2hfYmFjayhyZXBvcnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSZXBvcnREaWdlc3QgZGlnZXN0ID0geworICAgICAgICAgICAgLmZ1bGxVc2FnZSA9IG5vZGUtPmdldEZ1bGxVc2FnZSgpLAorICAgICAgICAgICAgLnBhY2tldHMgPSBjb252ZXJ0R3JvdXBUb1BhY2tldChyZXBvcnRTZXRHcm91cCkKKyAgICAgICAgfTsKKyAgICAgICAgZGlnZXN0VmVjdG9yLT5lbXBsYWNlX2JhY2soZGlnZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJmNoaWxkIDogbm9kZS0+Z2V0Q2hpbGRyZW4oKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5nZXROb2RlVHlwZSgpID09IEhpZFRyZWVOb2RlOjpUWVBFX05PUk1BTCkgeworICAgICAgICAgICAgICAgIC8vIG9ubHkgZm9sbG93IGludG8gY29sbGVjdGlvbiBub2RlcworICAgICAgICAgICAgICAgIGRpZ2VzdChkaWdlc3RWZWN0b3IsIGNoaWxkLCBpbnRlcmVzdGVkVXNhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGQ6OnZlY3RvcjxIaWRQYXJzZXI6OlJlcG9ydFBhY2tldD4gSGlkUGFyc2VyOjpjb252ZXJ0R3JvdXBUb1BhY2tldCgKKyAgICAgICAgY29uc3QgSGlkUGFyc2VyOjpSZXBvcnRTZXRHcm91cCAmZ3JvdXApIHsKKyAgICBzdGQ6OnZlY3RvcjxSZXBvcnRQYWNrZXQ+IHBhY2tldHM7CisKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+IHR5cGVzID0ge1JFUE9SVF9UWVBFX0ZFQVRVUkUsIFJFUE9SVF9UWVBFX0lOUFVULCBSRVBPUlRfVFlQRV9PVVRQVVR9OworCisgICAgZm9yIChjb25zdCBhdXRvICZzZXRQYWlyIDogZ3JvdXApIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGlkID0gc2V0UGFpci5maXJzdDsKKyAgICAgICAgZm9yIChhdXRvIHR5cGUgOiB0eXBlcykgeworICAgICAgICAgICAgY29uc3QgYXV0byAmcmVwb3J0cyA9IHNldFBhaXIuc2Vjb25kW3R5cGVdOyAvLyBmZWF0dXJlCisKKyAgICAgICAgICAgIC8vIHRlbXBsYXRlCisgICAgICAgICAgICBSZXBvcnRQYWNrZXQgcGFja2V0ID0geworICAgICAgICAgICAgICAgIC50eXBlID0gdHlwZSwKKyAgICAgICAgICAgICAgICAuaWQgPSBpZCwKKyAgICAgICAgICAgICAgICAuYml0U2l6ZSA9IDAKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byAmciA6IHJlcG9ydHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvZ2ljYWwgPSByLmdldExvZ2ljYWxSYW5nZSgpOworICAgICAgICAgICAgICAgIGF1dG8gcGh5c2ljYWwgPSByLmdldFBoeXNpY2FsUmFuZ2UoKTsKKworICAgICAgICAgICAgICAgIGludDY0X3Qgb2Zmc2V0ID0gcGh5c2ljYWwuZmlyc3QgLSBsb2dpY2FsLmZpcnN0OworICAgICAgICAgICAgICAgIGRvdWJsZSBzY2FsZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oKHBoeXNpY2FsLnNlY29uZCAtIHBoeXNpY2FsLmZpcnN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gKGxvZ2ljYWwuc2Vjb25kIC0gbG9naWNhbC5maXJzdCk7CisgICAgICAgICAgICAgICAgc2NhbGUgKj0gci5nZXRFeHBvbmVudFZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICBSZXBvcnRJdGVtIGRpZ2VzdCA9IHsKKyAgICAgICAgICAgICAgICAgICAgLnVzYWdlID0gci5nZXRGdWxsVXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgLmlkID0gaWQsCisgICAgICAgICAgICAgICAgICAgIC5taW5SYXcgPSBsb2dpY2FsLmZpcnN0LAorICAgICAgICAgICAgICAgICAgICAubWF4UmF3ID0gbG9naWNhbC5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgIC5hID0gc2NhbGUsCisgICAgICAgICAgICAgICAgICAgIC5iID0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAuYml0T2Zmc2V0ID0gcGFja2V0LmJpdFNpemUsCisgICAgICAgICAgICAgICAgICAgIC5iaXRTaXplID0gci5nZXRTaXplKCksCisgICAgICAgICAgICAgICAgICAgIC5jb3VudCA9IHIuZ2V0Q291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgLnVuaXQgPSByLmdldFVuaXQoKSwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHBhY2tldC5yZXBvcnRzLnB1c2hfYmFjayhkaWdlc3QpOworICAgICAgICAgICAgICAgIHBhY2tldC5iaXRTaXplICs9IGRpZ2VzdC5iaXRTaXplICogZGlnZXN0LmNvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYWNrZXQucmVwb3J0cy5lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcGFja2V0cy5wdXNoX2JhY2soc3RkOjptb3ZlKHBhY2tldCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwYWNrZXRzOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgcmVwb3J0VHlwZVRvU3RyaW5nKGludCByZXBvcnRUeXBlKSB7CisgICAgc3dpdGNoIChyZXBvcnRUeXBlKSB7CisgICAgICAgIGNhc2UgSGlkUGFyc2VyOjpSRVBPUlRfVFlQRV9JTlBVVDoKKyAgICAgICAgICAgIHJldHVybiAiSU5QVVQiOworICAgICAgICBjYXNlIEhpZFBhcnNlcjo6UkVQT1JUX1RZUEVfT1VUUFVUOgorICAgICAgICAgICAgcmV0dXJuICJPVVRQVVQiOworICAgICAgICBjYXNlIEhpZFBhcnNlcjo6UkVQT1JUX1RZUEVfRkVBVFVSRToKKyAgICAgICAgICAgIHJldHVybiAiRkVBVFVSRSI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSUQgUkVQT1JUIjsKKyAgICB9Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBIaWRQYXJzZXI6OkRpZ2VzdFZlY3RvciAmZGlnZXN0cykgeworICAgIGZvciAoY29uc3QgYXV0byAmaSA6IGRpZ2VzdHMpIHsKKyAgICAgICAgb3MgPDwgIlVzYWdlOiAweCIgPDwgc3RkOjpoZXggIDw8IGkuZnVsbFVzYWdlIDw8IHN0ZDo6ZGVjCisgICAgICAgICAgIDw8ICIsICIgPDwgaS5wYWNrZXRzLnNpemUoKSA8PCAiIHJlcG9ydCBwYWNrZXQ6IiA8PCBMT0dfRU5ETDsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvICZwYWNrZXQgOiBpLnBhY2tldHMpIHsKKyAgICAgICAgICAgIG9zIDw8IHJlcG9ydFR5cGVUb1N0cmluZyhwYWNrZXQudHlwZSkgPDwgIiBpZDogIiA8PCBwYWNrZXQuaWQKKyAgICAgICAgICAgICAgIDw8ICIgc2l6ZTogIiA8PCBwYWNrZXQuYml0U2l6ZQorICAgICAgICAgICAgICAgPDwgImIoIiA8PCBwYWNrZXQuZ2V0Qnl0ZVNpemUoKSA8PCAiQiksICIKKyAgICAgICAgICAgICAgIDw8IHBhY2tldC5yZXBvcnRzLnNpemUoKSA8PCAiIGVudHJpZXMiIDw8IExPR19FTkRMOworCisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8gJnJlcG9ydCA6IHBhY2tldC5yZXBvcnRzKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIG1pbiwgbWF4OworICAgICAgICAgICAgICAgIHJlcG9ydC5kZWNvZGUocmVwb3J0Lm1hc2socmVwb3J0Lm1pblJhdyksICZtaW4pOworICAgICAgICAgICAgICAgIHJlcG9ydC5kZWNvZGUocmVwb3J0Lm1hc2socmVwb3J0Lm1heFJhdyksICZtYXgpOworCisgICAgICAgICAgICAgICAgb3MgPDwgIiAgIiA8PCByZXBvcnQuYml0T2Zmc2V0IDw8ICIgc2l6ZTogIiA8PCByZXBvcnQuYml0U2l6ZQorICAgICAgICAgICAgICAgICAgIDw8ICIsIGNvdW50OiAiIDw8IHJlcG9ydC5jb3VudAorICAgICAgICAgICAgICAgICAgIDw8ICIsIHVzYWdlOiAiIDw8IHN0ZDo6aGV4IDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dyg4KQorICAgICAgICAgICAgICAgICAgIDw8IHJlcG9ydC51c2FnZSA8PCBzdGQ6OmRlYworICAgICAgICAgICAgICAgICAgIDw8ICIsIG1pbjogIiA8PCByZXBvcnQubWluUmF3IDw8ICIsIG1heDogIiA8PCByZXBvcnQubWF4UmF3CisgICAgICAgICAgICAgICAgICAgPDwgIiwgbWluRGVjb2RlZDogIiA8PCBtaW4KKyAgICAgICAgICAgICAgICAgICA8PCAiLCBtYXhEZWNvZGVkOiAiIDw8IG1heAorICAgICAgICAgICAgICAgICAgIDw8ICIsIGE6ICIgPDwgcmVwb3J0LmEgPDwgIiwgYjogIiA8PCByZXBvcnQuYgorICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6aGV4CisgICAgICAgICAgICAgICAgICAgPDwgIiwgbWluUmF3SGV4OiAweCIgPDwgcmVwb3J0Lm1hc2socmVwb3J0Lm1pblJhdykKKyAgICAgICAgICAgICAgICAgICA8PCAiLCBtYXhSYXdIZXg6IDB4IiA8PCByZXBvcnQubWFzayhyZXBvcnQubWF4UmF3KQorICAgICAgICAgICAgICAgICAgIDw8ICIsIHJhd01hc2tlZDogMHgiIDw8IHJlcG9ydC5yYXdNYXNrKCkKKyAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmRlYyA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBvcyA8PCBMT0dfRU5ETDsKKyAgICB9CisgICAgb3MgPDwgTE9HX0VOREw7CisgICAgcmV0dXJuIG9zOworfQorfSAvLyBuYW1lc3BhY2UgSGlkVXRpbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFBhcnNlci5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFBhcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjVlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkUGFyc2VyLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX0hJRFBBUlNFUl9IXworI2RlZmluZSBISURVVElMX0hJRFBBUlNFUl9IXworCisjaW5jbHVkZSAiSGlkSXRlbS5oIgorI2luY2x1ZGUgIkhpZFRyZWUuaCIKKyNpbmNsdWRlICJIaWRHbG9iYWwuaCIKKyNpbmNsdWRlICJIaWRMb2NhbC5oIgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8b3N0cmVhbT4KKworbmFtZXNwYWNlIEhpZFV0aWwgeworY2xhc3MgSGlkUGFyc2VyIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgUkVQT1JUX1RZUEVfRkVBVFVSRSA9IDAsCisgICAgICAgIFJFUE9SVF9UWVBFX0lOUFVUID0gMSwKKyAgICAgICAgUkVQT1JUX1RZUEVfT1VUUFVUID0gMgorICAgIH07CisKKyAgICBzdHJ1Y3QgUmVwb3J0SXRlbTsKKyAgICBzdHJ1Y3QgUmVwb3J0UGFja2V0OworCisgICAgLy8gcmVwb3J0IChpbmNsdWRpbmcgaW5wdXQgb3V0cHV0IGFuZCBmZWF0dXJlKSBncm91cGVkIGJ5IGZ1bGwgdXNhZ2UKKyAgICBzdHJ1Y3QgUmVwb3J0RGlnZXN0IHsKKyAgICAgICAgdW5zaWduZWQgaW50IGZ1bGxVc2FnZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8UmVwb3J0UGFja2V0PiBwYWNrZXRzOworICAgIH07CisKKyAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFJlcG9ydERpZ2VzdD4gRGlnZXN0VmVjdG9yOworCisgICAgLy8gcGFyc2UgSElEIGRlc2NyaXB0b3IKKyAgICBib29sIHBhcnNlKGNvbnN0IHN0ZDo6dmVjdG9yPEhpZEl0ZW0+ICZ0b2tlbik7CisgICAgYm9vbCBwYXJzZShjb25zdCB1bnNpZ25lZCBjaGFyICpiZWdpbiwgc2l6ZV90IHNpemUpOworCisgICAgLy8gZmlsdGVyIHRoZSB0cmVlIHRvIGVsaW1pbmF0ZSBzaW5nbGUgY2hpbGQgcmVwb3J0IGxlYWYgbm9kZSBjYXVzZXMgYnkgdXNhZ2UgYXJyYXkgdHlwZQorICAgIC8vIHJlcG9ydHMKKyAgICB2b2lkIGZpbHRlclRyZWUoKTsKKworICAgIC8vIGdlbmVyYXRlIGEgbGlzdCBvZiByZXBvcnQgZGlnZXN0IGZvciBhbGwgaW50ZXJlc3RlZCB1c2FnZS4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgLy8gY2FsbCBmaWx0ZXJUcmVlKCkuCisgICAgRGlnZXN0VmVjdG9yIGdlbmVyYXRlRGlnZXN0KGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDx1bnNpZ25lZCBpbnQ+ICZpbnRlcmVzdGVkVXNhZ2UpOworCisgICAgLy8gZ2V0IHBhcnNlZCB0cmVlIChmaWx0ZXJlZCBvciBub3QgZmlsdGVyZWQpCisgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBnZXRUcmVlKCkgY29uc3QgeyByZXR1cm4gbVRyZWU7IH0KKworICAgIC8vIGdldCBhbGwgcGFyc2VkIHJlcG9ydCBpbiBhIHBhcnNlZCBmb3JtLgorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEhpZFJlcG9ydD4mIGdldFJlcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1SZXBvcnQ7IH0KKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIHN0ZDo6YXJyYXk8c3RkOjp2ZWN0b3I8SGlkUmVwb3J0PiwgMz4gUmVwb3J0U2V0OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHVuc2lnbmVkIGludCAvKiByZXBvcnRJZCAqLywgUmVwb3J0U2V0PiBSZXBvcnRTZXRHcm91cDsKKworICAgIC8vIGhlbHBlciBzdWJyb3V0aW5lcworICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIHByb2Nlc3NNYWluVGFnKGNvbnN0IEhpZEl0ZW0gJmkpOworICAgIHN0YXRpYyB2b2lkIGZpbHRlclRyZWUoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiAmbm9kZSk7CisgICAgc3RhdGljIHZvaWQgZGlnZXN0KAorICAgICAgICAgICAgRGlnZXN0VmVjdG9yICpkaWdlc3RWZWN0b3IsCisgICAgICAgICAgICBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+ICZub2RlLAorICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PHVuc2lnbmVkIGludD4gJmludGVyZXN0ZWRVc2FnZSk7CisgICAgc3RhdGljIHN0ZDo6dmVjdG9yPFJlcG9ydFBhY2tldD4gY29udmVydEdyb3VwVG9QYWNrZXQoY29uc3QgUmVwb3J0U2V0R3JvdXAgJmdyb3VwKTsKKworICAgIEhpZEdsb2JhbFN0YWNrIG1HbG9iYWxTdGFjazsKKyAgICBIaWRMb2NhbCBtTG9jYWw7CisgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBtVHJlZTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IG1DdXJyZW50OworICAgIHN0ZDo6dmVjdG9yPEhpZFJlcG9ydD4gbVJlcG9ydDsKK307CisKK3N0cnVjdCBIaWRQYXJzZXI6OlJlcG9ydEl0ZW0geworICAgIHVuc2lnbmVkIGludCB1c2FnZTsKKyAgICB1bnNpZ25lZCBpbnQgaWQ7CisgICAgaW50IHR5cGU7IC8vIGZlYXR1cmUsIGlucHV0IG9yIG91dHB1dAorCisgICAgaW50NjRfdCBtaW5SYXc7CisgICAgaW50NjRfdCBtYXhSYXc7CisKKyAgICAvLyBjb252ZXJzaW9uIGZvciBmbG9hdCBwb2ludCB2YWx1ZXMKKyAgICAvLyByZWFsIHZhbHVlID0gKHNpZ25FeHRlbmRJZk5lZWRlZChyYXcpICsgYikgKiBhCisgICAgLy8gcmF3IHZhbHVlID0gbWFzayhyZWFsL2EgLSBiKTsKKyAgICAvLworICAgIC8vIGNvbnZlcnNpb24gZm9yIGludGVnZXIgdmFsdWVzCisgICAgLy8gcmVhbCB2YWx1ZSA9IHNpZ25FeHRlbmRlZElmTmVlZGVkKHJhdykgKyBiOworICAgIC8vIHJhdyB2YWx1ZSA9IG1hc2socmVhbCAtIGIpOworICAgIGRvdWJsZSBhOyAvLyBzY2FsaW5nCisgICAgaW50NjRfdCBiOyAvLyBvZmZzZXQKKyAgICB1bnNpZ25lZCBpbnQgdW5pdDsKKworICAgIHNpemVfdCBiaXRPZmZzZXQ7CisgICAgc2l6ZV90IGJpdFNpemU7IC8vIGJpdCBsZW5ndGggcGVyIHVuaXQKKyAgICBzaXplX3QgY291bnQ7CisKKyAgICAvLyBoZWxwZXIgZnVuY3Rpb24KKyAgICBib29sIGlzU2lnbmVkKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbWluUmF3IDwgMDsKKyAgICB9CisKKyAgICBib29sIGlzQnl0ZUFsaWduZWQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiAoYml0T2Zmc2V0ICYgNykgPT0gMCAmJiAoYml0U2l6ZSAmIDcpID09IDA7CisgICAgfQorCisgICAgLy8gY29udmVydCByYXcgdmFsdWVzIHRvIHVuc2lnbmVkIGZvcm1hdAorICAgIHVpbnQzMl90IG1hc2soaW50NjRfdCBpbnB1dCkgY29uc3QgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGlucHV0ICYgcmF3TWFzaygpKTsKKyAgICB9CisKKyAgICBib29sIGRlY29kZSh1aW50MzJfdCBpbnB1dCwgZG91YmxlICpvdXRwdXQpIGNvbnN0IHsKKyAgICAgICAgaWYgKG91dHB1dCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaW50NjRfdCBzID0gc2lnbkV4dGVuZElmTmVlZGVkKGlucHV0KTsKKyAgICAgICAgaWYgKHMgPCBtaW5SYXcgfHwgcyA+IG1heFJhdykgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICpvdXRwdXQgPSAocyArIGIpICogYTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBlbmNvZGUoZG91YmxlIGlucHV0LCB1aW50MzJfdCAqb3V0cHV0KSBjb25zdCB7CisgICAgICAgIGlmIChvdXRwdXQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlucHV0ID0gaW5wdXQgLyBhIC0gYjsKKyAgICAgICAgaWYgKGlucHV0IDwgbWluUmF3IHx8IGlucHV0ID4gbWF4UmF3KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDxpbnQ2NF90PihpbnB1dCkgJiByYXdNYXNrKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHJhd01hc2soKSBjb25zdCB7CisgICAgICAgIGNvbnN0ZXhwciBpbnQ2NF90IG9uZSA9IDE7CisgICAgICAgIHJldHVybiAob25lIDw8IGJpdFNpemUpIC0gMTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHNpZ25FeHRlbmRJZk5lZWRlZChpbnQ2NF90IHZhbHVlKSBjb25zdCB7CisgICAgICAgIHJldHVybiB2YWx1ZSB8ICgoaXNTaWduZWQoKSAmJiBpc05lZ2F0aXZlKHZhbHVlKSkgPyB+cmF3TWFzaygpIDogMCk7CisgICAgfQorCisgICAgYm9vbCBpc05lZ2F0aXZlKGludDY0X3QgdmFsdWUpIGNvbnN0IHsKKyAgICAgICAgY29uc3RleHByIGludDY0X3Qgb25lID0gMTsKKyAgICAgICAgcmV0dXJuICgob25lIDw8IChiaXRTaXplIC0gMSkpICYgdmFsdWUpICE9IDA7CisgICAgfQorfTsKKworLy8gYSBjb2xsZWN0aW9uIG9mIHJlcG9ydCBpdGVtIHRoYXQgZm9ybXMgYSBwYWNrZXQKKy8vIHRoaXMgaXMgdGhlIGlucHV0IG91dHB1dCB1bml0IHdpdGggSElEIGhhcmR3YXJlCitzdHJ1Y3QgSGlkUGFyc2VyOjpSZXBvcnRQYWNrZXQgeworICAgIHN0ZDo6dmVjdG9yPFJlcG9ydEl0ZW0+IHJlcG9ydHM7CisgICAgc2l6ZV90IGJpdFNpemU7CisgICAgaW50IHR5cGU7IC8vIFJFUE9SVF9UWVBFX0ZFQVRVUkUvSU5QVVQvT1VUUFVUCisgICAgdW5zaWduZWQgaW50IGlkOworCisgICAgc2l6ZV90IGdldEJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gKGJpdFNpemUgKyA3KSAvIDg7IH07Cit9OworCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgSGlkUGFyc2VyOjpEaWdlc3RWZWN0b3IgJmRpZ2VzdDIpOworfSAvLyBuYW1lc3BhY2UgSGlkVXRpbAorCisjZW5kaWYgLy8gSElEVVRJTF9ISURQQVJTRVJfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRSZXBvcnQuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFJlcG9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYjc4YgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRSZXBvcnQuY3BwCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJIaWRSZXBvcnQuaCIKKyNpbmNsdWRlICJIaWREZWZzLmgiCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxpb21hbmlwPgorCituYW1lc3BhY2UgSGlkVXRpbCB7CitIaWRSZXBvcnQ6OkhpZFJlcG9ydCh1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgSGlkR2xvYmFsICZnbG9iYWwsIGNvbnN0IEhpZExvY2FsICZsb2NhbCkKKyAgICAgICAgOiBtUmVwb3J0VHlwZSh0eXBlKSwKKyAgICAgICAgICBtRmxhZyhkYXRhKSwKKyAgICAgICAgICBtVXNhZ2VQYWdlKGdsb2JhbC51c2FnZVBhZ2UuZ2V0KDApKSwgICAvLyBkZWZhdWx0IHZhbHVlIDAKKyAgICAgICAgICBtVXNhZ2UobG9jYWwuZ2V0VXNhZ2UoMCkpLAorICAgICAgICAgIG1Vc2FnZVZlY3Rvcihsb2NhbC51c2FnZSksCisgICAgICAgICAgbUxvZ2ljYWxNaW4oZ2xvYmFsLmxvZ2ljYWxNaW4uZ2V0KDApKSwgLy8gZGVmYXVsdCB2YWx1ZSAwCisgICAgICAgICAgbUxvZ2ljYWxNYXgoZ2xvYmFsLmxvZ2ljYWxNYXguZ2V0KDApKSwKKyAgICAgICAgICBtUmVwb3J0U2l6ZShnbG9iYWwucmVwb3J0U2l6ZSksCisgICAgICAgICAgbVJlcG9ydENvdW50KGdsb2JhbC5yZXBvcnRDb3VudCksCisgICAgICAgICAgbVBoeXNpY2FsTWluKGdsb2JhbC5waHlzaWNhbE1pbiksCisgICAgICAgICAgbVBoeXNpY2FsTWF4KGdsb2JhbC5waHlzaWNhbE1heCksCisgICAgICAgICAgbUV4cG9uZW50KGdsb2JhbC5leHBvbmVudCksCisgICAgICAgICAgbVVuaXQoZ2xvYmFsLnVuaXQpLAorICAgICAgICAgIG1SZXBvcnRJZChnbG9iYWwucmVwb3J0SWQpIHsgfQorCitzdGQ6OnN0cmluZyBIaWRSZXBvcnQ6OmdldFN0cmluZ1R5cGUoKSBjb25zdCB7CisgICAgcmV0dXJuIHJlcG9ydFR5cGVUb1N0cmluZyhtUmVwb3J0VHlwZSk7Cit9CisKK3N0ZDo6c3RyaW5nIEhpZFJlcG9ydDo6cmVwb3J0VHlwZVRvU3RyaW5nKGludCB0eXBlKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6TWFpblRhZzsKKyAgICBzd2l0Y2godHlwZSkgeworICAgICAgICBjYXNlIElOUFVUOgorICAgICAgICAgICAgcmV0dXJuICJJTlBVVCI7CisgICAgICAgIGNhc2UgT1VUUFVUOgorICAgICAgICAgICAgcmV0dXJuICJPVVRQVVQiOworICAgICAgICBjYXNlIEZFQVRVUkU6CisgICAgICAgICAgICByZXR1cm4gIkZFQVRVUkUiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICI8PFVOS05PV04+PiI7CisgICAgfQorfQorCitkb3VibGUgSGlkUmVwb3J0OjpnZXRFeHBvbmVudFZhbHVlKCkgY29uc3QgeworICAgIGlmICghbUV4cG9uZW50LmlzU2V0KCkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIC8vIGRlZmF1bHQgZXhwb25lbnQgaXMgMAorICAgIGludCBleHBvbmVudEludCA9IG1FeHBvbmVudC5nZXQoMCk7CisgICAgaWYgKGV4cG9uZW50SW50ID4gMTUgfHwgZXhwb25lbnRJbnQgPCAwKSB7CisgICAgICAgIHJldHVybiBOQU47CisgICAgfQorICAgIHJldHVybiBwb3coMTAuMCwgc3RhdGljX2Nhc3Q8ZG91YmxlPigoZXhwb25lbnRJbnQgPD0gNykgPyBleHBvbmVudEludCA6IGV4cG9uZW50SW50IC0gMTYpKTsKK30KKworc3RkOjpzdHJpbmcgSGlkUmVwb3J0OjpnZXRFeHBvbmVudFN0cmluZygpIGNvbnN0IHsKKyAgICBpbnQgZXhwb25lbnRJbnQgPSBtRXhwb25lbnQuZ2V0KDApOworICAgIGlmIChleHBvbmVudEludCA+IDE1IHx8IGV4cG9uZW50SW50IDwgMCkgeworICAgICAgICByZXR1cm4gIltlcnJvcl0iOworICAgIH0KKyAgICByZXR1cm4gc3RkOjpzdHJpbmcoIngxMF4iKQorICAgICAgICAgICAgKyBzdGQ6OnRvX3N0cmluZygoZXhwb25lbnRJbnQgPD0gNykgPyBleHBvbmVudEludCA6IGV4cG9uZW50SW50IC0gMTYpOworfQorCitzdGQ6OnN0cmluZyBIaWRSZXBvcnQ6OmdldFVuaXRTdHJpbmcoKSBjb25zdCB7CisgICAgaWYgKCFtVW5pdC5pc1NldCgpKSB7CisgICAgICAgIHJldHVybiAiZGVmYXVsdCI7CisgICAgfQorICAgIHJldHVybiAiW25vdCBpbXBsZW1lbnRlZF0iOworCisgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHJldDsKKyAgICByZXQgPDwgc3RkOjpoZXggPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDIpIDw8IG1Vbml0LmdldCgwKTsKKyAgICByZXR1cm4gcmV0LnN0cigpOworfQorCitzdGQ6OnN0cmluZyBIaWRSZXBvcnQ6OmdldEZsYWdTdHJpbmcoKSBjb25zdCB7CisgICAgdXNpbmcgbmFtZXNwYWNlIEhpZERlZjo6UmVwb3J0RmxhZzsKKyAgICBzdGQ6OnN0cmluZyByZXQ7CisgICAgcmV0ICs9IChtRmxhZyAmIERBVEFfQ09OU1QpID8gIkNvbnN0ICIgOiAiRGF0YSAiOworICAgIHJldCArPSAobUZsYWcgJiBBUlJBWV9WQVJJQUJMRSkgPyAiVmFyaWFibGUgIiA6ICJBcnJheSAiOworICAgIHJldCArPSAobUZsYWcgJiBXUkFQKSA/ICJXcmFwICIgOiAiIjsKKyAgICByZXQgKz0gKG1GbGFnICYgTk9OTElORUFSKSA/ICJOb25saW5lYXIgIiA6ICIiOworICAgIHJldCArPSAobUZsYWcgJiBOT19QUkVGRVJSRUQpID8gIk5vUHJlZmVycmVkICIgOiAiIjsKKyAgICByZXQgKz0gKG1GbGFnICYgTlVMTF9TVEFURSkgPyAiTnVsbFN0YXRlICIgOiAiIjsKKyAgICByZXQgKz0gKG1GbGFnICYgVk9MQVRJTEUpID8gIlZvbGF0aWxlICIgOiAiIjsKKyAgICByZXQgKz0gKG1GbGFnICYgQlVGRkVSRURfQllURVMpID8gIkJ1ZmZlcmVkQnl0ZXMgIiA6ICIiOworICAgIHJldHVybiByZXQ7Cit9CisKKy8vIGlzQXJyYXkoKSB3aWxsIHJldHVybiB0cnVlIGZvciByZXBvcnRzIHRoYXQgbWF5IGNvbnRhaW5zIG11bHRpcGxlIHZhbHVlcywgZS5nLiBrZXlib2FyZCBzY2FuCisvLyBjb2RlLCB3aGljaCBjYW4gaGF2ZSBtdWx0aXBsZSB2YWx1ZSwgZWFjaCBkZW5vdGluZyBhIGtleSBwcmVzc2VkIGRvd24gYXQgdGhlIHNhbWUgdGltZS4gSXQgd2lsbAorLy8gcmV0dXJuIGZhbHNlIGlmIHJlcG9yIHJlcHJlc2VudCBhIHZlY3RvciBvciBtYXRyaXguCisvLworLy8gVGhpcyBzbGlnaHRseSBkZXZpYXRlcyBmcm9tIEhJRCdzIGRlZmluaXRpb24sIGl0IGlzIG1vcmUgY29udmVuaWVudCB0aGlzIHdheSBhcyBtYXRyaXgvdmVjdG9yCisvLyBpbnB1dCBpcyB0cmVhdGVkIHNpbWlsYXJseSBhcyB2YXJpYWJsZXMuCitib29sIEhpZFJlcG9ydDo6aXNBcnJheSgpIGNvbnN0IHsKKyAgICB1c2luZyBuYW1lc3BhY2UgSGlkRGVmOjpSZXBvcnRGbGFnOworICAgIHJldHVybiAobUZsYWcgJiBBUlJBWV9WQVJJQUJMRSkgPT0gMCAmJiBtSXNDb2xsYXBzZWQ7Cit9CisKK2Jvb2wgSGlkUmVwb3J0Ojppc1ZhcmlhYmxlKCkgY29uc3QgeworICAgIHJldHVybiAhaXNBcnJheSgpOworfQorCitib29sIEhpZFJlcG9ydDo6aXNEYXRhKCkgY29uc3QgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OlJlcG9ydEZsYWc7CisgICAgcmV0dXJuIChtRmxhZyAmIERBVEFfQ09OU1QpID09IDA7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIaWRSZXBvcnQmIGgpIHsKKyAgICBvcyA8PCBoLmdldFN0cmluZ1R5cGUoKSA8PCAiLCAiCisgICAgICAgPDwgInVzYWdlOiAiIDw8IHN0ZDo6aGV4IDw8IGguZ2V0RnVsbFVzYWdlKCkgPDwgc3RkOjpkZWMgPDwgIiwgIjsKKworICAgIGlmIChoLmlzRGF0YSgpKSB7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBoLmdldExvZ2ljYWxSYW5nZSgpOworICAgICAgICBvcyA8PCAibG9nTWluOiAiIDw8IHJhbmdlLmZpcnN0IDw8ICIsICIKKyAgICAgICAgICAgPDwgImxvZ01heDogIiA8PCByYW5nZS5zZWNvbmQgPDwgIiwgIjsKKworICAgICAgICBpZiAocmFuZ2UgPT0gaC5nZXRQaHlzaWNhbFJhbmdlKCkpIHsKKyAgICAgICAgICAgIG9zIDw8ICJwaHk9PT1sb2csICI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYW5nZSA9IGguZ2V0UGh5c2ljYWxSYW5nZSgpOworICAgICAgICAgICAgb3MgPDwgInBoeU1pbjogIiA8PCByYW5nZS5maXJzdCA8PCAiLCAiCisgICAgICAgICAgICAgICA8PCAicGh5TWF4OiAiIDw8IHJhbmdlLnNlY29uZCA8PCAiLCAiOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGguaXNBcnJheSgpKSB7CisgICAgICAgICAgICBvcyA8PCAibWFwOiAoIiA8PCBzdGQ6OmhleDsKKyAgICAgICAgICAgIGZvciAoYXV0byBpIDogaC5nZXRVc2FnZVZlY3RvcigpKSB7CisgICAgICAgICAgICAgICAgb3MgPDwgaSA8PCAiLCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcyA8PCAiKSwgIiA8PCBzdGQ6OmRlYzsKKyAgICAgICAgfQorCisgICAgICAgIG9zIDw8ICJleHBvbmVudDogIiA8PCBoLmdldEV4cG9uZW50U3RyaW5nKCkgPDwgIiwgIgorICAgICAgICAgICA8PCAidW5pdDogIiA8PCBoLmdldFVuaXRTdHJpbmcoKSA8PCAiLCAiOworICAgIH0gZWxzZSB7CisgICAgICAgIG9zIDw8ICJjb25zdGFudDogIjsKKyAgICB9CisgICAgb3MgPDwgInNpemU6ICIgPDwgaC5nZXRTaXplKCkgPDwgImJpdCB4ICIgPDwgaC5nZXRDb3VudCgpIDw8ICIsICIKKyAgICAgICA8PCAiaWQ6ICIgPDwgaC5tUmVwb3J0SWQ7CisKKyAgICByZXR1cm4gb3M7Cit9CisKK3N0ZDo6cGFpcjxpbnQ2NF90LCBpbnQ2NF90PiBIaWRSZXBvcnQ6OmdldExvZ2ljYWxSYW5nZSgpIGNvbnN0IHsKKyAgICBpbnQ2NF90IGEgPSBtTG9naWNhbE1pbjsKKyAgICBpbnQ2NF90IGIgPSBtTG9naWNhbE1heDsKKworICAgIGlmIChhID4gYikgeworICAgICAgICAvLyBtaWdodCBiZSB1bnNpZ25lZAorICAgICAgICBhID0gYSAmICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgZ2V0U2l6ZSgpKSAtIDEpOworICAgICAgICBiID0gYiAmICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgZ2V0U2l6ZSgpKSAtIDEpOworICAgICAgICBpZiAoYSA+IGIpIHsKKyAgICAgICAgICAgIC8vIGJhZCBoaWQgZGVzY3JpcHRvcgorICAgICAgICAgICAgcmV0dXJuIHswLCAwfTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4ge2EsIGJ9OworfQorCitzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gSGlkUmVwb3J0OjpnZXRQaHlzaWNhbFJhbmdlKCkgY29uc3QgeworICAgIGlmICghKG1QaHlzaWNhbE1pbi5pc1NldCgpICYmIG1QaHlzaWNhbE1heC5pc1NldCgpKSkgeworICAgICAgICAvLyBwaHlzaWNhbCByYW5nZSB1bmRlZmluZWQsIHVzZSBsb2dpY2FsIHJhbmdlCisgICAgICAgIHJldHVybiBnZXRMb2dpY2FsUmFuZ2UoKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IGEgPSBtUGh5c2ljYWxNaW4uZ2V0KDApOworICAgIGludDY0X3QgYiA9IG1QaHlzaWNhbE1heC5nZXQoMCk7CisKKyAgICBpZiAoYSA+IGIpIHsKKyAgICAgICAgYSA9IGEgJiAoKHN0YXRpY19jYXN0PGludDY0X3Q+KDEpIDw8IGdldFNpemUoKSkgLSAxKTsKKyAgICAgICAgYiA9IGIgJiAoKHN0YXRpY19jYXN0PGludDY0X3Q+KDEpIDw8IGdldFNpemUoKSkgLSAxKTsKKyAgICAgICAgaWYgKGEgPiBiKSB7CisgICAgICAgICAgICByZXR1cm4gezAsIDB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB7YSwgYn07Cit9CisKK3Vuc2lnbmVkIGludCBIaWRSZXBvcnQ6OmdldEZ1bGxVc2FnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVVzYWdlIHwgKG1Vc2FnZVBhZ2UgPDwgMTYpOworfQorCitzaXplX3QgSGlkUmVwb3J0OjpnZXRTaXplKCkgY29uc3QgeworICAgIHJldHVybiBtUmVwb3J0U2l6ZTsKK30KKworc2l6ZV90IEhpZFJlcG9ydDo6Z2V0Q291bnQoKSBjb25zdCB7CisgICAgcmV0dXJuIG1SZXBvcnRDb3VudDsKK30KKwordW5zaWduZWQgaW50IEhpZFJlcG9ydDo6Z2V0VW5pdCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbVVuaXQuZ2V0KDApOyAvLyBkZWZhdWx0IHVuaXQgaXMgMCBtZWFucyBkZWZhdWx0IHVuaXQKK30KKwordW5zaWduZWQgSGlkUmVwb3J0OjpnZXRSZXBvcnRJZCgpIGNvbnN0IHsKKyAgICAvLyBpZiByZXBvcnQgaWQgaXMgbm90IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gemVybworICAgIHJldHVybiBtUmVwb3J0SWQuZ2V0KDApOworfQorCit1bnNpZ25lZCBIaWRSZXBvcnQ6OmdldFR5cGUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1SZXBvcnRUeXBlOworfQorCit2b2lkIEhpZFJlcG9ydDo6c2V0Q29sbGFwc2VkKHVpbnQzMl90IGZ1bGxVc2FnZSkgeworICAgIG1Vc2FnZSA9IGZ1bGxVc2FnZSAmIDB4RkZGRjsKKyAgICBtVXNhZ2VQYWdlID0gZnVsbFVzYWdlID4+IDE2OworICAgIG1Jc0NvbGxhcHNlZCA9IHRydWU7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4mIEhpZFJlcG9ydDo6Z2V0VXNhZ2VWZWN0b3IoKSBjb25zdCB7CisgICAgcmV0dXJuIG1Vc2FnZVZlY3RvcjsKK30KK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRSZXBvcnQuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRSZXBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjAxYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFJlcG9ydC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9ISURSRVBPUlRfSF8KKyNkZWZpbmUgSElEVVRJTF9ISURSRVBPUlRfSF8KKworI2luY2x1ZGUgIkhpZEdsb2JhbC5oIgorI2luY2x1ZGUgIkhpZExvY2FsLmgiCisjaW5jbHVkZSAiVHJpU3RhdGUuaCIKKyNpbmNsdWRlIDxjc3RkaW50PgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKK2NsYXNzIEhpZFBhcnNlcjsKK2NsYXNzIEhpZFRyZWVOb2RlOworCisvLyBIaWRSZXBvcnQgcmVwcmVzZW50IGFuIGlucHV0LCBvdXRwdXQgb3IgZmVhdHVyZSByZXBvcnQKK2NsYXNzIEhpZFJlcG9ydCB7CisgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIaWRSZXBvcnQmIGgpOworcHVibGljOgorICAgIEhpZFJlcG9ydCh1aW50MzJfdCB0eXBlXywgdWludDMyX3QgZGF0YSwgY29uc3QgSGlkR2xvYmFsICZnbG9iYWwsIGNvbnN0IEhpZExvY2FsICZsb2NhbCk7CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgcGFyc2luZyBwcm9jZXNzIHdoZW4gdGhlIHBhcnNlciByZWdyb3VwcyBtdWx0aS12YWx1ZWQgcmVwb3J0IGludG8gb25lCisgICAgdm9pZCBzZXRDb2xsYXBzZWQodWludDMyX3QgZnVsbFVzYWdlKTsKKworICAgIC8vIGdldCByZXBvcnQgaWQKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVwb3J0SWQoKSBjb25zdDsKKyAgICAvLyBnZXQgdHlwZSBvZiByZXBvcnQsIHJldHVybiBjb25zdGFudCBvZiBIaWREZWY6Ok1haW5UYWcKKyAgICB1bnNpZ25lZCBpbnQgZ2V0VHlwZSgpIGNvbnN0OworICAgIC8vIEZ1bGwgc2Vuc29yIHVzYWdlCisgICAgdW5zaWduZWQgaW50IGdldEZ1bGxVc2FnZSgpIGNvbnN0OworCisgICAgLy8gYmluYXJ5IHByb3BlcnRpZXMKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdDsKKyAgICBib29sIGlzRGF0YSgpIGNvbnN0OworICAgIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0OworCisgICAgLy8gbG9naWNhbCBhbmQgcGh5c2ljYWwgdmFsdWUgcmFuZ2UKKyAgICBzdGQ6OnBhaXI8aW50NjRfdCwgaW50NjRfdD4gZ2V0TG9naWNhbFJhbmdlKCkgY29uc3Q7CisgICAgc3RkOjpwYWlyPGludDY0X3QsIGludDY0X3Q+IGdldFBoeXNpY2FsUmFuZ2UoKSBjb25zdDsKKyAgICBkb3VibGUgZ2V0RXhwb25lbnRWYWx1ZSgpIGNvbnN0OworCisgICAgLy8gcmV0dXJuIEhJRCB1bml0IG5pYmJsZXMgaW4gYW4gdW5zaWduZWQgaW50CisgICAgdW5zaWduZWQgaW50IGdldFVuaXQoKSBjb25zdDsKKworICAgIC8vIHNpemUgaW4gYml0cworICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3Q7CisgICAgLy8gZGltZW5zaW9uIChpZiBpdCBpcyB2ZWN0b3IvbWF0cml4KSBvciBudW1iZXIgb2YgY29uY3VycmVudCBpbnB1dCB2YWx1ZXMKKyAgICAvLyBpdCBpcyBhbHNvIHVzZWQgdG8gY2FsY3VsYXRlIG1lbW9yeSBmb290IHByaW50CisgICAgc2l6ZV90IGdldENvdW50KCkgY29uc3Q7CisKKyAgICAvLyBmb3Igb3V0cHV0IHRvIHN0cmVhbQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyByZXBvcnRUeXBlVG9TdHJpbmcoaW50IHR5cGUpOworICAgIHN0ZDo6c3RyaW5nIGdldFN0cmluZ1R5cGUoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBnZXRFeHBvbmVudFN0cmluZygpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIGdldFVuaXRTdHJpbmcoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBnZXRGbGFnU3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiYgZ2V0VXNhZ2VWZWN0b3IoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgYm9vbCBtSXNDb2xsYXBzZWQ7CisKKyAgICAvLyBtYW5kYXRhcnkgZmllbGRzCisgICAgdW5zaWduZWQgaW50IG1SZXBvcnRUeXBlOworICAgIHVuc2lnbmVkIGludCBtRmxhZzsKKyAgICB1bnNpZ25lZCBpbnQgbVVzYWdlUGFnZTsKKyAgICB1bnNpZ25lZCBpbnQgbVVzYWdlOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gbVVzYWdlVmVjdG9yOworCisgICAgaW50IG1Mb2dpY2FsTWluOyAgICAgICAgLy8gMzIgYml0IGlzIGVub3VnaAorICAgIGludCBtTG9naWNhbE1heDsKKyAgICB1bnNpZ25lZCBpbnQgbVJlcG9ydFNpemU7CisgICAgdW5zaWduZWQgaW50IG1SZXBvcnRDb3VudDsKKworICAgIC8vIHRoZXNlIGJlbG93IGFyZSBvcHRpb25hbAorICAgIHRyaV9pbnQgbVBoeXNpY2FsTWluOworICAgIHRyaV9pbnQgbVBoeXNpY2FsTWF4OworCisgICAgdHJpX3VpbnQgbUV4cG9uZW50OworICAgIHRyaV91aW50IG1Vbml0OworICAgIHRyaV91aW50IG1SZXBvcnRJZDsKK307CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIaWRSZXBvcnQmIGgpOworfSAvLyBuYW1lc3BhY2UgSGlkVXRpbAorI2VuZGlmIC8vIEhJRFVUSUxfSElEUkVQT1JUX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkVHJlZS5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkVHJlZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwNDEzNQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9IaWRUcmVlLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkRGVmcy5oIgorI2luY2x1ZGUgIkhpZExvZy5oIgorI2luY2x1ZGUgIkhpZFRyZWUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworLy8gSGlkVHJlZU5vZGUKK0hpZFRyZWVOb2RlOjpIaWRUcmVlTm9kZSgpIDogbU5vZGVUeXBlKFRZUEVfVU5JTklUSUFMSVpFRCksIG1EYXRhKDApLCBtRnVsbFVzYWdlKDApIHsKK30KKworSGlkVHJlZU5vZGU6OkhpZFRyZWVOb2RlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRhdGEsIHVpbnQzMl90IGZ1bGxVc2FnZSwgaW50IG5vZGVUeXBlKQorICAgICAgICA6IG1Ob2RlVHlwZShub2RlVHlwZSksIG1EYXRhKGRhdGEpLAorICAgICAgICBtRnVsbFVzYWdlKGZ1bGxVc2FnZSksIG1QYXJlbnQocGFyZW50KSB7Cit9CisKK0hpZFRyZWVOb2RlOjpIaWRUcmVlTm9kZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBmdWxsVXNhZ2UpCisgICAgICAgIDogbU5vZGVUeXBlKFRZUEVfTk9STUFMKSwgbURhdGEoZGF0YSksCisgICAgICAgIG1GdWxsVXNhZ2UoZnVsbFVzYWdlKSwgbVBhcmVudChwYXJlbnQpIHsKK30KKwordm9pZCBIaWRUcmVlTm9kZTo6b3V0cHV0UmVjdXJzaXZlKHN0ZDo6b3N0cmVhbSAmb3MsIGludCBsZXZlbCkgY29uc3QgeworICAgIGluc2VydEluZGVudGF0aW9uKG9zLCBsZXZlbCk7CisgICAgb3MgPDwgIk5vZGUgZGF0YTogIiA8PCBtRGF0YQorICAgICAgIDw8ICIsIHVzYWdlICIgPDwgc3RkOjpoZXggPDwgbUZ1bGxVc2FnZSA8PCBzdGQ6OmRlYyA8PCBMT0dfRU5ETDsKKworICAgIGZvciAoYXV0byAmY2hpbGQgOiBtQ2hpbGRyZW4pIHsKKyAgICAgICAgY2hpbGQtPm91dHB1dFJlY3Vyc2l2ZShvcywgbGV2ZWwgKyAxKTsKKyAgICB9Cit9CisKK3N0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gSGlkVHJlZU5vZGU6OmRlZXBDb3B5KAorICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCkgY29uc3QgeworICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gY29weShuZXcgSGlkVHJlZU5vZGUocGFyZW50LCBtRGF0YSwgbUZ1bGxVc2FnZSwgbU5vZGVUeXBlKSk7CisgICAgZm9yIChhdXRvICZpIDogbUNoaWxkcmVuKSB7CisgICAgICAgIGNvcHktPm1DaGlsZHJlbi5wdXNoX2JhY2soaS0+ZGVlcENvcHkoY29weSkpOworICAgIH0KKyAgICByZXR1cm4gY29weTsKK30KKwordm9pZCBIaWRUcmVlTm9kZTo6aW5zZXJ0SW5kZW50YXRpb24oc3RkOjpvc3RyZWFtICZvcywgaW50IGxldmVsKSBjb25zdCB7CisgICAgY29uc3RleHByIGNoYXIgaW5kZW50Q2hhcmFjdGVyID0gJ1x0JzsKKyAgICBzdGQ6OmZpbGxfbihzdGQ6Om9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4ob3MpLCBsZXZlbCwgaW5kZW50Q2hhcmFjdGVyKTsKK30KKworc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBIaWRUcmVlTm9kZTo6YWRkQ2hpbGQoc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBjaGlsZCkgeworICAgIG1DaGlsZHJlbi5wdXNoX2JhY2soY2hpbGQpOworICAgIHJldHVybiBjaGlsZDsKK30KKworc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBIaWRUcmVlTm9kZTo6Z2V0UGFyZW50KCkgY29uc3QgeworICAgIHJldHVybiBtUGFyZW50LmxvY2soKTsKK30KKworYm9vbCBIaWRUcmVlTm9kZTo6aXNSZXBvcnRDb2xsZWN0aW9uKCkgY29uc3QgeworICAgIHJldHVybiBtTm9kZVR5cGUgPT0gVFlQRV9OT1JNQUwgJiYgbUNoaWxkcmVuLnNpemUoKSA9PSAxCisgICAgICAgICAgICAmJiBtQ2hpbGRyZW4uZnJvbnQoKS0+bU5vZGVUeXBlID09IFRZUEVfUkVQT1JUOworfQorCit1bnNpZ25lZCBpbnQgSGlkVHJlZU5vZGU6OmdldEZ1bGxVc2FnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbUZ1bGxVc2FnZTsKK30KKworc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPj4mIEhpZFRyZWVOb2RlOjpnZXRDaGlsZHJlbigpIHsKKyAgICByZXR1cm4gbUNoaWxkcmVuOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+PiYgSGlkVHJlZU5vZGU6OmdldENoaWxkcmVuKCkgY29uc3QgeworICAgIHJldHVybiBtQ2hpbGRyZW47Cit9CisKK2Jvb2wgSGlkVHJlZU5vZGU6OmlzVXNhZ2VDb2xsZWN0aW9uKCkgY29uc3QgeworICAgIHVzaW5nIG5hbWVzcGFjZSBIaWREZWY6OkNvbGxlY3Rpb25UeXBlOworICAgIHJldHVybiBtTm9kZVR5cGUgPT0gVFlQRV9OT1JNQUwgJiYgKG1EYXRhID09IFBIWVNJQ0FMIHx8IG1EYXRhID09IEFQUExJQ0FUSU9OKTsKK30KKworaW50IEhpZFRyZWVOb2RlOjpnZXROb2RlVHlwZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbU5vZGVUeXBlOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSGlkVHJlZU5vZGUmIG4pIHsKKyAgICBuLm91dHB1dFJlY3Vyc2l2ZShvcywgMCk7CisgICAgcmV0dXJuIG9zOworfQorCisvLyBIaWRSZXBvcnROb2RlCitIaWRSZXBvcnROb2RlOjpIaWRSZXBvcnROb2RlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50LCBjb25zdCBIaWRSZXBvcnQgJnJlcG9ydCkKKyAgICA6IEhpZFRyZWVOb2RlKHBhcmVudCwgMCAvKmRhdGEqLywgMCAvKmZ1bGxVc2FnZSovLCBUWVBFX1JFUE9SVCksIG1SZXBvcnQocmVwb3J0KSB7Cit9CisKK3ZvaWQgSGlkUmVwb3J0Tm9kZTo6b3V0cHV0UmVjdXJzaXZlKHN0ZDo6b3N0cmVhbSAmb3MsIGludCBsZXZlbCkgY29uc3QgeworICAgIGluc2VydEluZGVudGF0aW9uKG9zLCBsZXZlbCk7CisgICAgb3MgPDwgbVJlcG9ydCA8PCBMT0dfRU5ETDsKK30KKworc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBIaWRSZXBvcnROb2RlOjpkZWVwQ29weSgKKyAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQpIGNvbnN0IHsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGNvcHkobmV3IEhpZFJlcG9ydE5vZGUocGFyZW50LCBtUmVwb3J0KSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK2NvbnN0IEhpZFJlcG9ydCYgSGlkUmVwb3J0Tm9kZTo6Z2V0UmVwb3J0KCkgY29uc3QgeworICAgIHJldHVybiBtUmVwb3J0OworfQorCit2b2lkIEhpZFJlcG9ydE5vZGU6OmNvbGxhcHNlKHVuc2lnbmVkIGludCBuZXdVc2FnZSkgeworICAgIG1SZXBvcnQuc2V0Q29sbGFwc2VkKG5ld1VzYWdlKTsKK30KKworfSAvL25hbWVzcGFjZSBIaWRVdGlsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvSGlkVHJlZS5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzUyMDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL0hpZFRyZWUuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhJRFVUSUxfSElEVFJFRV9IXworI2RlZmluZSBISURVVElMX0hJRFRSRUVfSF8KKworI2luY2x1ZGUgIkhpZFJlcG9ydC5oIgorCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisKK25hbWVzcGFjZSBIaWRVdGlsIHsKKworLy8gSElEIHJlcG9ydCBwYXJzZXIgb3V0cHV0IHRyZWUgbm9kZQorY2xhc3MgSGlkVHJlZU5vZGUgeworICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgSGlkVHJlZU5vZGUmIG4pOworcHVibGljOgorICAgIGVudW0geworICAgICAgICBUWVBFX1VOSU5JVElBTElaRUQgPSAwLAorICAgICAgICBUWVBFX05PUk1BTCA9IDEsCisgICAgICAgIFRZUEVfUkVQT1JUID0gMiAgICAgLy8gY2FuIGJlIGNhc3QgdG8gSGlkUmVwb3J0Tm9kZQorICAgIH07CisgICAgSGlkVHJlZU5vZGUoKTsKKyAgICBIaWRUcmVlTm9kZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCwgdWludDMyX3QgZGF0YSwgdWludDMyX3QgZnVsbFVzYWdlKTsKKworICAgIHZpcnR1YWwgfkhpZFRyZWVOb2RlKCkgPSBkZWZhdWx0OworCisgICAgLy8gbWFrZSBhIGRlZXAgY29weSBvZiB0cmVlIGF0IGFuZCBiZWxvdyB0aGlzIG5vZGUgYW5kIGF0dGFjaCBpdCB0byBzcGVjaWZpZWQgcGFyZW50IG5vZGUKKyAgICB2aXJ0dWFsIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gZGVlcENvcHkoCisgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEhpZFRyZWVOb2RlPiBwYXJlbnQgPSBudWxscHRyKSBjb25zdDsKKworICAgIC8vIGFkZCBjaGlsZCB0byB0aGlzIG5vZGUKKyAgICBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGFkZENoaWxkKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gY2hpbGQpOworCisgICAgLy8gZ2V0IGFsbCBjaGlsZHJlbiBvZiBhIG5vZGUKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+PiYgZ2V0Q2hpbGRyZW4oKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+PiYgZ2V0Q2hpbGRyZW4oKSBjb25zdDsKKworICAgIC8vIGdldCBwYXJlbnQgKG51bGxwdHIgaWYgaXQgaXMgcm9vdCBub2RlIG9yIGlmIGxvY2sgd2Vha19wdHIgZmFpbGVkKQorICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gZ2V0UGFyZW50KCkgY29uc3Q7CisKKyAgICAvLyBhY2Nlc3MgdXNhZ2Ugb2YgdGhpcyBub2RlCisgICAgdW5zaWduZWQgaW50IGdldEZ1bGxVc2FnZSgpIGNvbnN0OworCisgICAgYm9vbCBpc1JlcG9ydENvbGxlY3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlzVXNhZ2VDb2xsZWN0aW9uKCkgY29uc3Q7CisgICAgaW50IGdldE5vZGVUeXBlKCkgY29uc3Q7Citwcm90ZWN0ZWQ6CisgICAgLy8gZm9yIGRlcml2ZWQgY2xhc3MgdG8gZGVmaW5lIGRpZmZlcmVudCBub2RlVHlwZQorICAgIEhpZFRyZWVOb2RlKHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50LAorICAgICAgICAgICAgICB1aW50MzJfdCBkYXRhLCB1aW50MzJfdCBmdWxsVXNhZ2UsIGludCBub2RlVHlwZSk7CisKKyAgICAvLyBoZWxwZXIgZm9yIHN0cmVhbSBvdXRwdXQKKyAgICB2b2lkIGluc2VydEluZGVudGF0aW9uKHN0ZDo6b3N0cmVhbSAmb3MsIGludCBsZXZlbCkgY29uc3Q7Citwcml2YXRlOgorICAgIC8vIGhlbHBlciBmb3Igc3RyZWFtIG91dHB1dAorICAgIHZpcnR1YWwgdm9pZCBvdXRwdXRSZWN1cnNpdmUoc3RkOjpvc3RyZWFtJiBvcywgaW50IGxldmVsKSBjb25zdDsKKworICAgIGludCBtTm9kZVR5cGU7CisgICAgdWludDMyX3QgbURhdGE7CisgICAgdWludDMyX3QgbUZ1bGxVc2FnZTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4+IG1DaGlsZHJlbjsKKyAgICBzdGQ6OndlYWtfcHRyPEhpZFRyZWVOb2RlPiBtUGFyZW50OworfTsKKworLy8gVHJlZSBub2RlIHRoYXQgY29ycmVzcG9uZHMgdG8gYW4gaW5wdXQsIG91dHB1dCBvciBmZWF0dXJlIHJlcG9ydAorY2xhc3MgSGlkUmVwb3J0Tm9kZSA6IHB1YmxpYyBIaWRUcmVlTm9kZSB7CitwdWJsaWM6CisgICAgSGlkUmVwb3J0Tm9kZShzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IHBhcmVudCwgY29uc3QgSGlkUmVwb3J0ICZyZXBvcnQpOworCisgICAgdmlydHVhbCBzdGQ6OnNoYXJlZF9wdHI8SGlkVHJlZU5vZGU+IGRlZXBDb3B5KAorICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gcGFyZW50ID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBvYnRhaW4gSGlkUmVwb3J0IGF0dGFjaGVkIHRvIHRoaXMgbm9kZQorICAgIGNvbnN0IEhpZFJlcG9ydCYgZ2V0UmVwb3J0KCkgY29uc3Q7CisKKyAgICAvLyByZXNldCB1c2FnZSBvZiBub2RlIGFuZCBzZXQgdW5kZXJseWluZyByZXBvcnQgdG8gY29sbGFwc2VkCisgICAgdm9pZCBjb2xsYXBzZSh1bnNpZ25lZCBpbnQgbmV3VXNhZ2UpOworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgb3V0cHV0UmVjdXJzaXZlKHN0ZDo6b3N0cmVhbSAmb3MsIGludCBsZXZlbCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBIaWRSZXBvcnQgbVJlcG9ydDsKK307CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBIaWRUcmVlTm9kZSYgbik7CisKK30gLy8gbmFtZXNwYWNlIEhpZFV0aWwKKworI2VuZGlmIC8vIEhJRFVUSUxfSElEVFJFRV9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL1N0cmVhbUlvVXRpbC5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL1N0cmVhbUlvVXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YTk0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvU3RyZWFtSW9VdGlsLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX1NUUkVBTV9JT19VVElMX0hfCisjZGVmaW5lIEhJRFVUSUxfU1RSRUFNX0lPX1VUSUxfSF8KKworI2luY2x1ZGUgIkhpZExvZy5oIgorI2luY2x1ZGUgPGlzdHJlYW0+CisjaW5jbHVkZSA8aW9tYW5pcD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2UgSGlkVXRpbCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJUPgorY2xhc3MgY2hhcnZlY3RvcmJ1ZiA6IHB1YmxpYyBzdGQ6OnN0cmVhbWJ1ZiB7IC8vIGNsYXNzIG5hbWUgaXMgY29uc2lzdGVudCB3aXRoIHN0ZCBsaWIKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3Q8Q2hhclQ+Ojp2YWx1ZSA9PSBmYWxzZSwgImNhbm5vdCB1c2UgY29uc3QgdHlwZSIpOworcHVibGljOgorICAgIC8vIHIvdyBidWZmZXIgY29uc3RydWN0b3JzCisgICAgY2hhcnZlY3RvcmJ1ZihzdGQ6OnZlY3RvcjxDaGFyVD4gJnZlYykgeworICAgICAgICBpbml0KHZlYy5kYXRhKCksIHZlYy5zaXplKCkpOworICAgIH0KKworICAgIGNoYXJ2ZWN0b3JidWYoQ2hhclQgKmJlZ2luLCBDaGFyVCAqZW5kKSB7CisgICAgICAgIGFzc2VydChlbmQgPj0gYmVnaW4pOworICAgICAgICBpbml0KGJlZ2luLCBlbmQgLSBiZWdpbik7CisgICAgfQorCisgICAgY2hhcnZlY3RvcmJ1ZihDaGFyVCAqYmVnaW4sIHNpemVfdCBzaXplKSB7CisgICAgICAgIGluaXQoYmVnaW4sIHNpemUpOworICAgIH0KKworICAgIC8vIHIvbyBidWZmZXIgY29uc3RydWN0b3IKKyAgICBjaGFydmVjdG9yYnVmKGNvbnN0IHN0ZDo6dmVjdG9yPENoYXJUPiAmdmVjKSB7CisgICAgICAgIGluaXQodmVjLmRhdGEoKSwgdmVjLnNpemUoKSk7CisgICAgfQorCisgICAgY2hhcnZlY3RvcmJ1Zihjb25zdCBDaGFyVCAqYmVnaW4sIGNvbnN0IENoYXJUICplbmQpIHsKKyAgICAgICAgYXNzZXJ0KGVuZCA+PSBiZWdpbik7CisgICAgICAgIGluaXQoYmVnaW4sIGVuZCAtIGJlZ2luKTsKKyAgICB9CisKKyAgICBjaGFydmVjdG9yYnVmKGNvbnN0IENoYXJUICpiZWdpbiwgc2l6ZV90IHNpemUpIHsKKyAgICAgICAgaW5pdChiZWdpbiwgc2l6ZSk7CisgICAgfQorIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHN0ZDo6c3RyZWFtcG9zIHNlZWtwb3MoCisgICAgICAgICAgICBzdGQ6OnN0cmVhbXBvcyBzcCwgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgd2hpY2ggPQorICAgICAgICAgICAgc3RkOjppb3NfYmFzZTo6aW4gfCBzdGQ6Omlvc19iYXNlOjpvdXQpIG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIHNlZWtvZmYoc3RkOjpzdHJlYW1vZmYoc3ApLCBzdGQ6Omlvc19iYXNlOjpiZWcsIHdoaWNoKTsKKyAgICB9CisKKyAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byB1c2UgZnRlbGwoKSBvbiBzdHJlYW0KKyAgICB2aXJ0dWFsIHN0ZDo6c3RyZWFtcG9zIHNlZWtvZmYoCisgICAgICAgICAgICBzdGQ6OnN0cmVhbW9mZiBvZmYsIHN0ZDo6aW9zX2Jhc2U6OnNlZWtkaXIgd2F5LAorICAgICAgICAgICAgc3RkOjppb3NfYmFzZTo6b3Blbm1vZGUgd2hpY2ggPQorICAgICAgICAgICAgc3RkOjppb3NfYmFzZTo6aW4gfCBzdGQ6Omlvc19iYXNlOjpvdXQpIG92ZXJyaWRlIHsKKworICAgICAgICAvLyBwcHRyKCkgPT0gbnVsbHB0cjogcmVhZC1vbmx5CisgICAgICAgIGFzc2VydChwcHRyKCkgPT0gbnVsbHB0ciB8fCBlZ3B0cigpIC0gZWJhY2soKSA9PSBlcHB0cigpIC0gcGJhc2UoKSk7CisgICAgICAgIGJvb2wgaW4gPSB3aGljaCAmIHN0ZDo6aW9zX2Jhc2U6OmluOworICAgICAgICBib29sIG91dCA9IHdoaWNoICYgc3RkOjppb3NfYmFzZTo6b3V0OworICAgICAgICBwb3NfdHlwZSBlbmQgPSBlZ3B0cigpIC0gZWJhY2soKTsKKworICAgICAgICBpZiAoIWluICYmICFvdXQpIHsKKyAgICAgICAgICAgIHJldHVybiBwb3NfdHlwZSgtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW4gJiYgb3V0ICYmIHdheSA9PSBzdGQ6Omlvc19iYXNlOjpjdXIpIHsKKyAgICAgICAgICAgIHJldHVybiBwb3NfdHlwZSgtMSk7CisgICAgICAgIH0KKworICAgICAgICBvZmZfdHlwZSBub2ZmOworICAgICAgICBzd2l0Y2ggKHdheSkgeworICAgICAgICAgICAgY2FzZSBzdGQ6Omlvc19iYXNlOjpiZWc6CisgICAgICAgICAgICAgICAgbm9mZiA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIHN0ZDo6aW9zX2Jhc2U6OmN1cjoKKyAgICAgICAgICAgICAgICBpZiAoaW4pIHsKKyAgICAgICAgICAgICAgICAgICAgbm9mZiA9IGdwdHIoKSAtIGViYWNrKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbm9mZiA9IHBwdHIoKSAtIHBiYXNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBzdGQ6Omlvc19iYXNlOjplbmQ6CisgICAgICAgICAgICAgICAgbm9mZiA9IGVuZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc190eXBlKC0xKTsKKyAgICAgICAgfQorICAgICAgICBub2ZmICs9IG9mZjsKKyAgICAgICAgaWYgKG5vZmYgPCAwIHx8ICBub2ZmID4gZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gcG9zX3R5cGUoLTEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZmYgIT0gMCAmJiAoKGluICYmIGdwdHIoKSA9PSBudWxscHRyKSB8fCAob3V0ICYmIHBwdHIoKSA9PSBudWxscHRyKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBwb3NfdHlwZSgtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW4pIHsKKyAgICAgICAgICAgIHNldGcoZWJhY2soKSwgZWJhY2soKSArIG5vZmYsIGVncHRyKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG91dCkgeworICAgICAgICAgICAgc2V0cChwYmFzZSgpLCBlcHB0cigpKTsKKyAgICAgICAgICAgIHBidW1wKG5vZmYpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHBvc190eXBlKG5vZmYpOworICAgIH0KK3ByaXZhdGU6CisgICAgLy8gcmVhZCBvbmx5IGJ1ZmZlciBpbml0CisgICAgdm9pZCBpbml0KGNvbnN0IENoYXJUICpiYXNlLCBzaXplX3Qgc2l6ZSkgeworICAgICAgICBzZXRnKChjaGFyKiliYXNlLCAoY2hhciopYmFzZSwgKGNoYXIqKShiYXNlICsgc2l6ZSkpOworICAgIH0KKworICAgIC8vIHJlYWQgd3JpdGUgYnVmZmVyIGluaXQKKyAgICB2b2lkIGluaXQoQ2hhclQgKmJhc2UsIHNpemVfdCBzaXplKSB7CisgICAgICAgIHNldGcoKGNoYXIqKWJhc2UsIChjaGFyKiliYXNlLCAoY2hhciopKGJhc2UgKyBzaXplKSk7CisgICAgICAgIHNldHAoKGNoYXIqKWJhc2UsIChjaGFyKikoYmFzZSArIHNpemUpKTsKKyAgICB9Cit9OworCisvLyBkdW1wIGJpbmFyeSB2YWx1ZXMKK3RlbXBsYXRlIDxjbGFzcyBGb3J3YXJkSXRlcmF0b3I+Cit2b2lkIGhleGR1bXBUb1N0cmVhbShzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBGb3J3YXJkSXRlcmF0b3IgJmZpcnN0LCBjb25zdCBGb3J3YXJkSXRlcmF0b3IgJmxhc3QpIHsKKyAgICBzdGF0aWNfYXNzZXJ0KAorICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTwKKyAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxGb3J3YXJkSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKKyAgICAgICAgICAgICAgICBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnPjo6dmFsdWUKKyAgICAgICAgICAgICYmIHN0ZDo6aXNfY29udmVydGlibGU8CisgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8Rm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyPjo6dmFsdWUKKyAgICAgICAgICAgICYmIHNpemVvZih0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxGb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlKQorICAgICAgICAgICAgICAgID09IHNpemVvZih1bnNpZ25lZCBjaGFyKSwKKyAgICAgICAgICAgICJPbmx5IGFjY2VwdHMgZm9yd2FyZCBpdGVyYXRvciBvZiBhIHR5cGUgb2Ygc2l6ZSAxICIKKyAgICAgICAgICAgICAgICAidGhhdCBjYW4gYmUgY29udmVydCB0byB1bnNpZ25lZCBjaGFyLlxuIik7CisgICAgc2l6ZV90IGMgPSAwOworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzczsKKyAgICBmb3IgKEZvcndhcmRJdGVyYXRvciBpID0gZmlyc3Q7IGkgIT0gbGFzdDsgKytpLCArK2MpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciB2ID0gKmk7CisgICAgICAgIC8vIGZvcm1hdHRpbmcKKyAgICAgICAgc3dpdGNoIChjICYgMHhmKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIG9zIDw8IHNzLnN0cigpIDw8IExPR19FTkRMOworICAgICAgICAgICAgICAgIHNzLnN0cigiIik7CisgICAgICAgICAgICAgICAgc3MgPDwgc3RkOjpoZXg7CisgICAgICAgICAgICAgICAgc3MgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDQpIDw8IGMgPDwgIjogIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgICAgICAvLyBzcGFjZQorICAgICAgICAgICAgICAgIHNzIDw8ICIgIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzcyA8PCBzdGQ6OnNldGZpbGwoJzAnKSA8PCBzdGQ6OnNldHcoMikKKyAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHYpKSA8PCAiICI7CisgICAgfQorICAgIG9zIDw8IHNzLnN0cigpIDw8IExPR19FTkRMOworfQorfSAvL25hbWVzcGFjZSBIaWRVdGlsCisKKyNlbmRpZiAvLyBISURVVElMX1NUUkVBTV9JT19VVElMX0hfCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9UcmlTdGF0ZS5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL1RyaVN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0NDgyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy9UcmlTdGF0ZS5oCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9UUklTVEFURV9IXworI2RlZmluZSBISURVVElMX1RSSVNUQVRFX0hfCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCituYW1lc3BhY2UgSGlkVXRpbCB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVHJpU3RhdGUgeworcHVibGljOgorICAgIC8vIGNvbnN0cnVjdG9yCisgICAgVHJpU3RhdGUoKSA6IG1Jc1NldChmYWxzZSkgeyB9CisgICAgVHJpU3RhdGUoY29uc3QgVHJpU3RhdGU8VD4gJm90aGVyKSA6IG1Jc1NldChvdGhlci5tSXNTZXQpLCBtVmFsdWUob3RoZXIubVZhbHVlKSB7IH0KKyAgICBleHBsaWNpdCBUcmlTdGF0ZShjb25zdCBUICZ2YWx1ZSkgOiBtSXNTZXQodHJ1ZSksIG1WYWx1ZSh2YWx1ZSkgeyB9CisKKyAgICB2b2lkIGNsZWFyKCkgeworICAgICAgICBtVmFsdWUgPSBUKCk7CisgICAgICAgIG1Jc1NldCA9IGZhbHNlOworICAgIH0KKyAgICBib29sIGlzU2V0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gbUlzU2V0OworICAgIH0KKworICAgIGNvbnN0IFQgZ2V0KGNvbnN0IFQgJmRlZmF1bHRWYWx1ZSkgY29uc3QgeworICAgICAgICByZXR1cm4gaXNTZXQoKSA/IG1WYWx1ZSA6IGRlZmF1bHRWYWx1ZTsKKyAgICB9CisKKyAgICAvLyBvcGVyYXRvciBvdmVybG9hZGluZworICAgIGV4cGxpY2l0IG9wZXJhdG9yIFQgKCkgY29uc3QgeworICAgICAgICBhc3NlcnQobUlzU2V0KTsKKyAgICAgICAgcmV0dXJuIG1WYWx1ZTsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3I9KGNvbnN0IFRyaVN0YXRlPFQ+ICZvdGhlcikgeworICAgICAgICBtSXNTZXQgPSBvdGhlci5tSXNTZXQ7CisgICAgICAgIG1WYWx1ZSA9IG90aGVyLm1WYWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFRyaVN0YXRlPFQ+JiBvcGVyYXRvcj0oY29uc3QgVCYgdmFsdWUpIHsKKyAgICAgICAgbUlzU2V0ID0gdHJ1ZTsKKyAgICAgICAgbVZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3IrKygpICB7CisgICAgICAgIGlmIChtSXNTZXQpIHsKKyAgICAgICAgICAgIG1WYWx1ZSsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiBvcGVyYXRvcisrKGludCkgeworICAgICAgICBUcmlTdGF0ZTxUPiB0bXAoKnRoaXMpOworICAgICAgICBvcGVyYXRvcisrKCk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yLS0oKSAgeworICAgICAgICBpZiAobUlzU2V0KSB7CisgICAgICAgICAgICBtVmFsdWUtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4gb3BlcmF0b3ItLShpbnQpIHsKKyAgICAgICAgVHJpU3RhdGU8VD4gdG1wKCp0aGlzKTsKKyAgICAgICAgb3BlcmF0b3ItLSgpOworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworI2RlZmluZSBVTkFSWV9PUChvcCkgXAorICAgIFRyaVN0YXRlPFQ+IG9wZXJhdG9yIG9wKCkgeyBcCisgICAgICAgIFRyaVN0YXRlPFQ+IHRtcCgqdGhpcyk7IFwKKyAgICAgICAgaWYgKG1Jc1NldCkgeyBcCisgICAgICAgICAgICB0bXAubVZhbHVlID0gb3AgdG1wLm1WYWx1ZTsgXAorICAgICAgICB9IFwKKyAgICAgICAgcmV0dXJuIHRtcDsgXAorICAgIH0KKworICAgIFVOQVJZX09QKCEpOworICAgIFVOQVJZX09QKC0pOworICAgIFVOQVJZX09QKH4pOworI3VuZGVmIFVOQVJZX09QCisKKyNkZWZpbmUgQ09NUE9VTkRfQVNTSUdOX09QKG9wKSBcCisgICAgVHJpU3RhdGU8VD4mIG9wZXJhdG9yIG9wIChjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7IFwKKyAgICAgICAgaWYgKG1Jc1NldCAmJiByaHMubUlzU2V0KSB7IFwKKyAgICAgICAgICAgIG1WYWx1ZSBvcCByaHMubVZhbHVlOyBcCisgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIG1Jc1NldCA9IGZhbHNlOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gKnRoaXM7IFwKKyAgICB9IFwKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3Igb3AoY29uc3QgVCYgcmhzKSB7IFwKKyAgICAgICAgaWYgKG1Jc1NldCkgeyBcCisgICAgICAgICAgICBtVmFsdWUgb3AgcmhzOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXR1cm4gKnRoaXM7IFwKKyAgICB9CisKKyAgICBDT01QT1VORF9BU1NJR05fT1AoKz0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUCgtPSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKCo9KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AoLz0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUCglPSk7CisgICAgQ09NUE9VTkRfQVNTSUdOX09QKCY9KTsKKyAgICBDT01QT1VORF9BU1NJR05fT1AofD0pOworICAgIENPTVBPVU5EX0FTU0lHTl9PUChePSk7CisjdW5kZWYgQ09NUE9VTkRfQVNTSUdOX09QCisKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3IgPj49KGludCBpKSB7CisgICAgICAgIGlmIChtSXNTZXQpIHsKKyAgICAgICAgICAgIG1WYWx1ZSA+Pj0gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7IFwKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiYgb3BlcmF0b3IgPDw9KGludCBpKSB7CisgICAgICAgIGlmIChtSXNTZXQpIHsKKyAgICAgICAgICAgIG1WYWx1ZSA8PD0gaTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKnRoaXM7IFwKKyAgICB9CisKKyAgICBUcmlTdGF0ZTxUPiBvcGVyYXRvciA8PChpbnQgaSkgeyBcCisgICAgICAgIFRyaVN0YXRlPFQ+IHRtcCgqdGhpcyk7CisgICAgICAgIG9wZXJhdG9yPDwoaSk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorCisgICAgVHJpU3RhdGU8VD4gb3BlcmF0b3IgPj4oaW50IGkpIHsgXAorICAgICAgICBUcmlTdGF0ZTxUPiB0bXAoKnRoaXMpOworICAgICAgICBvcGVyYXRvcj4+KGkpOworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworI2RlZmluZSBCSU5BUllfT1Aob3AsIGNvbXBvdW5kX29wKSBcCisgICAgZnJpZW5kIFRyaVN0YXRlPFQ+IG9wZXJhdG9yIG9wKFRyaVN0YXRlPFQ+IGxocywgY29uc3QgVHJpU3RhdGU8VD4mIHJocykgeyBcCisgICAgICAgIGxocyBjb21wb3VuZF9vcCByaHM7IFwKKyAgICByZXR1cm4gbGhzOyBcCisgICAgfVwKKyAgICAgICAgZnJpZW5kIFRyaVN0YXRlPFQ+IG9wZXJhdG9yIG9wKFRyaVN0YXRlPFQ+IGxocywgY29uc3QgVCYgcmhzKSB7IFwKKyAgICBsaHMgY29tcG91bmRfb3AgcmhzOyBcCisgICAgICAgIHJldHVybiBsaHM7IFwKKyAgICB9XAorICAgIGZyaWVuZCBUcmlTdGF0ZTxUPiBvcGVyYXRvciBvcChjb25zdCBUICZsaHMsIGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsgXAorICAgICAgICBUcmlTdGF0ZTxUPiB0bXAobGhzKTsgXAorICAgICAgICByZXR1cm4gdG1wIG9wIHJoczsgXAorICAgIH0KKworICAgIEJJTkFSWV9PUCgrLCArPSk7CisgICAgQklOQVJZX09QKC0sIC09KTsKKyAgICBCSU5BUllfT1AoKiwgKj0pOworICAgIEJJTkFSWV9PUCgvLCAvPSk7CisgICAgQklOQVJZX09QKCUsICU9KTsKKyAgICBCSU5BUllfT1AoJiwgJj0pOworICAgIEJJTkFSWV9PUCh8LCB8PSk7CisgICAgQklOQVJZX09QKF4sIF49KTsKKyN1bmRlZiBCSU5BUllfT1AKKworI2RlZmluZSBSRUxBVElPTl9PUChvcCkgXAorICAgIGZyaWVuZCBUcmlTdGF0ZTxib29sPiBvcGVyYXRvciBvcChjb25zdCBUcmlTdGF0ZTxUPiYgbGhzLCBjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7IFwKKyAgICAgICAgaWYgKGxocy5tSXNTZXQgJiYgcmhzLm1Jc1NldCkgeyBcCisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4obGhzLm1WYWx1ZSBvcCByaHMubVZhbHVlKTsgXAorICAgICAgICB9IGVsc2UgeyBcCisgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPigpOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIGZyaWVuZCBUcmlTdGF0ZTxib29sPiBvcGVyYXRvciBvcChjb25zdCBUcmlTdGF0ZTxUPiYgbGhzLCBjb25zdCBUJiByaHMpIHsgXAorICAgICAgICBpZiAobGhzLm1Jc1NldCkgeyBcCisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4obGhzLm1WYWx1ZSBvcCByaHMpOyBcCisgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPigpOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIGZyaWVuZCBUcmlTdGF0ZTxib29sPiBvcGVyYXRvciBvcChjb25zdCBUJiBsaHMsIGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsgXAorICAgICAgICBpZiAocmhzLm1Jc1NldCkgeyBcCisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4obGhzIG9wIHJocy5tVmFsdWUpOyBcCisgICAgICAgIH0gZWxzZSB7IFwKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPigpOyBcCisgICAgICAgIH0gXAorICAgIH0KKworICAgIFJFTEFUSU9OX09QKD09KTsKKyAgICBSRUxBVElPTl9PUCghPSk7CisgICAgUkVMQVRJT05fT1AoPj0pOworICAgIFJFTEFUSU9OX09QKDw9KTsKKyAgICBSRUxBVElPTl9PUCg+KTsKKyAgICBSRUxBVElPTl9PUCg8KTsKKyN1bmRlZiBSRUxBVElPTl9PUAorCisgICAgZnJpZW5kIFRyaVN0YXRlPGJvb2w+IG9wZXJhdG9yICYmKFRyaVN0YXRlPFQ+JiBsaHMsIGNvbnN0IFRyaVN0YXRlPFQ+JiByaHMpIHsKKyAgICAgICAgaWYgKGxocy5tSXNTZXQgJiYgcmhzLm1Jc1NldCkgeworICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KGxocy5tVmFsdWUgJiYgcmhzLm1WYWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gVHJpU3RhdGU8Ym9vbD4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyaWVuZCBUcmlTdGF0ZTxib29sPiBvcGVyYXRvciB8fChUcmlTdGF0ZTxUPiYgbGhzLCBjb25zdCBUcmlTdGF0ZTxUPiYgcmhzKSB7CisgICAgICAgIGlmIChsaHMubUlzU2V0ICYmIHJocy5tSXNTZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBUcmlTdGF0ZTxib29sPihsaHMubVZhbHVlIHx8IHJocy5tVmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFRyaVN0YXRlPGJvb2w+KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBUcmlTdGF0ZTxUPiAmdikgeworICAgICAgICBpZiAodi5tSXNTZXQpIHsKKyAgICAgICAgICAgIG9zIDw8IHYubVZhbHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3MgPDwgIltub3Qgc2V0XSI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9zOworICAgIH0KKworICAgIGZyaWVuZCBzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yID4+KHN0ZDo6aXN0cmVhbSAmaXMsIGNvbnN0IFRyaVN0YXRlPFQ+ICZ2KSB7CisgICAgICAgIFQgYTsKKyAgICAgICAgaXMgPj4gYTsKKyAgICAgICAgdiA9IFRyaVN0YXRlPFQ+KGEpOworICAgICAgICByZXR1cm4gaXM7CisgICAgfQorcHJpdmF0ZToKKyAgICBib29sIG1Jc1NldDsKKyAgICBUIG1WYWx1ZTsKK307CisKKy8vIGNvbW1vbmx5IHVzZWQgb25lcwordHlwZWRlZiBUcmlTdGF0ZTx1bnNpZ25lZD4gdHJpX3VpbnQ7Cit0eXBlZGVmIFRyaVN0YXRlPGludD4gdHJpX2ludDsKKwordHlwZWRlZiBUcmlTdGF0ZTx1aW50MzJfdD4gdHJpX3VpbnQzMl90OwordHlwZWRlZiBUcmlTdGF0ZTxpbnQzMl90PiB0cmlfaW50MzJfdDsKK3R5cGVkZWYgVHJpU3RhdGU8dWludDhfdD4gdHJpX3VpbnQ4X3Q7Cit0eXBlZGVmIFRyaVN0YXRlPHVpbnQxNl90PiB0cmlfdWludDE2X3Q7Cit9CisKKyNlbmRpZiAvLyBISURVVElMX1RSSVNUQVRFX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9IaWRQYXJzZXJFeGFtcGxlLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L0hpZFBhcnNlckV4YW1wbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzI0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9IaWRQYXJzZXJFeGFtcGxlLmNwcApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaW5jbHVkZSAiSGlkTG9nLmgiCisjaW5jbHVkZSAiSGlkUGFyc2VyLmgiCisjaW5jbHVkZSAiVGVzdEhpZERlc2NyaXB0b3IuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorCit1c2luZyBIaWRVdGlsOjpIaWRQYXJzZXI7CisKK2Jvb2wgZG9QYXJzZSgpIHsKKyAgICBIaWRQYXJzZXIgaGlkUGFyc2VyOworICAgIGJvb2wgcmV0ID0gdHJ1ZTsKKworICAgIGZvciAoY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKnAgPSBnRGVzY3JpcHRvckFycmF5OyA7ICsrcCkgeworICAgICAgICBpZiAocC0+ZGF0YSA9PSBudWxscHRyIHx8IHAtPmxlbiA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gcC0+bmFtZSAhPSBudWxscHRyID8gcC0+bmFtZSA6ICJ1bm5hbWVkIjsKKyAgICAgICAgYm9vbCBwYXJzZVJlc3VsdCA9IGhpZFBhcnNlci5wYXJzZShwLT5kYXRhLCBwLT5sZW4pOworCisgICAgICAgIGlmIChwYXJzZVJlc3VsdCkgeworICAgICAgICAgICAgTE9HX1YgPDwgbmFtZSA8PCAiICBmaWx0ZXJlZCB0cmVlOiAiIDw8IExPR19FTkRMOworICAgICAgICAgICAgTE9HX1YgPDwgKihoaWRQYXJzZXIuZ2V0VHJlZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgTE9HX0UgPDwgbmFtZSA8PCAiIHBhcnNpbmcgZXJyb3IhIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitib29sIGRvUGFyc2VBbmRGaWx0ZXIoKSB7CisgICAgSGlkUGFyc2VyIGhpZFBhcnNlcjsKKyAgICBib29sIHJldCA9IHRydWU7CisKKyAgICBmb3IgKGNvbnN0IFRlc3RIaWREZXNjcmlwdG9yICpwID0gZ0Rlc2NyaXB0b3JBcnJheTsgOyArK3ApIHsKKyAgICAgICAgaWYgKHAtPmRhdGEgPT0gbnVsbHB0ciB8fCBwLT5sZW4gPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IHAtPm5hbWUgIT0gbnVsbHB0ciA/IHAtPm5hbWUgOiAidW5uYW1lZCI7CisgICAgICAgIGJvb2wgcGFyc2VSZXN1bHQgPSBoaWRQYXJzZXIucGFyc2UocC0+ZGF0YSwgcC0+bGVuKTsKKworICAgICAgICBpZiAocGFyc2VSZXN1bHQpIHsKKyAgICAgICAgICAgIGhpZFBhcnNlci5maWx0ZXJUcmVlKCk7CisgICAgICAgICAgICBMT0dfViA8PCBuYW1lIDw8ICIgIGZpbHRlcmVkIHRyZWU6ICIgPDwgTE9HX0VOREw7CisgICAgICAgICAgICBMT0dfViA8PCAqKGhpZFBhcnNlci5nZXRUcmVlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgICAgICBMT0dfRSA8PCBuYW1lIDw8ICIgcGFyc2luZyBlcnJvciEiIDw8IExPR19FTkRMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2Jvb2wgZG9EaWdlc3QoKSB7CisgICAgSGlkUGFyc2VyIGhpZFBhcnNlcjsKKyAgICBib29sIHJldCA9IHRydWU7CisKKyAgICAvLyB2YWx1ZSBmcm9tIEhJRCBzZW5zb3IgdXNhZ2UgcGFnZSBzcGVjCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHVuc2lnbmVkIGludD4gaW50ZXJlc3RlZFVzYWdlID0geworICAgICAgICAweDIwMDA3MywgLy8gYWNjZWxlcm9tZXRlciAzZAorICAgICAgICAweDIwMDA3NiwgLy8gZ3lybyAzZAorICAgICAgICAweDIwMDA4MywgLy8gbWFnIDNkCisgICAgICAgIDB4MjAwMDhhLCAvLyBkZXZpY2Ugb3JpZW50YXRpb24gKHJvdGF0aW9uIHZlY3RvcikKKyAgICB9OworCisgICAgZm9yIChjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqcCA9IGdEZXNjcmlwdG9yQXJyYXk7IDsgKytwKSB7CisgICAgICAgIGlmIChwLT5kYXRhID09IG51bGxwdHIgfHwgcC0+bGVuID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBwLT5uYW1lICE9IG51bGxwdHIgPyBwLT5uYW1lIDogInVubmFtZWQiOworICAgICAgICBib29sIHBhcnNlUmVzdWx0ID0gaGlkUGFyc2VyLnBhcnNlKHAtPmRhdGEsIHAtPmxlbik7CisKKyAgICAgICAgaWYgKCFwYXJzZVJlc3VsdCkgeworICAgICAgICAgICAgTE9HX0UgPDwgbmFtZSA8PCAiIHBhcnNpbmcgZXJyb3IhIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBoaWRQYXJzZXIuZmlsdGVyVHJlZSgpOworICAgICAgICBMT0dfViA8PCBuYW1lIDw8ICIgIGRpZ2VzdDogIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgSGlkUGFyc2VyOjpEaWdlc3RWZWN0b3IgZGlnZXN0VmVjdG9yID0gaGlkUGFyc2VyLmdlbmVyYXRlRGlnZXN0KGludGVyZXN0ZWRVc2FnZSk7CisgICAgICAgIExPR19WIDw8IGRpZ2VzdFZlY3RvcjsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBwcmludFVzYWdlKGNoYXIgKmFyZ3YwKSB7CisgICAgTE9HX1YgPDwgIlVzYWdlOiAiIDw8IGFyZ3YwIDw8ICIgdGVzdF9uYW1lIiA8PCBMT0dfRU5ETDsKKyAgICBMT0dfViA8PCAiICB0ZXN0X25hbWUgY2FuIGJlIHBhcnNlLCBwYXJzZV9maWx0ZXIsIGRpZ2VzdC4iIDw8IExPR19FTkRMOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CisgICAgaW50IHJldDsKKworICAgIGlmIChhcmdjICE9IDIpIHsKKyAgICAgICAgTE9HX0UgPDwgIkVycm9yOiBuZWVkIHBhcmFtIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgcHJpbnRVc2FnZShhcmd2WzBdKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKHN0cmNtcChhcmd2WzFdLCAicGFyc2UiKSA9PSAwKSB7CisgICAgICAgIHJldCA9IGRvUGFyc2UoKSA/IDAgOiAxOworICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJwYXJzZV9maWx0ZXIiKSA9PSAwKSB7CisgICAgICAgIHJldCA9IGRvUGFyc2VBbmRGaWx0ZXIoKSA/IDAgOiAxOworICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sICJkaWdlc3QiKSA9PSAwKSB7CisgICAgICAgIHJldCA9IGRvRGlnZXN0KCkgPyAwIDogMTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0dfRSA8PCAiRXJyb3I6IHVua25vd24gdGVzdCBuYW1lIiA8PCBMT0dfRU5ETDsKKyAgICAgICAgcHJpbnRVc2FnZShhcmd2WzBdKTsKKyAgICAgICAgcmV0ID0gLUVOT0VOVDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvSGlkUGFyc2VyRXhhbXBsZTIuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvSGlkUGFyc2VyRXhhbXBsZTIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTFkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9IaWRQYXJzZXJFeGFtcGxlMi5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJUZXN0SGlkRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIkhpZExvZy5oIgorI2luY2x1ZGUgIkhpZFBhcnNlci5oIgorI2luY2x1ZGUgIlN0cmVhbUlvVXRpbC5oIgorCit1c2luZyBuYW1lc3BhY2UgSGlkVXRpbDsKKwordm9pZCBwcmludFJhd1ZhbHVlKGNvbnN0IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+ICZkZXNjcmlwdG9yKSB7CisgICAgTE9HX0QgPDwgIkRlc2NyaXB0b3IgWyIgPDwgZGVzY3JpcHRvci5zaXplKCkgPDwgIl06ICIgPDwgc3RkOjpoZXg7CisgICAgaGV4ZHVtcFRvU3RyZWFtKExPR19ELCBkZXNjcmlwdG9yLmJlZ2luKCksIGRlc2NyaXB0b3IuZW5kKCkpOworfQorCit2b2lkIHByaW50VG9rZW4oY29uc3Qgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gJmhpZEl0ZW1WZWN0b3IpIHsKKyAgICBMT0dfViA8PCAiVG90YWwgIiA8PCBoaWRJdGVtVmVjdG9yLnNpemUoKSA8PCAiIHRva2VucyIgPDwgTE9HX0VOREw7CisgICAgZm9yIChhdXRvICZpIDogaGlkSXRlbVZlY3RvcikgeworICAgICAgICBMT0dfViA8PCBpIDw8IExPR19FTkRMOworICAgIH0KK30KKworaW50IG1haW4oKSB7CisgICAgY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKnQgPSBmaW5kVGVzdERlc2NyaXB0b3IoImFjY2VsMyIpOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBpbnQgQUNDRUxfM0RfVVNBR0UgPSAweDIwMDA3MzsKKworICAgIGFzc2VydCh0ICE9IG51bGxwdHIpOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IGRlc2NyaXB0b3IodC0+ZGF0YSwgdC0+ZGF0YSArIHQtPmxlbik7CisKKyAgICAvLyBwYXJzZSBjYW4gYmUgZG9uZSBpbiBvbmUgc3RlcCB3aXRoIEhpZFBhcnNlcjo6cGFyc2UoY29uc3QgdW5zaWduZWQgY2hhciAqYmVnaW4sIHNpemVfdCBzaXplKTsKKyAgICAvLyBoZXJlIGl0IGlzIGRvbmUgaW4gbXVsdGlwbGUgc3RlcHMgZm9yIGlsbHVzdHJhdGlvbiBwdXJwb3NlCisgICAgSGlkUGFyc2VyIGhpZFBhcnNlcjsKKyAgICAvLyBwcmludCBvdXQgcmF3IHZhbHVlCisgICAgcHJpbnRSYXdWYWx1ZShkZXNjcmlwdG9yKTsKKworICAgIC8vIHRva2VuaXplIGl0CisgICAgc3RkOjp2ZWN0b3I8SGlkSXRlbT4gaGlkSXRlbVZlY3RvciA9IEhpZEl0ZW06OnRva2VuaXplKGRlc2NyaXB0b3IpOworCisgICAgLy8gcHJpbnQgb3V0IHRva2VucworICAgIHByaW50VG9rZW4oaGlkSXRlbVZlY3Rvcik7CisKKyAgICAvLyBwYXJzZSBpdAorICAgIGlmIChoaWRQYXJzZXIucGFyc2UoaGlkSXRlbVZlY3RvcikpIHsKKyAgICAgICAgLy8gbWFraW5nIGEgZGVlcGNvcHkgb2YgdHJlZSAobm90IG5lY2Vzc2FyeSwgYnV0IGZvciBpbGx1c3RyYXRpb24pCisgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxIaWRUcmVlTm9kZT4gdHJlZSA9IGhpZFBhcnNlci5nZXRUcmVlKCktPmRlZXBDb3B5KCk7CisKKyAgICAgICAgTE9HX1YgPDwgIlRyZWU6ICIgPDwgTE9HX0VOREw7CisgICAgICAgIExPR19WIDw8ICp0cmVlOworICAgICAgICBMT0dfViA8PCBMT0dfRU5ETDsKKworICAgICAgICBoaWRQYXJzZXIuZmlsdGVyVHJlZSgpOworICAgICAgICBMT0dfViA8PCAiRmlsdGVyZWRUcmVlOiAiIDw8IExPR19FTkRMOworICAgICAgICBMT0dfViA8PCAqKGhpZFBhcnNlci5nZXRUcmVlKCkpOworCisgICAgICAgIExPR19WIDw8ICJEaWdlc3RWZWN0b3I6ICIgPDwgTE9HX0VOREw7CisgICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDx1bnNpZ25lZCBpbnQ+IGludGVyZXN0ZWQgPSB7QUNDRUxfM0RfVVNBR0V9OworICAgICAgICBIaWRQYXJzZXI6OkRpZ2VzdFZlY3RvciBkaWdlc3RWZWN0b3IgPSBoaWRQYXJzZXIuZ2VuZXJhdGVEaWdlc3QoaW50ZXJlc3RlZCk7CisgICAgICAgIExPR19WIDw8IGRpZ2VzdFZlY3RvcjsKKworICAgIH0gZWxzZSB7CisgICAgICAgIExPR19WIDw8ICJQYXJzaW5nIEVycm9yIiA8PCBMT0dfRU5ETDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZERlc2NyaXB0b3IuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL0hpZFV0aWxzL3Rlc3QvVGVzdEhpZERlc2NyaXB0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNTdkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5jcHAKQEAgLTAsMCArMSwyNjA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJUZXN0SGlkRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlRlc3RIaWRTZW5zb3JTcGVjLmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKworLyoqCisgKiBFeGFtcGxlIEhJRCBzZW5zb3IgZGVzY3JpcHRvcnMgaW4gdGhpcyBmaWxlIGlzIGV4dHJhY3RlZCBmcm9tIHB1Ymxpc2hlZCBkb2N1bWVudAorICogIkhJRCBTZW5zb3JzIFVzYWdlIiAoaGlkLXNlbnNvcnMtdXNhZ2UuZG9jeCkuIFRoZXkgYXJlIGFkZGVkIGZvciB0ZXN0aW5nIG9mIEhpZFBhcnNlci4KKyAqCisgKiBJdCBpcyBzbGlnaHRseSBtb2RpZmllZCBpbiBvcmRlciB0byBjb21waWxlLgorICovCituYW1lc3BhY2UgeworLyoqCisgKiBUd28gc2Vuc29ycyBjb2xsZWN0aW9uIHNrZWxldG9uIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY29sMV9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfQ09MTEVDVElPTiwKKyAgICBISURfQ09MTEVDVElPTihBcHBsaWNhdGlvbiksCisKKyAgICBISURfUkVQT1JUX0lEKDEpLAorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL0ZlYXR1cmUgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAxCisKKyAgICAvL0lucHV0IFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMQorCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL2ZvciBSZXBvcnQgSUQgPSAxCisKKyAgICBISURfUkVQT1JUX0lEKDIpLAorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL0ZlYXR1cmUgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAyCisKKyAgICAvL0lucHV0IFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMgorCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL2ZvciBSZXBvcnQgSUQgPSAyCisKKyAgICAvL01vcmUgc2Vuc29ycyBmb2xsb3cgdXNpbmcgdGhlIHNhbWUgcGF0dGVybgorCisgICAgSElEX0VORF9DT0xMRUNUSU9OIC8vQXBwbGljYXRpb24KK307CisKKworLyoqCisgKiBDb21wb3NpdGUgZGV2aWNlIGRlc2NyaXB0b3IgZXhhbXBsZTogdHdvIHNlbnNvcnMgd2l0aCBhIGtleWJvYXJkIGFuZCBhIG1vdXNlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGNvbDJfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICAvL2tleWJvYXJkCisgICAgMHgwNVUsIDB4MDFVLCAgICAgICAgIC8vIFVTQUdFIFBBR0UgKEdlbmVyaWMgRGVza3RvcCkKKyAgICAweDA5VSwgMHgwNlUsICAgICAgICAgLy8gVVNBR0UgKEtleWJvYXJkKQorICAgIDB4QTFVLCAweDAxVSwgICAgICAgICAvLyBDT0xMRUNUSU9OIChBcHBsaWNhdGlvbikKKworICAgIDB4ODVVLCAweDAzVSwgICAgICAgICAvLyBSRVBPUlRfSUQgKDEpCisKKyAgICAweDE1VSwgMHgwMFUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1JTklNVU0gKDApCisgICAgMHgyNVUsIDB4MDFVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgxKQorICAgIDB4NzVVLCAweDAxVSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICgxKQorICAgIDB4OTVVLCAweDA4VSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoOCkKKyAgICAweDA1VSwgMHgwN1UsICAgICAgICAgLy8gICBVU0FHRSBQQUdFIChLZXlib2FyZCkKKyAgICAweDE5VSwgMHhFMFUsICAgICAgICAgLy8gICBVU0FHRSBNSU5JTVVNIChLZXlib2FyZCBMZWZ0Q29udHJvbCkKKyAgICAweDI5VSwgMHhFN1UsICAgICAgICAgLy8gICBVU0FHRSBNQVhJTVVNIChLZXlib2FyZCBSaWdodCBHVUkpCisgICAgMHg4MVUsIDB4MDJVLCAgICAgICAgIC8vICAgSU5QVVQgKFZhcikKKworICAgIDB4NzVVLCAweDA4VSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICg4KQorICAgIDB4OTVVLCAweDBBVSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoMTApCisgICAgMHgxOVUsIDB4MDBVLCAgICAgICAgIC8vICAgVVNBR0UgTUlOSU1VTSAoTm8gZXZlbnQpCisgICAgMHgyOVUsIDB4OTFVLCAgICAgICAgIC8vICAgVVNBR0UgTUFYSU1VTSAoS2V5Ym9hcmQgTEFORzIpCisgICAgMHgyNlUsIDB4RkZVLCAweDAwVSwgIC8vICAgTE9HSUNBTCBNQVhJTVVNICgweEZGKQorICAgIDB4ODFVLCAweDAwVSwgICAgICAgICAvLyAgIElOUFVUIChEYXRhLEFyeSxBYnMpCisKKyAgICAweEMwVSwgICAgICAgICAgICAgICAgLy8gRU5EIENPTExFQ1RJT04sIC8va2V5Ym9hcmQKKworICAgIC8vIFR3byBzZW5zb3IgY29sbGVjdGlvbiBza2VsZXRvbiBleGFtcGxlOgorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfQ09MTEVDVElPTiwKKyAgICBISURfQ09MTEVDVElPTihBcHBsaWNhdGlvbiksCisKKyAgICBISURfUkVQT1JUX0lEKDIpLAorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fQUNDRUxFUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL0ZlYXR1cmUgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAyCisKKyAgICAvL0lucHV0IFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMgorCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL2ZvciBSZXBvcnQgSUQgPSAyCisKKyAgICBISURfUkVQT1JUX0lEKDMpLAorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL0ZlYXR1cmUgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAzCisKKyAgICAvL0lucHV0IFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMworCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL2ZvciBSZXBvcnQgSUQgPSAzCisKKyAgICAvL01vcmUgc2Vuc29ycyBmb2xsb3cgdXNpbmcgdGhlIHNhbWUgcGF0dGVybgorCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL1NlbnNvciBjb2xsZWN0aW9uCisKKyAgICAvL21vdXNlCisgICAgMHgwNVUsIDB4MDFVLCAgICAgICAgIC8vIFVTQUdFIFBBR0UgKEdlbmVyaWMgRGVza3RvcCkKKyAgICAweDA5VSwgMHgwMlUsICAgICAgICAgLy8gVVNBR0UgKE1vdXNlKQorICAgIDB4QTFVLCAweDAxVSwgICAgICAgICAvLyBDT0xMRUNUSU9OIChBcHBsaWNhdGlvbikKKyAgICAweDg1VSwgMHgwNFUsICAgICAgICAgLy8gUkVQT1JUX0lEICg0KQorCisgICAgLy8gNSBtb3VzZSBidXR0b25zCisgICAgMHgwNVUsIDB4MDlVLCAgICAgICAgIC8vICAgVVNBR0UgUEFHRSAoQnV0dG9uKQorICAgIDB4MTlVLCAweDAxVSwgICAgICAgICAvLyAgIFVTQUdFIE1JTklNVU0gKEJ1dHRvbiAxKQorICAgIDB4MjlVLCAweDA1VSwgICAgICAgICAvLyAgIFVTQUdFIE1BWElNVU0gKEJ1dHRvbiA1KQorICAgIDB4MTVVLCAweDAwVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUlOSU1VTSAoMCkKKyAgICAweDI1VSwgMHgwMVUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKDEpCisgICAgMHg5NVUsIDB4MDVVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICg1KQorICAgIDB4NzVVLCAweDAxVSwgICAgICAgICAvLyAgIFJFUE9SVCBTSVpFICgxKQorICAgIDB4ODFVLCAweDAyVSwgICAgICAgICAvLyAgIElOUFVUIChEYXRhLFZhcixBYnMpCisKKyAgICAvLyAgMyB1bnVzZWQgYnV0dG9uczoKKyAgICAweDk1VSwgMHgwMVUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDEpCisgICAgMHg3NVUsIDB4MDNVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDMpCisgICAgMHg4MVUsIDB4MDNVLCAgICAgICAgIC8vICAgSU5QVVQgKENuc3QsVmFyLEFicykKKworICAgIC8vIG1vdXNlIChkZWx0YSB4LCBkZWx0YSB5KSBwb3NpdGlvbgorICAgIDB4MTVVLCAweDgxVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUlOSU1VTSAoLTEyNykKKyAgICAweDI1VSwgMHg3ZlUsICAgICAgICAgLy8gICBMT0dJQ0FMIE1BWElNVU0gKCsxMjcpCisgICAgMHg3NVUsIDB4MDhVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDgpCisgICAgMHg5NVUsIDB4MDJVLCAgICAgICAgIC8vICAgUkVQT1JUIENPVU5UICgyKQorICAgIDB4MDVVLCAweDAxVSwgICAgICAgICAvLyAgIFVTQUdFIFBBR0UgKEdlbmVyaWMgRGVza3RvcCkKKyAgICAweDA5VSwgMHgzMFUsICAgICAgICAgLy8gICBVU0FHRShYKQorICAgIDB4MDlVLCAweDMxVSwgICAgICAgICAvLyAgIFVTQUdFIChZKQorICAgIDB4ODFVLCAweDA2VSwgICAgICAgICAvLyAgIElOUFVUIChEYXRhLFZhcixSZWwpCisKKyAgICAweEMwVSwgICAgICAgICAgICAgICAgLy8gRU5EIENPTExFQ1RJT04gLy9tb3VzZQorfTsKKworCisvKioKKyAqIENvbXBvc2l0ZSBkZXZpY2UgZGVzY3JpcHRvciBleGFtcGxlOiBvbmUgc2Vuc29yIHdpdGggYSBrZXlib2FyZCBhbmQgYSBtb3VzZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjb2wzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgLy9rZXlib2FyZAorICAgIDB4MDVVLCAweDAxVSwgICAgICAgICAvLyBVU0FHRSBQQUdFIChHZW5lcmljIERlc2t0b3ApCisgICAgMHgwOVUsIDB4MDZVLCAgICAgICAgIC8vIFVTQUdFIChLZXlib2FyZCkKKyAgICAweEExVSwgMHgwMVUsICAgICAgICAgLy8gQ09MTEVDVElPTiAoQXBwbGljYXRpb24pCisKKyAgICAweDg1VSwgMHgwM1UsICAgICAgICAgLy8gUkVQT1JUX0lEICgxKQorCisgICAgMHgxNVUsIDB4MDBVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNSU5JTVVNICgwKQorICAgIDB4MjVVLCAweDAxVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoMSkKKyAgICAweDc1VSwgMHgwMVUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoMSkKKyAgICAweDk1VSwgMHgwOFUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDgpCisgICAgMHgwNVUsIDB4MDdVLCAgICAgICAgIC8vICAgVVNBR0UgUEFHRSAoS2V5Ym9hcmQpCisgICAgMHgxOVUsIDB4RTBVLCAgICAgICAgIC8vICAgVVNBR0UgTUlOSU1VTSAoS2V5Ym9hcmQgTGVmdENvbnRyb2wpCisgICAgMHgyOVUsIDB4RTdVLCAgICAgICAgIC8vICAgVVNBR0UgTUFYSU1VTSAoS2V5Ym9hcmQgUmlnaHQgR1VJKQorICAgIDB4ODFVLCAweDAyVSwgICAgICAgICAvLyAgIElOUFVUIChWYXIpCisKKyAgICAweDc1VSwgMHgwOFUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoOCkKKyAgICAweDk1VSwgMHgwQVUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDEwKQorICAgIDB4MTlVLCAweDAwVSwgICAgICAgICAvLyAgIFVTQUdFIE1JTklNVU0gKE5vIGV2ZW50KQorICAgIDB4MjlVLCAweDkxVSwgICAgICAgICAvLyAgIFVTQUdFIE1BWElNVU0gKEtleWJvYXJkIExBTkcyKQorICAgIDB4MjZVLCAweEZGVSwgMHgwMFUsICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoMHhGRikKKyAgICAweDgxVSwgMHgwMFUsICAgICAgICAgLy8gICBJTlBVVCAoRGF0YSxBcnksQWJzKQorCisgICAgMHhDMFUsICAgICAgICAgICAgICAgIC8vIEVORCBDT0xMRUNUSU9OLCAvL2tleWJvYXJkCisKKyAgICAvLyBPbmUgc2Vuc29yIGNvbGxlY3Rpb24gc2tlbGV0b24gZXhhbXBsZToKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0NPTExFQ1RJT04sCisgICAgSElEX0NPTExFQ1RJT04oQXBwbGljYXRpb24pLAorCisgICAgSElEX1JFUE9SVF9JRCgyKSwKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL0ZlYXR1cmUgUmVwb3J0IERlc2NyaXB0b3IgZm9yIFNlbnNvciBSZXBvcnQgSUQgPSAyCisKKyAgICAvL0lucHV0IFJlcG9ydCBEZXNjcmlwdG9yIGZvciBTZW5zb3IgUmVwb3J0IElEID0gMgorCisgICAgSElEX0VORF9DT0xMRUNUSU9OLCAvL2ZvciBSZXBvcnQgSUQgPSAyCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04sIC8vU2Vuc29yIGNvbGxlY3Rpb24KKworICAgIC8vbW91c2UKKyAgICAweDA1VSwgMHgwMVUsICAgICAgICAgLy8gVVNBR0UgUEFHRSAoR2VuZXJpYyBEZXNrdG9wKQorICAgIDB4MDlVLCAweDAyVSwgICAgICAgICAvLyBVU0FHRSAoTW91c2UpCisgICAgMHhBMVUsIDB4MDFVLCAgICAgICAgIC8vIENPTExFQ1RJT04gKEFwcGxpY2F0aW9uKQorICAgIDB4ODVVLCAweDA0VSwgICAgICAgICAvLyBSRVBPUlRfSUQgKDMpCisKKyAgICAvLyA1IG1vdXNlIGJ1dHRvbnMKKyAgICAweDA1VSwgMHgwOVUsICAgICAgICAgLy8gICBVU0FHRSBQQUdFIChCdXR0b24pCisgICAgMHgxOVUsIDB4MDFVLCAgICAgICAgIC8vICAgVVNBR0UgTUlOSU1VTSAoQnV0dG9uIDEpCisgICAgMHgyOVUsIDB4MDVVLCAgICAgICAgIC8vICAgVVNBR0UgTUFYSU1VTSAoQnV0dG9uIDUpCisgICAgMHgxNVUsIDB4MDBVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNSU5JTVVNICgwKQorICAgIDB4MjVVLCAweDAxVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoMSkKKyAgICAweDk1VSwgMHgwNVUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDUpCisgICAgMHg3NVUsIDB4MDFVLCAgICAgICAgIC8vICAgUkVQT1JUIFNJWkUgKDEpCisgICAgMHg4MVUsIDB4MDJVLCAgICAgICAgIC8vICAgSU5QVVQgKERhdGEsVmFyLEFicykKKworICAgIC8vICAzIHVudXNlZCBidXR0b25zOgorICAgIDB4OTVVLCAweDAxVSwgICAgICAgICAvLyAgIFJFUE9SVCBDT1VOVCAoMSkKKyAgICAweDc1VSwgMHgwM1UsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoMykKKyAgICAweDgxVSwgMHgwM1UsICAgICAgICAgLy8gICBJTlBVVCAoQ25zdCxWYXIsQWJzKQorCisgICAgLy8gbW91c2UgKGRlbHRhIHgsIGRlbHRhIHkpIHBvc2l0aW9uCisgICAgMHgxNVUsIDB4ODFVLCAgICAgICAgIC8vICAgTE9HSUNBTCBNSU5JTVVNICgtMTI3KQorICAgIDB4MjVVLCAweDdmVSwgICAgICAgICAvLyAgIExPR0lDQUwgTUFYSU1VTSAoKzEyNykKKyAgICAweDc1VSwgMHgwOFUsICAgICAgICAgLy8gICBSRVBPUlQgU0laRSAoOCkKKyAgICAweDk1VSwgMHgwMlUsICAgICAgICAgLy8gICBSRVBPUlQgQ09VTlQgKDIpCisgICAgMHgwNVUsIDB4MDFVLCAgICAgICAgIC8vICAgVVNBR0UgUEFHRSAoR2VuZXJpYyBEZXNrdG9wKQorICAgIDB4MDlVLCAweDMwVSwgICAgICAgICAvLyAgIFVTQUdFKFgpCisgICAgMHgwOVUsIDB4MzFVLCAgICAgICAgIC8vICAgVVNBR0UgKFkpCisgICAgMHg4MVUsIDB4MDZVLCAgICAgICAgIC8vICAgSU5QVVQgKERhdGEsVmFyLFJlbCkKKworICAgIDB4QzBVLCAgICAgICAgICAgICAgICAgLy8gICBFTkQgQ09MTEVDVElPTiAvL21vdXNlCit9OworCisKKy8qKgorICogU2ltcGxlIGN1c3RvbSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBjdXMxX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLCAgICAgICAgIC8vIFVTQUdFX1BBR0UgKFNlbnNvcikKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfT1RIRVJfQ1VTVE9NLCAvLyBVU0FHRSAoU2ltcGxlIEN1c3RvbSkKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBNb3JlIGNvbXBsZXggY3VzdG9tIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGN1czJfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsICAgICAgICAgLy8gVVNBR0VfUEFHRSAoU2Vuc29yKQorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9DVVNUT00sIC8vIFVTQUdFIChTaW1wbGUgQ3VzdG9tKQorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVVNBR0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fU1BFRURPTUVURVIKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX0JPT0xFQU5fQVJSQVksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fU1BFRURPTUVURVIKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzQsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV81LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksIC8vID0gSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TUEVFRCB2YWx1ZQorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgdmFsdWUKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIEN1c3RvbSBzZW5zb3IgZXhhbXBsZSB3aXRoIGZlYXR1cmVzCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY3VzM19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwgICAgICAgICAvLyBVU0FHRV9QQUdFIChTZW5zb3IpCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0NVU1RPTSwgLy8gVVNBR0UgKFNpbXBsZSBDdXN0b20pCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00sSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVVNBR0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLCAvLyA9IEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9NT1RJT05fU1BFRURPTUVURVIKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwgLy8gPSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NQRUVEIHZhbHVlCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBGdWxsIGN1c3RvbSBzZW5zb3IgZXhhbXBsZSB3aXRoIGZlYXR1cmUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgY3VzNF9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwgICAgICAgICAvLyBVU0FHRV9QQUdFIChTZW5zb3IpCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09USEVSX0NVU1RPTSwgLy8gVVNBR0UgKFNpbXBsZSBDdXN0b20pCisgICAgSElEX0NPTExFQ1RJT04oQXBwbGljYXRpb24pLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00sCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00sSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTSxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVVNBR0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fQk9PTEVBTl9BUlJBWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8zLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV80LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV81LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV82LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyNpZiAxIC8vZGVmaW5lIHZlbmRvci1zcGVjaWZpYyAobm9uLXNwZWMpIGN1c3RvbSBkYXRhZmllbGRzCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV83LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV84LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV85LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTEsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzEyLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTQsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE1LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTcsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE4LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xOSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjAsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIxLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMiwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI0LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjYsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI3LAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yOCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorI2VuZGlmCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogSHVtYW4gcHJlc2VuY2Ugc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgcHJlc19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfQklPTUVUUklDX1BSRVNFTkNFLAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJFU0VOQ0UsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksIC8vIEZhbHNlCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMSksIC8vIFRydWUKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIFByb3hpbWl0eSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBwcm94X3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9CSU9NRVRSSUNfUFJPWElNSVRZLAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BST1hJTUlUWV9SQU5HRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAibWV0ZXIiIHRvICJjZW50aW1ldGVyIgorICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfUkFOR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIm1ldGVyIiB0byAiY2VudGltZXRlciIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJtZXRlciIgdG8gImNlbnRpbWV0ZXIiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX09VVF9PRl9SQU5HRSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwgLy8gRmFsc2UKKyAgICBISURfTE9HSUNBTF9NQVhfOCgxKSwgLy8gVHJ1ZQorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX1JBTkdFLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIm1ldGVyIiB0byAiY2VudGltZXRlciIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogQmFyb21ldGVyIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGJhcl9yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1RZUEVfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkJhciIgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQmFyIiB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0ICJCYXIiIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfQVRNT1NQSEVSSUNfUFJFU1NVUkUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkJhciIgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBIdW1pZGl0eSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBodW1pX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX0hVTUlESVRZLAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9SRUxBVElWRV9IVU1JRElUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHgxMCwweDI3KSwgLy8gMTAwMDAgPSAwLjAwIHRvIDEwMC4wMCBwZXJjZW50IHdpdGggMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfUkVMQVRJVkVfSFVNSURJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHgxMCwweDI3KSwgLy8gMTAwMDAgPSAwLjAwIHRvIDEwMC4wMCBwZXJjZW50IHdpdGggMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfUkVMQVRJVkVfSFVNSURJVFksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHgxMCwweDI3KSwgLy8gMTAwMDAgPSAwLjAwIHRvIDEwMC4wMCBwZXJjZW50IHdpdGggMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9SRUxBVElWRV9IVU1JRElUWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHgxMCwweDI3KSwgLy8gMTAwMDAgPSAwLjAwIHRvIDEwMC4wMCBwZXJjZW50IHdpdGggMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgInBlcmNlbnQiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBUZW1wZXJhdHVyZSBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciB0ZW1wX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFLAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQ2Vsc2l1cyIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQ2Vsc2l1cyIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCAiQ2Vsc2l1cyIKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgxNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIkNlbHNpdXMiCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiBBbWJpZW50IGxpZ2h0IHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGFsc19yZXBvcnRfZGVzY3JpcHRvcltdID0geworICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwgICAgICAgICAvLyBVU0FHRV9QQUdFIChTZW5zb3IpCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xJR0hUX0FNQklFTlRMSUdIVCwgLy8gVVNBR0UgKEFtYmllbnRMaWdodCkKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0lMTFVNSU5BTkNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9SRUxfUENUKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHgxMCwweDI3KSwgLy8gMTAwMDAgPSAwLjAwIHRvIDEwMC4wMCBwZXJjZW50IHdpdGggMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0lMTFVNSU5BTkNFLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0lMTFVNSU5BTkNFLEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vYWRkIHRoaXMgZGVmaW5pdGlvbiBpZiByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb24KKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFU1BPTlNFX0NVUlZFLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMTApLCAvL2FzIHJlcXVpcmVkIGZvciBuIHBhaXIgb2YgdmFsdWVzCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMCBkaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0lMTFVNSU5BTkNFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ09MT1JfVEVNUEVSQVRVUkUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DSFJPTUFUSUNJVFlfWCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBDKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgNCBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DSFJPTUFUSUNJVFlfWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBDKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgNCBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogM0QgYWNjZWxlcm9tZXRlciBzZW5zb3IgZXhhbXBsZS4KKyAqLworY29uc3QgdW5zaWduZWQgY2hhciBhY2NlbDNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9BQ0NFTEVST01FVEVSXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCBHcyB0byBjZW50aS1HcworICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBHcyBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTixISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCBHcyB0byBjZW50aS1HcworICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBHcyBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTixISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCBHcyB0byBjZW50aS1HcworICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBHcyBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5wdXQgcmVwb3J0cyAodHJhbnNtaXQpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1NUQVRFX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTl9YX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCBHcyB0byBjZW50aS1HcworICAgIC8vIHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBHcyBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT05fWV9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksICAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgR3MgdG8gY2VudGktR3MKKyAgICAvLyB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgR3MgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OX1pfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAgLy8gc2NhbGUgZGVmYXVsdCB1bml0IEdzIHRvIGNlbnRpLUdzCisgICAgLy8gdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IEdzIGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5jbHVkZSB0aGUgZm9sbG93aW5nIGRhdGFmaWVsZCBpZiByZXF1aXJlZCB0byBzdXBwb3J0IHRoZSCTc2hha2WUIGV2ZW50CisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwgLy8gRmFsc2UgPSBTdGlsbAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDEpLCAvLyBUcnVlID0gSW4gTW90aW9uCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiAzRCBneXJvc2NvcGUgc2Vuc29yIGV4YW1wbGUuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgZ3lybzNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01PVElPTl9HWVJPTUVURVJfM0QsCisgICAgSElEX0NPTExFQ1RJT04oUGh5c2ljYWwpLAorCisgICAgLy9mZWF0dXJlIHJlcG9ydHMgKHhtaXQvcmVjZWl2ZSkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFLCAgLy8gTkFyeQorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNSksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVF9JTlRFUlZBTCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMzIoMHhGRiwweEZGLDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDMyKSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDApLAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZX1hfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFlfWV9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWV9aX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307CisKKworLyoqCisgKiAzRCBjb21wYXNzIHNlbnNvciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGNvbXAzX3JlcG9ydF9kZXNjcmlwdG9yW10gPSB7CisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PUklFTlRBVElPTl9DT01QQVNTXzNELAorICAgIEhJRF9DT0xMRUNUSU9OKFBoeXNpY2FsKSwKKworICAgIC8vZmVhdHVyZSByZXBvcnRzICh4bWl0L3JlY2VpdmUpCisgICAgSElEX1VTQUdFX1BBR0VfU0VOU09SLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0NPTk5FQ1RJT05fVFlQRSwgIC8vIE5BcnkKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEUsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoNiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9VTktOT1dOX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1JFQURZX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PVF9BVkFJTEFCTEVfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9JTklUSUFMSVpJTkdfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9FUlJPUl9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzMyKDB4RkYsMHhGRiwweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgzMiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgwKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NQVgpLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUlOKSwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0NPTVBFTlNBVEVEX01BR05FVElDX05PUlRILAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDEgZGlnaXQgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0NPTVBFTlNBVEVEX1RSVUVfTk9SVEgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfTk9SVEgsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBGKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMSBkaWdpdCBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVFJVRV9OT1JUSCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEYpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAxIGRpZ2l0IHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYX1hfQVhJUywKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEQpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gIm1pbGxpR2F1c3MiCisgICAgLy8gdG8gcHJvdmlkZSAzIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWF9ZX0FYSVMsCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBEKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvICJtaWxsaUdhdXNzIgorICAgIC8vIHRvIHByb3ZpZGUgMyBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVhfWl9BWElTLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRCksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byAibWlsbGlHYXVzcyIKKyAgICAvLyB0byBwcm92aWRlIDMgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1ksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9MT1csCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9NRURJVU0sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWV9ISUdILAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKworICAgIEhJRF9FTkRfQ09MTEVDVElPTgorfTsKKworCisvKioKKyAqIDNEIGluY2xpbm9tYXRlciBleGFtcGxlLgorICovCitjb25zdCB1bnNpZ25lZCBjaGFyIGluYzNfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0lOQ0xJTk9NRVRFUl8zRCwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX0FCUyksCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVCxISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEEoSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFQsSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9GRUFUVVJFKERhdGFfVmFyX0FicyksCisKKyAgICAvL2lucHV0IHJlcG9ydHMgKHRyYW5zbWl0KQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9JTlBVVChEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5ULAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDUpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BST1BFUlRZX0NIQU5HRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BPTExfUkVTUE9OU0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFRfWCwKKyAgICBISURfTE9HSUNBTF9NSU5fMTYoMHgwMSwweDgwKSwgLy8gICAgTE9HSUNBTF9NSU5JTVVNICgtMzI3NjcpCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHg3RiksIC8vICAgIExPR0lDQUxfTUFYSU1VTSAoMzI3NjcpCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgdG8gcHJvdmlkZSAyIGRpZ2l0cyBwYXN0IGRlY2ltYWwgcG9pbnQKKyAgICBISURfSU5QVVQoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVF9ZLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksIC8vIHNjYWxlIGRlZmF1bHQgdW5pdCB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgZGVjaW1hbCBwb2ludAorICAgIEhJRF9JTlBVVChEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUX1osCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwgLy8gc2NhbGUgZGVmYXVsdCB1bml0IHRvIHByb3ZpZGUgMiBkaWdpdHMgcGFzdCBkZWNpbWFsIHBvaW50CisgICAgSElEX0lOUFVUKERhdGFfVmFyX0FicyksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVE9NRVRFUl9BQ0NVUkFDWSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCgyKSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0xPVywKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX01FRElVTSwKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0hJR0gsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorCisgICAgSElEX0VORF9DT0xMRUNUSU9OCit9OworCisKKy8qKgorICogRGV2aWNlIG9yaWVudGF0aW9uIHNlbnNvciBleGFtcGxlLiBOb3RlIHRoaXMgbWFwcyB0byByb3RhdGlvbiB2ZWN0b3Igc2Vuc29yIGluIGFuZHJvaWQuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgZGV2b3JfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0RFVklDRV9PUklFTlRBVElPTiwKKyAgICBISURfQ09MTEVDVElPTihQaHlzaWNhbCksCisKKyAgICAvL2ZlYXR1cmUgcmVwb3J0cyAoeG1pdC9yZWNlaXZlKQorICAgIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9DT05ORUNUSU9OX1RZUEUsICAvLyBOQXJ5CisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzgoMiksCisgICAgSElEX1JFUE9SVF9TSVpFKDgpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX0NPTExFQ1RJT04oTG9naWNhbCksCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19XQUtFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfV0FLRV9TRUwsCisgICAgSElEX0ZFQVRVUkUoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCwKKyAgICBISURfRkVBVFVSRShEYXRhX0Fycl9BYnMpLAorICAgIEhJRF9FTkRfQ09MTEVDVElPTiwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDYpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9SRUFEWV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT1RfQVZBSUxBQkxFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX05PX0RBVEFfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0FDQ0VTU19ERU5JRURfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMLAorICAgIEhJRF9GRUFUVVJFKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUX0lOVEVSVkFMLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8zMigweEZGLDB4RkYsMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMzIpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMCksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMsCisgICAgSElEX0xPR0lDQUxfTUlOXzgoMCksCisgICAgSElEX0xPR0lDQUxfTUFYXzE2KDB4RkYsMHhGRiksCisgICAgSElEX1JFUE9SVF9TSVpFKDE2KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9VTklUX0VYUE9ORU5UKDB4MEUpLCAvLyBzY2FsZSBkZWZhdWx0IHVuaXQgIm1ldGVyIiB0byBwcm92aWRlIDIgZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUVVBVEVSTklPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTKSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweEZGKSwKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBKEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9RVUFURVJOSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDAxKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUVVBVEVSTklPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9NSU4pLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoMSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwMSksCisgICAgSElEX0ZFQVRVUkUoRGF0YV9WYXJfQWJzKSwKKworICAgIC8vaW5jbHVkZSB0aGlzIGlmIHRoZSB2YWx1ZXMgYXJlIGNhbGN1bGF0ZWQgaW4gZmlybXdhcmUKKyAgICAvL290aGVyd2lzZSwgdGhlIGRyaXZlciB3aWxsIGNhbGN1bGF0ZSB0aGVzZSB2YWx1ZXMgZnJvbSB0aGUgUXVhdGVybmlvbgorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUk9UQVRJT05fTUFUUklYLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMpLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4RkYpLAorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUk9UQVRJT05fTUFUUklYLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01BWCksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQShISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUk9UQVRJT05fTUFUUklYLAorICAgICAgICAgICAgICAgICAgICAgICAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiksCisgICAgSElEX0xPR0lDQUxfTUlOXzE2KDB4MDEsMHg4MCksIC8vICAgIExPR0lDQUxfTUlOSU1VTSAoLTMyNzY3KQorICAgIEhJRF9MT0dJQ0FMX01BWF8xNigweEZGLDB4N0YpLCAvLyAgICBMT0dJQ0FMX01BWElNVU0gKDMyNzY3KQorICAgIEhJRF9SRVBPUlRfU0laRSgxNiksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfVU5JVF9FWFBPTkVOVCgweDBFKSwKKyAgICBISURfRkVBVFVSRShEYXRhX1Zhcl9BYnMpLAorCisgICAgLy9pbnB1dCByZXBvcnRzICh0cmFuc21pdCkKKyAgICBISURfVVNBR0VfUEFHRV9TRU5TT1IsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURSwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg2KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9OT19EQVRBX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0lOSVRJQUxJWklOR19TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9BQ0NFU1NfREVOSUVEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX1NUQVRFX0VSUk9SX1NFTCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVCwKKyAgICBISURfTE9HSUNBTF9NSU5fOCgwKSwKKyAgICBISURfTE9HSUNBTF9NQVhfOCg1KSwKKyAgICBISURfUkVQT1JUX1NJWkUoOCksCisgICAgSElEX1JFUE9SVF9DT1VOVCgxKSwKKyAgICBISURfQ09MTEVDVElPTihMb2dpY2FsKSwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX1VOS05PV05fU0VMLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RBVEFfVVBEQVRFRF9TRUwsCisgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCwKKyAgICBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NIQU5HRV9TRU5TSVRJVklUWV9TRUwsCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisgICAgSElEX0VORF9DT0xMRUNUSU9OLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9RVUFURVJOSU9OLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoNCksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRSksCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisKKyAgICAvL2luY2x1ZGUgdGhpcyBpZiB0aGUgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGluIGZpcm13YXJlCisgICAgLy9vdGhlcndpc2UsIHRoZSBkcml2ZXIgd2lsbCBjYWxjdWxhdGUgdGhlc2UgdmFsdWVzIGZyb20gdGhlIFF1YXRlcm5pb24KKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUk9UQVRJT05fTUFUUklYLAorICAgIEhJRF9MT0dJQ0FMX01JTl8xNigweDAxLDB4ODApLCAvLyAgICBMT0dJQ0FMX01JTklNVU0gKC0zMjc2NykKKyAgICBISURfTE9HSUNBTF9NQVhfMTYoMHhGRiwweDdGKSwgLy8gICAgTE9HSUNBTF9NQVhJTVVNICgzMjc2NykKKyAgICBISURfUkVQT1JUX1NJWkUoMTYpLAorICAgIEhJRF9SRVBPUlRfQ09VTlQoOSksCisgICAgSElEX1VOSVRfRVhQT05FTlQoMHgwRiksCisgICAgSElEX0lOUFVUKERhdGFfQXJyX0FicyksCisKKyAgICBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZLAorICAgIEhJRF9MT0dJQ0FMX01JTl84KDApLAorICAgIEhJRF9MT0dJQ0FMX01BWF84KDIpLAorICAgIEhJRF9SRVBPUlRfU0laRSg4KSwKKyAgICBISURfUkVQT1JUX0NPVU5UKDEpLAorICAgIEhJRF9DT0xMRUNUSU9OKExvZ2ljYWwpLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTE9XLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfTUVESVVNLAorICAgIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRPTUVURVJfQUNDVVJBQ1lfSElHSCwKKyAgICBISURfSU5QVVQoRGF0YV9BcnJfQWJzKSwKKyAgICBISURfRU5EX0NPTExFQ1RJT04sCisKKyAgICBISURfRU5EX0NPTExFQ1RJT04KK307Cit9IC8vIGFubm95bW91cyBuYW1lc3BhY2UKKworLyoqCisgKiBHbG9iYWwgdGVzdCB2ZWN0b3IgZW50cnkuCisgKi8KKyNkZWZpbmUgVEVTVF9ERVNDUklQVE9SKG5hbWUpIFwKKyAgICB7IG5hbWUgIyMgX3JlcG9ydF9kZXNjcmlwdG9yLCBzaXplb2YobmFtZSAjIyBfcmVwb3J0X2Rlc2NyaXB0b3IpLCAjbmFtZSB9CisKK2NvbnN0IFRlc3RIaWREZXNjcmlwdG9yIGdEZXNjcmlwdG9yQXJyYXlbXSA9IHsKKyAgICBURVNUX0RFU0NSSVBUT1IoYWNjZWwzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY29sMSksCisgICAgVEVTVF9ERVNDUklQVE9SKGNvbDIpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjb2wzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY3VzMSksCisgICAgVEVTVF9ERVNDUklQVE9SKGN1czIpLAorICAgIFRFU1RfREVTQ1JJUFRPUihjdXMzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoY3VzNCksCisgICAgVEVTVF9ERVNDUklQVE9SKHByZXMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihwcm94KSwKKyAgICBURVNUX0RFU0NSSVBUT1IoYmFyKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoaHVtaSksCisgICAgVEVTVF9ERVNDUklQVE9SKHRlbXApLAorICAgIFRFU1RfREVTQ1JJUFRPUihhbHMpLAorICAgIFRFU1RfREVTQ1JJUFRPUihneXJvMyksCisgICAgVEVTVF9ERVNDUklQVE9SKGNvbXAzKSwKKyAgICBURVNUX0RFU0NSSVBUT1IoaW5jMyksCisgICAgVEVTVF9ERVNDUklQVE9SKGRldm9yKSwKKyAgICB7bnVsbHB0ciwgMCwgbnVsbHB0cn0gLy9zZW50aW5lbAorfTsKKyN1bmRlZiBURVNUX0RFU0NSSVBUT1IKKworY29uc3QgVGVzdEhpZERlc2NyaXB0b3IgKmZpbmRUZXN0RGVzY3JpcHRvcihjb25zdCBjaGFyICpuYW1lKSB7CisgICAgaWYgKG5hbWUgPT0gbnVsbHB0cikgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IFRlc3RIaWREZXNjcmlwdG9yICpwID0gZ0Rlc2NyaXB0b3JBcnJheTsgOyArK3ApIHsKKyAgICAgICAgaWYgKHAtPmRhdGEgPT0gbnVsbHB0ciB8fCBwLT5sZW4gPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmNtcChwLT5uYW1lLCBuYW1lKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWREZXNjcmlwdG9yLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxN2NiNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkRGVzY3JpcHRvci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBISURVVElMX1RFU1RfSElEREVTQ1JJUFRPUl9IXworI2RlZmluZSBISURVVElMX1RFU1RfSElEREVTQ1JJUFRPUl9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworc3RydWN0IFRlc3RIaWREZXNjcmlwdG9yIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworICAgIHNpemVfdCBsZW47CisgICAgY29uc3QgY2hhciAqbmFtZTsKK307CisKK2V4dGVybiBjb25zdCBUZXN0SGlkRGVzY3JpcHRvciBnRGVzY3JpcHRvckFycmF5W107Citjb25zdCBUZXN0SGlkRGVzY3JpcHRvciAqZmluZFRlc3REZXNjcmlwdG9yKGNvbnN0IGNoYXIgKm5hbWUpOworCisjZW5kaWYgLy8gSElEVVRJTF9URVNUX0hJRERFU0NSSVBUT1JfSF8KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1Rlc3RIaWRTZW5zb3JTcGVjLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkU2Vuc29yU3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmNiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UZXN0SGlkU2Vuc29yU3BlYy5oCkBAIC0wLDAgKzEsODU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgSElEVVRJTF9URVNUX0hJRFNFTlNPUlNQRUNfSAorI2RlZmluZSBISURVVElMX1RFU1RfSElEU0VOU09SU1BFQ19ICisvKioKKyAqIEV4YW1wbGUgSElEIHNlbnNvciBkZWZpbml0aW9uIGluIGZyb20gcHVibGlzaGVkIGRvY3VtZW50ICJISUQgU2Vuc29ycyBVc2FnZSIKKyAqIChoaWQtc2Vuc29ycy11c2FnZS5kb2N4KS4gVGhpcyBmaWxlIGlzIGFkZGVkIGFzIHBhcnQgb2YgdGhlIHRlc3QgY2FzZS4KKyAqCisgKiBJdCBpcyBzbGlnaHRseSBtb2RpZmllZCBpbiBvcmRlciB0byBjb21waWxlLgorICovCisjZGVmaW5lIEhJRF9VU0FHRV9QQUdFX1NFTlNPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSwweDIwCisKKy8vc2Vuc29yIGNhdGVnb3J5IHVzYWdlcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfQ09MTEVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHgwMQorLy9zZW5zb3IgY2F0ZWdvcnkgYmlvbWV0cmljCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfQklPTUVUUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDEwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9CSU9NRVRSSUNfUFJFU0VOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDExCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9CSU9NRVRSSUNfUFJPWElNSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDEyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9CSU9NRVRSSUNfVE9VQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDEzCisvL3NlbnNvciBjYXRlZ29yeSBlbGVjdHJpY2FsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfRUxFQ1RSSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDIwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX0NBUEFDSVRBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDIxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX0NVUlJFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDIyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX1BPV0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDIzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX0lORFVDVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDI0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX1JFU0lTVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDI1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX1ZPTFRBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDI2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX1BPVEVOVElPTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDI3CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDI4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTEVDVFJJQ0FMX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDI5CisvL3NlbnNvciBjYXRlZ29yeSBlbnZpcm9ubWVudGFsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfRU5WSVJPTk1FTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDMwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX0FUTU9TUEhFUklDX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDMxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX0hVTUlESVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDMyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDMzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX1dJTkRfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDM0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9FTlZJUk9OTUVOVEFMX1dJTkRfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweDM1CisvL3NlbnNvciBjYXRlZ29yeSBsaWdodAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX0xJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg0MAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTElHSFRfQU1CSUVOVExJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg0MQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTElHSFRfQ09OU1VNRVJfSU5GUkFSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg0MgorLy9zZW5zb3IgY2F0ZWdvcnkgbG9jYXRpb24KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX0JST0FEQ0FTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX0RFQURfUkVDS09OSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX0dQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX0xPT0tVUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX1NUQVRJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX0xPQ0FUSU9OX1RSSUFOR1VMQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NTcKKy8vc2Vuc29yIGNhdGVnb3J5IG1lY2hhbmljYWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9NRUNIQU5JQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfQk9PTEVBTl9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfQk9PTEVBTl9TV0lUQ0hfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfTVVMVElWQUxVRV9TV0lUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfRk9SQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfU1RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfU0NBTEVfV0VJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfVklCUkFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX01FQ0hBTklDQUxfSEFMTF9FRkZFQ1RfU1dJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4NjkKKy8vc2Vuc29yIGNhdGVnb3J5IG1vdGlvbgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0NBVEVHT1JZX01PVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3MAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVJfMUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3MQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVJfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3MgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVJfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3MworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8xRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3NAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3NQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUl8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3NgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX01PVElPTl9ERVRFQ1RPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3NworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX1NQRUVET01FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3OAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0FDQ0VMRVJPTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3OQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1RZUEVfTU9USU9OX0dZUk9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksMHg3QQorLy9zZW5zb3IgY2F0ZWdvcnkgb3JpZW50YXRpb24KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0NPTVBBU1NfMUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0NPTVBBU1NfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0NPTVBBU1NfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0lOQ0xJTk9NRVRFUl8xRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0lOQ0xJTk9NRVRFUl8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0lOQ0xJTk9NRVRFUl8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODYKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0RJU1RBTkNFXzFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0RJU1RBTkNFXzJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0RJU1RBTkNFXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4ODkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0RFVklDRV9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OEEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0NPTVBBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OEIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0lOQ0xJTk9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OEMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX09SSUVOVEFUSU9OX0RJU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OEQKKy8vc2Vuc29yIGNhdGVnb3J5IHNjYW5uZXIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9TQ0FOTkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OTAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX1NDQU5ORVJfQkFSQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OTEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX1NDQU5ORVJfUkZJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OTIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX1NDQU5ORVJfTkZDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4OTMKKy8vc2Vuc29yIGNhdGVnb3J5IHRpbWUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9DQVRFR09SWV9USU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4QTAKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX1RJTUVfQUxBUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4QTEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9UWVBFX1RJTUVfUlRDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5LDB4QTIKKy8vc2Vuc29yIGNhdGVnb3J5IG90aGVyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfQ0FURUdPUllfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEUwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9DVVNUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEUxCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9HRU5FUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEUyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVFlQRV9PVEhFUl9HRU5FUklDX0VOVU1FUkFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSwweEUzCisKKy8vdW5pdCB1c2FnZXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19OT1RfU1BFQ0lGSUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY1LDB4MDAgICAgICAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0xVWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHhFMSwweDAwLDB4MDAsMHgwMSAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfS0VMVklOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDAxLDB4MDAsMHgwMSwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19GQUhSRU5IRUlUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MDMsMHgwMCwweDAxLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1BBU0NBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHhGMSwweEUxICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfTkVXVE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDExLDB4RTEgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19NRVRFUlNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MTEsMHhGMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX01FVEVSU19QRVJfU0VDX1NRUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxMSwweEUwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfRkFSQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweEUxLDB4NEYsMHgyMCwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19BTVBFUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MDEsMHgwMCwweDEwLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1dBVFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgyMSwweEQxICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfSEVOUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NywweDIxLDB4RTEsMHhFMCwweDAwIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19PSE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY3LDB4MjEsMHhEMSwweEUwLDB4MDAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgyMSwweEQxLDB4RjAsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfSEVSVFogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDAxLDB4RjAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERUdSRUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY1LDB4MTQgICAgICAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFR1JFRVNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxNCwweEYwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVHUkVFU19QRVJfU0VDX1NRUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDE0LDB4RTAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19SQURJQU5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY1LDB4MTIgICAgICAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX1JBRElBTlNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjYsMHgxMiwweEYwICAgICAgICAgICAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUkFESUFOU19QRVJfU0VDX1NRUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDEyLDB4RTAgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY2LDB4MDEsMHgxMCAgICAgICAgICAgLy8gVW5pdAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0dBVVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjcsMHgwMSwweEUxLDB4RjAsMHgwMCAvLyBVbml0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfR1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NiwweDAxLDB4MDEgICAgICAgICAgIC8vIFVuaXQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19DRU5USU1FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY1LDB4MTEgICAgICAgICAgICAgICAgLy8gVW5pdAorI2lmZGVmIERFRklORV9OT05fSElEX1VOSVRTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfQ0VMU0lVUyAgICAgICAgICAgICAgIlVzZSBVbml0KEtlbHZpbikgYW5kIHN1YnRyYWN0IDI3My4xNSIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19LSUxPR1JBTSAgICAgICAgICAgICAiVXNlIFVuaXQoZ3JhbSkgYW5kIFVuaXRFeHBvbmVudCgweDAzKSIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19NRVRFUiAgICAgICAgICAgICAgICAiVXNlIFVuaXQoY2VudGltZXRlcikgYW5kIFVuaXRFeHBvbmVudCgweDAyKSIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19CQVIgICAgICAgICAgICAgICAgICAiVXNlIFVuaXQoUGFzY2FsKSBhbmQgVW5pdEV4cG9uZW50KDB4MDUpIgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0tOT1QgICAgICAgICAgICAgICAgICJVc2UgVW5pdChtL3MpIGFuZCBtdWx0aXBseSBieSAxODUyLzM2MDAiCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfUEVSQ0VOVCAgICAgICAgICAgICAgIlVzZSBVbml0KE5vdF9TcGVjaWZpZWQpIgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0cgICAgICAgICAgICAgICAgICAgICJVc2UgVW5pdChtL3MyKSBhbmQgZGl2aWRlIGJ5IDkuOCIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19NSUxMSVNFQ09ORCAgICAgICAgICAiVXNlIFVuaXQoc2Vjb25kKSBhbmQgVW5pdEV4cG9uZW50KDB4MEQpIgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX01JTExJR0FVU1MgICAgICAgICAgICJVc2UgVW5pdChHYXVzcykgYW5kIFVuaXRFeHBvbmVudCgweDBEKSIKKyNlbmRpZgorLy91bml0IGRlcHJlY2F0ZWQgdXNhZ2VzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9MVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfS0VMVklOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0NFTFNJVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9QQVNDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTkVXVE9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX01FVEVSU19QRVJfU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9LSUxPR1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfTUVURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX01FVEVSU19QRVJfU0VDX1NRUkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9GQVJBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfQU1QRVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX1dBVFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9IRU5SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfT0hNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX1ZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9IRVJUWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfQkFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0RFR1JFRVNfQU5USV9DTE9DS1dJU0UgICAgICAgICAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9ERUdSRUVTX0NMT0NLV0lTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfREVHUkVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0RFR1JFRVNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9LTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfUEVSQ0VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9NSUxMSVNFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1VOSVRTX0RFUFJFQ0FURURfRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9VTklUU19ERVBSRUNBVEVEX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFCCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfVU5JVFNfREVQUkVDQVRFRF9NSUxMSUdBVVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQworCisvL2RhdGEgdHlwZSB1c2FnZSBtb2RpZmllcnMgLS0gd2UgdXNlIHRoZW0gYXMgbW9kaWZpZXJzIGZvciBzZW5zb3IgcHJvcGVydGllcyAmIGRhdGEgZmllbGRzCisvL3RvIGNyZWF0ZSB0aHJlc2hvbGRzLCBmb3IgZXhhbXBsZS4KKy8vTk9URTogdGhlIHVzYWdlIHRhYmxlcyBhY3R1YWxseSBkZWZpbmUgdGhlc2UgYXMgdHdvIGJ5dGVzLCBidXQgaW4gb3JkZXIKKy8vdG8gZ2V0IHRoZSBkZWZpbmUgbWFjcm9zIHRvIHdvcmsgc28gdGhlc2UgYXJlIJFvci1lZJIgdGhlc2UgYXJlIGRlZmluZWQKKy8vaGVyZSBhcyBvbmx5IG9uZSBieXRlLgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfQUJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9BQ0NVUkFDWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfUkVTT0xVVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX1RIUkVTSE9MRF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9USFJFU0hPTERfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0FMSUJSQVRJT05fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX0NBTElCUkFUSU9OX01VTFRJUExJRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9SRVBPUlRfSU5URVJWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfRlJFUVVFTkNZX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX1BFUklPRF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAgLy8gVVMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PRF9DSEFOR0VfU0VOU0lUSVZJVFlfUkFOR0VfUENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEQwIC8vIFVTCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT0RfQ0hBTkdFX1NFTlNJVElWSVRZX1JFTF9QQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFMCAvLyBVUworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9EX1ZFTkRPUl9SRVNFUlZFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjAgLy8gVVMKKworCisvL3N0YXRlIHVzYWdlcworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMSwweDAyIC8vIE5BcnkKKy8vc3RhdGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA0LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA1LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA2LDB4MDggLy8gU2VsCisvL3N0YXRlIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfVU5LTk9XTl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfUkVBRFlfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9UX0FWQUlMQUJMRV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfTk9fREFUQV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfSU5JVElBTElaSU5HX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfQUNDRVNTX0RFTklFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfRVJST1JfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNyAvLyBFbnVtCisvL3N0YXRlIGRlcHJlY2F0ZWQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX1VOS05PV05fRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9OT1RfQVZBSUxBQkxFX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfUkVBRFlfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX05PX0RBVEFfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfU1RBVEVfREVQUkVDQVRFRF9JTklUSUFMSVpJTkdfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1NUQVRFX0RFUFJFQ0FURURfQUNDRVNTX0RFTklFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9TVEFURV9ERVBSRUNBVEVEX0VSUk9SX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2CisKKy8vZXZlbnQgdXNhZ2VzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAyLDB4MDIgLy8gTkFyeQorLy9ldmVudCBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9VTktOT1dOX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9TVEFURV9DSEFOR0VEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QUk9QRVJUWV9DSEFOR0VEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9EQVRBX1VQREFURURfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9QT0xMX1JFU1BPTlNFX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9DSEFOR0VfU0VOU0lUSVZJVFlfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTUsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9NQVhfUkVBQ0hFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTYsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9NSU5fUkVBQ0hFRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTcsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTgsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIRVNIT0xEX0NST1NTX0FCT1ZFX1NFTCAgICAgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE5LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfQkVMT1dfU0VMICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFBLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19BQk9WRV9TRUwgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFCLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19CRUxPV19TRUwgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19BQk9WRV9TRUwgICAgICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFELDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfQkVMT1dfU0VMICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUEVSSU9EX0VYQ0VFREVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFFLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfRlJFUVVFTkNZX0VYQ0VFREVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFGLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ09NUExFWF9UUklHR0VSX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIwLDB4MDggLy8gU2VsCisvL2V2ZW50IGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfVU5LTk9XTl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfU1RBVEVfQ0hBTkdFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREFUQV9VUERBVEVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfUE9MTF9SRVNQT05TRV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfQ0hBTkdFX1NFTlNJVElWSVRZX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTUFYX1JFQUNIRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNyAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTUlOX1JFQUNIRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfVVBXQVJEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USEVTSE9MRF9DUk9TU19BQk9WRV9FTlVNICAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ISUdIX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgIDB4MEEgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0hJR0hfVEhSRVNIT0xEX0NST1NTX0JFTE9XX0VOVU0gIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfSElHSF9USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfQUJPVkVfRU5VTSAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0xPV19USFJFU0hPTERfQ1JPU1NfQkVMT1dfRU5VTSAgIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfTE9XX1RIUkVTSE9MRF9DUk9TU19ET1dOV0FSRF9FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfVVBXQVJEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfQUJPVkVfRU5VTSAgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9aRVJPX1RIUkVTSE9MRF9DUk9TU19VUFdBUkRfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0RPV05XQVJEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgIDB4MEUgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1pFUk9fVEhSRVNIT0xEX0NST1NTX0JFTE9XX0VOVU0gIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfWkVST19USFJFU0hPTERfQ1JPU1NfRE9XTldBUkRfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX1BFUklPRF9FWENFRURFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0ZSRVFVRU5DWV9FWENFRURFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0NPTVBMRVhfVFJJR0dFUl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEgLy8gRW51bQorLy9ldmVudCBkZXByZWNhdGVkIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9VTktOT1dOX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfU1RBVEVfQ0hBTkdFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1BST1BFUlRZX0NIQU5HRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9EQVRBX1VQREFURV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfUE9MTF9SRVNQT05TRV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0NIQU5HRV9TRU5TSVRJVklUWV9FTlVNICAgICAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9NQVhfUkVBQ0hFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfTUlOX1JFQUNIRURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0hJR0hfVEhSRVNISE9MRF9DUk9TU19BQk9WRV9FTlVNICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9ISUdIX1RIUkVTSEhPTERfQ1JPU1NfQkVMT1dfRU5VTSAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfTE9XX1RIUkVTSEhPTERfQ1JPU1NfQUJPVkVfRU5VTSAgICAgICAgICAgICAgIDB4MEEKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX0xPV19USFJFU0hIT0xEX0NST1NTX0JFTE9XX0VOVU0gICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9aRVJPX1RIUkVTSE9MRF9DUk9TU19BQk9WRV9FTlVNICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0VWRU5UX0RFUFJFQ0FURURfWkVST19USFJFU0hPTERfQ1JPU1NfQkVMT1dfRU5VTSAgICAgICAgICAgICAgIDB4MEQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9FVkVOVF9ERVBSRUNBVEVEX1BFUklPRF9FWENFRURFRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRVZFTlRfREVQUkVDQVRFRF9GUkVRVUVOQ1lfRVhDRUVERURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgMHgwRgorCisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDAsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0ZSSUVORExZX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUEVSU0lTVEVOVF9VTklRVUVfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAyLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDMsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX01JTklNVU1fUkVQT1JUX0lOVEVSVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNCwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX01BTlVGQUNUVVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA1LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfTU9ERUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDYsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NFTlNPUl9TRVJJQUxfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNywweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0RFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA4LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9TRU5TT1JfQ09OTkVDVElPTl9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDksMHgwMyAvLyBOQXJ5CisvL2JlZ2luIGNvbm5lY3Rpb24gdHlwZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfSU5URUdSQVRFRF9TRUwgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfQVRUQUNIRURfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DT05ORUNUSU9OX1RZUEVfUENfRVhURVJOQUxfU0VMICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzIsMHgwOCAvLyBTZWwKKy8vZW5kIGNvbm5lY3Rpb24gdHlwZSBzZWxlY3RvcnMKKy8vYmVnaW4gY29ubmVjdGlvbiB0eXBlIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0lOVEVHUkFURURfRU5VTSAgICAgICAgICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0FUVEFDSEVEX0VOVU0gICAgICAgICAgICAgICAgICAgICAgMHgwMiAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ09OTkVDVElPTl9UWVBFX1BDX0VYVEVSTkFMX0VOVU0gICAgICAgICAgICAgICAgICAgICAgMHgwMyAvLyBFbnVtCisvL2VuZCBjb25uZWN0aW9uIHR5cGUgZW51bXMKKy8vYmVnaW4gY29ubmVjdGlvbiB0eXBlIGRlcHJlY2F0ZWQgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0NPTk5FQ1RJT05fVFlQRV9QQ19JTlRFR1JBVEVEX0VOVU0gICAgICAgICAweDAwIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0NPTk5FQ1RJT05fVFlQRV9QQ19BVFRBQ0hFRF9FTlVNICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0NPTk5FQ1RJT05fVFlQRV9QQ19FWFRFUk5BTF9FTlVNICAgICAgICAgICAweDAyIC8vIEVudW0KKy8vZW5kIGNvbm5lY3Rpb24gdHlwZSBkZXByZWNhdGVkIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0VOU09SX0RFVklDRV9QQVRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBBLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9IQVJEV0FSRV9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEIsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0ZJUk1XQVJFX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQywweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVMRUFTRV9EQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBELDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRfSU5URVJWQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEUsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0NIQU5HRV9TRU5TSVRJVklUWV9BQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRiwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfQ0hBTkdFX1NFTlNJVElWSVRZX1JBTkdFX1BDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEwLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9DSEFOR0VfU0VOU0lUSVZJVFlfUkVMX1BDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTEsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0FDQ1VSQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMiwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVTT0xVVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEzLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SQU5HRV9NQVhJTVVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTQsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JBTkdFX01JTklNVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNSwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE2LDB4MDMgLy8gTkFyeQorLy9iZWdpbiByZXBvcnRpbmcgc3RhdGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9SRVBPUlRJTkdfU1RBVEVfT05fTk9ORV9TRUwgICAgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1NFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfUkVQT1JUSU5HX1NUQVRFX09OX0FMTF9TRUwgICAgICAgIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfU0VMICAgICAgICAgICAgICAgICAgMHgwQSwweDQyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9SRVBPUlRJTkdfU1RBVEVfT05fVEhSRVNIT0xEX1NFTCAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19TRUwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1dBS0VfU0VMICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDMsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19XQUtFX1NFTCAgICAgICAgICAgICAgICAgICAweDBBLDB4NDQsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19XQUtFX1NFTCAgICAgICAgICAgICAweDBBLDB4NDUsMHgwOCAvLyBTZWwKKy8vZW5kIHJlcG9ydGluZyBzdGF0ZSBzZWxlY3RvcnMKKy8vYmVnaW4gcmVwb3J0aW5nIHN0YXRlIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19FTlVNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9SRVBPUlRJTkdfU1RBVEVfT05fTk9ORV9FTlVNICAgICAgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19FTlVNICAgICAgICAgICAgICAgICAgICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1JFUE9SVElOR19TVEFURV9PTl9BTExfRU5VTSAgICAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfVEhSRVNIT0xEX0VWRU5UU19FTlVNICAgICAgICAgICAgICAgICAweDAzIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1JFUE9SVElOR19TVEFURV9PTl9USFJFU0hPTERfRU5VTSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX1NFTF9XQUtFX0VOVU0gICAgICAgICAgICAgICAgICAgMHgwNCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfU0VMX1dBS0VfRU5VTSAgICAgICAgICAgICAgICAgIDB4MDUgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfRU5VTSAgICAgICAgICAgIDB4MDYgLy8gRW51bQorLy9lbmQgcmVwb3J0aW5nIHN0YXRlIGVudW1zCisvL2JlZ2luIHJlcG9ydGluZyBzdGF0ZSBkZXByZWNhdGVkIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfTk9fRVZFTlRTX0VOVU0gICAgICAgICAgICAgMHgwMCAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9PTl9OT05FX0VOVU0gICAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX05PX0VWRU5UU19FTlVNCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfQUxMX0VWRU5UU19FTlVNICAgICAgICAgICAgMHgwMSAvLyBFbnVtCisjZGVmaW5lIEhJRF9VU0FHRV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9PTl9BTExfRU5VTSAgICAgICBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX0FMTF9FVkVOVFNfRU5VTQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfUkVQT1JUSU5HX1NUQVRFX1RIUkVTSE9MRF9FVkVOVFNfRU5VTSAgICAgIDB4MDIgLy8gRW51bQorI2RlZmluZSBISURfVVNBR0VfREVQUkVDQVRFRF9SRVBPUlRJTkdfU1RBVEVfT05fVEhSRVNIT0xEX0VOVU0gSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX0VOVU0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9OT19FVkVOVFNfV0FLRV9FTlVNICAgICAgICAweDAzIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9BTExfRVZFTlRTX1dBS0VfRU5VTSAgICAgICAweDA0IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1JFUE9SVElOR19TVEFURV9USFJFU0hPTERfRVZFTlRTX1dBS0VfRU5VTSAweDA1IC8vIEVudW0KKy8vZW5kIHJlcG9ydGluZyBzdGF0ZSBkZXByZWNhdGVkIGVudW1zCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0FNUExJTkdfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE3LDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9SRVNQT05TRV9DVVJWRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTgsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1BPV0VSX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOSwweDAzIC8vIE5BcnkKKy8vYmVnaW4gcG93ZXIgc3RhdGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfVU5ERUZJTkVEX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDBfRlVMTF9QT1dFUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDFfTE9XX1BPV0VSX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDJfU1RBTkRCWV9XSVRIX1dBS0VfU0VMICAgICAgICAgICAgICAgICAgMHgwQSwweDUzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDNfU0xFRVBfV0lUSF9XQUtFX1NFTCAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU0LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfUE9XRVJfU1RBVEVfRDRfUE9XRVJfT0ZGX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU1LDB4MDggLy8gU2VsCisvL2VuZCBwb3dlciBzdGF0ZSBzZWxlY3RvcnMKKy8vYmVnaW4gcG93ZXIgc3RhdGUgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9VTkRFRklORURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMF9GVUxMX1BPV0VSX0VOVU0gICAgICAgICAgICAgICAgICAgICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMV9MT1dfUE9XRVJfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAzIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EMl9TVEFOREJZX1dJVEhfV0FLRV9FTlVNICAgICAgICAgICAgICAgICAweDA0IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9EM19TTEVFUF9XSVRIX1dBS0VfRU5VTSAgICAgICAgICAgICAgICAgICAweDA1IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9QT1dFUl9TVEFURV9ENF9QT1dFUl9PRkZfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAweDA2IC8vIEVudW0KKy8vZW5kIHBvd2VyIHN0YXRlIGVudW1zCisvL2JlZ2luIGRlcHJlY2F0ZWQgcG93ZXIgc3RhdGUgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1BPV0VSX1NUQVRFX1VOREVGSU5FRF9FTlVNICAgICAgICAgICAgICAgICAweDAwIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1BPV0VSX1NUQVRFX0QwX0ZVTExfUE9XRVJfRU5VTSAgICAgICAgICAgICAweDAxIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1BPV0VSX1NUQVRFX0QxX0xPV19QT1dFUl9FTlVNICAgICAgICAgICAgICAweDAyIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1BPV0VSX1NUQVRFX0QyX1NUQU5EQllfV0lUSF9XQUtFX0VOVU0gICAgICAweDAzIC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1BPV0VSX1NUQVRFX0QzX1NMRUVQX1dJVEhfV0FLRV9FTlVNICAgICAgICAweDA0IC8vIEVudW0KKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX1BPV0VSX1NUQVRFX0Q0X1BPV0VSX09GRl9FTlVNICAgICAgICAgICAgICAweDA1IC8vIEVudW0KKy8vZW5kIGRlcHJlY2F0ZWQgcG93ZXIgc3RhdGUgZW51bXMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0ZFQVRVUkVfUEFHRV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUEsMHgwMworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0RFUFJFQ0FURURfRkVBVFVSRV9QQUdFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQiwweDAzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfREVQUkVDQVRFRF9JTlBVVF9QQUdFX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFDLDB4MDMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9ERVBSRUNBVEVEX0lOUFVUX1BBR0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUQsMHgwMworCisvL2RhdGEgdHlwZSBsb2NhdGlvbgorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9ERVNJUkVEX0FDQ1VSQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FMVElUVURFX0FOVEVOTkFfU0VBTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fRElGRkVSRU5USUFMX1JFRkVSRU5DRV9TVEFUSU9OX0lEICAgICAgICAgICAgICAgIDB4MEEsMHgwMywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BTFRJVElERV9FTElQU09JRF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FMVElUSURFX0VMSVBTT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQUxUSVRVREVfU0VBTEVWRUxfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BTFRJVFVERV9TRUFMRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA3LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0RHUFNfREFUQV9BR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDgsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fRVJST1JfUkFESVVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9GSVhfUVVBTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBBLDB4MDQgLy8gTkFyeQorLy9iZWdpbiBmaXggcXVhbGl0eSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9RVUFMSVRZX05PX0ZJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9RVUFMSVRZX0dQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0ZJWF9RVUFMSVRZX0RHUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzIsMHgwOCAvLyBTZWwKKy8vZW5kIGZpeCBxdWFsaXR5IHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fRklYX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwQiwweDA0IC8vIE5BcnkKKy8vYmVnaW4gZml4IHR5cGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9OT19GSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9HUFNfU1BTX01PREVfRklYX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9ER1BTX1NQU19NT0RFX0ZJWF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9HUFNfUFBTX01PREVfRklYX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9SRUFMX1RJTUVfS0lORU1BVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg0LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9GTE9BVF9SVEsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg1LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9FU1RJTUFURURfREVBRF9SRUNLT05JTkcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg2LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9NQU5VQUxfSU5QVVRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg3LDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9GSVhfVFlQRV9TSU1VTEFUT1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg4LDB4MDggLy8gU2VsCisvL2VuZCBmaXggdHlwZSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0dFT0lEQUxfU0VQQVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MEMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fR1BTX09QRVJBVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRCwweDA0IC8vIE5BcnkKKy8vYmVnaW4gZ3BzIG9wZXJhdGlvbiBtb2RlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX09QX01PREVfTUFOVUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5MCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX09QX01PREVfQVVUT01BVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5MSwweDA4IC8vIFNlbAorLy9lbmQgZ3BzIG9wZXJhdGlvbiBtb2RlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fR1BTX1NFTEVDVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRSwweDA0IC8vIE5BcnkKKy8vYmVnaW4gZ3BzIHNlbGVjdGlvbiBtb2RlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NFTF9NT0RFX0FVVE9OT01PVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NFTF9NT0RFX0RHUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMSwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NFTF9NT0RFX0VTVElNQVRFRF9ERUFEX1JFQ0tPTklORyAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMiwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NFTF9NT0RFX01BTlVBTF9JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMywweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NFTF9NT0RFX1NJTVVMQVRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBNCwweDA4IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR1BTX1NFTF9NT0RFX0RBVEFfTk9UX1ZBTElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBNSwweDA4IC8vIFNlbAorLy9lbmQgZ3BzIHNlbGVjdGlvbiBtb2RlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fR1BTX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwRiwweDA0IC8vIE5BcnkKKy8vYmVnaW4gZ3BzIHN0YXR1cyBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TVEFUVVNfREFUQV9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dQU19TVEFUVVNfREFUQV9OT1RfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjEsMHgwOCAvLyBTZWwKKy8vZW5kIGdwcyBzdGF0dXMgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9QT1NJVElPTl9ESUxVVElPTl9PRl9QUkVDSVNJT04gICAgICAgICAgICAgICAgICAgMHgwQSwweDEwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0hPUklaT05UQUxfRElMVVRJT05fT0ZfUFJFQ0lTSU9OICAgICAgICAgICAgICAgICAweDBBLDB4MTEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fVkVSVElDQUxfRElMVVRJT05fT0ZfUFJFQ0lTSU9OICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxMiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9MQVRJVFVERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0xPTkdJVFVERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fVFJVRV9IRUFESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxNSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9NQUdORVRJQ19IRUFESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX01BR05FVElDX1ZBUklBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MTcsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxOCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX0lOX1ZJRVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE5LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfSU5fVklFV19BWklNVVRIICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19JTl9WSUVXX0VMRVZBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxQiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX0lOX1ZJRVdfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFDLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfSU5fVklFV19QUk5zICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MUQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fU0FURUxMSVRFU19JTl9WSUVXX1NUTl9SQVRJTyAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgxRSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TQVRFTExJVEVTX1VTRURfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFGLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX1NBVEVMTElURVNfVVNFRF9QUk5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fTk1FQV9TRU5URU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9BRERSRVNTX0xJTkVfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0FERFJFU1NfTElORV8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fQ0lUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MT0NBVElPTl9TVEFURV9PUl9QUk9WSU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xPQ0FUSU9OX0NPVU5UUllfT1JfUkVHSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTE9DQVRJT05fUE9TVEFMX0NPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNywweDA0CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MkEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0xPQ0FUSU9OX0RFU0lSRURfQUNDVVJBQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyQiwweDA0IC8vIE5BcnkKKy8vYmVnaW4gbG9jYXRpb24gZGVzaXJlZCBhY2N1cmFjeSBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9ERVNJUkVEX0FDQ1VSQUNZX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjAsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9ERVNJUkVEX0FDQ1VSQUNZX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjEsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9ERVNJUkVEX0FDQ1VSQUNZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjIsMHgwOCAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9ERVNJUkVEX0FDQ1VSQUNZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjMsMHgwOCAvLyBTZWwKKy8vZW5kIGxvY2F0aW9uIGRlc2lyZWQgYWNjdXJhY3kgc2VsZWN0b3JzCisKKy8vZGF0YSB0eXBlIGVudmlyb25tZW50YWwKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9BVE1PU1BIRVJJQ19QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1JFRkVSRU5DRV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfUkVMQVRJVkVfSFVNSURJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5WSVJPTk1FTlRBTF9URU1QRVJBVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzNCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlZJUk9OTUVOVEFMX1dJTkRfRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDM1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VOVklST05NRU5UQUxfV0lORF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzYsMHgwNAorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfRU5WSVJPTk1FTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9FTlZJUk9OTUVOVEFMX1JFRkVSRU5DRV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDEsMHgwNAorCisvL2RhdGEgdHlwZSBtb3Rpb24KKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BQ0NFTEVSQVRJT05fWF9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FDQ0VMRVJBVElPTl9ZX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQUNDRUxFUkFUSU9OX1pfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU1LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTYsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfVkVMT0NJVFlfWF9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9WRUxPQ0lUWV9ZX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU4LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1ZFTE9DSVRZX1pfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTksMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfUE9TSVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fQU5HVUxBUl9QT1NJVElPTl9YX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVCLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9BTkdVTEFSX1BPU0lUSU9OX1lfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTU9USU9OX0FOR1VMQVJfUE9TSVRJT05fWl9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NT1RJT05fU1BFRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVFLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01PVElPTl9JTlRFTlNJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUYsMHgwNAorCisvL2RhdGEgdHlwZSBvcmllbnRhdGlvbgorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0hFQURJTkdfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfSEVBRElOR19ZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19IRUFESU5HX1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0NPTVBFTlNBVEVEX01BR05FVElDX05PUlRIICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fQ09NUEVOU0FURURfVFJVRV9OT1JUSCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19OT1JUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc3LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RSVUVfTk9SVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzgsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fRElTVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3OSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ESVNUQU5DRV9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdBLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX0RJU1RBTkNFX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0IsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fRElTVEFOQ0VfWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3QywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9ESVNUQU5DRV9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDdELDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0UsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fVElMVF9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3RiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9USUxUX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX1RJTFRfWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fUk9UQVRJT05fTUFUUklYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9RVUFURVJOSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUSUNfRkxVWF9YX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4NSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9PUklFTlRBVElPTl9NQUdORVRJQ19GTFVYX1lfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDg2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX09SSUVOVEFUSU9OX01BR05FVElDX0ZMVVhfWl9BWElTICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODcsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODgsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RTAsMHgwOAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RTEsMHgwOAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfT1JJRU5UQVRJT05fTUFHTkVUT01FVEVSX0FDQ1VSQUNZX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RTIsMHgwOAorCisvL2RhdGEgdHlwZSBtZWNoYW5pY2FsCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDkwLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfQk9PTEVBTl9TV0lUQ0hfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTEsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9CT09MRUFOX1NXSVRDSF9BUlJBWV9TVEFURVMgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5MiwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX01VTFRJVkFMVUVfU1dJVENIX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDkzLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfRk9SQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTQsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9BQlNPTFVURV9QUkVTU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5NSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX0dBVUdFX1BSRVNTVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDk2LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfU1RSQUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4OTcsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTUVDSEFOSUNBTF9XRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg5OCwweDA0CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9NRUNIQU5JQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX01FQ0hBTklDQUxfVklCUkFUSU9OX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhBMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9NRUNIQU5JQ0FMX1ZJQlJBVElPTl9TUEVFRF9GT1JXQVJEICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEEyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX01FQ0hBTklDQUxfVklCUkFUSU9OX1NQRUVEX0JBQ0tXQVJEICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QTMsMHgwNAorCisvL2RhdGEgdHlwZSBiaW9tZXRyaWMKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1BSRVNFTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9CSU9NRVRSSUNfSFVNQU5fUFJPWElNSVRZX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEIyLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0JJT01FVFJJQ19IVU1BTl9QUk9YSU1JVFlfT1VUX09GX1JBTkdFICAgICAgICAgICAgICAgICAgICAweDBBLDB4QjMsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQklPTUVUUklDX0hVTUFOX1RPVUNIX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhCNCwweDA0CisKKy8vZGF0YSB0eXBlIGxpZ2h0IHNlbnNvcgorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9JTExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQxLDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NPTE9SX1RFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDIsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ0hST01BVElDSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhEMywweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9MSUdIVF9DSFJPTUFUSUNJVFlfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQ0LDB4MDQKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0xJR0hUX0NIUk9NQVRJQ0lUWV9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RDUsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfTElHSFRfQ09OU1VNRVJfSVJfU0VOVEVOQ0VfUkVDRUlWRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhENiwweDA0CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RTAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0xJR0hUX0NPTlNVTUVSX0lSX1NFTlRFTkNFX1NFTkQgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhFMSwweDA0CisKKy8vZGF0YSB0eXBlIHNjYW5uZXIKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1NDQU5ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4RjAsMHgwNAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfU0NBTk5FUl9SRklEX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhGMSwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9TQ0FOTkVSX05GQ19TRU5URU5DRV9SRUNFSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEYyLDB4MDQKKy8vcHJvcGVydHkgdXNhZ2VzIChnZXQvc2V0IGZlYXR1cmUgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1NDQU5ORVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHhGOCwweDA0CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfU0NBTk5FUl9ORkNfU0VOVEVOQ0VfU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEY5LDB4MDQKKworLy9kYXRhIHR5cGUgZWxlY3RyaWNhbAorLy9kYXRhIGZpZWxkIHVzYWdlcyAoaW5wdXQgcmVwb3J0KQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX0NBUEFDSVRBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfQ1VSUkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDIsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9QT1dFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwMywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX0lORFVDVEFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA0LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfUkVTSVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDUsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9WT0xUQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwNiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTEVDVFJJQ0FMX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA3LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0VMRUNUUklDQUxfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MDgsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRUxFQ1RSSUNBTF9QRVJDRU5UX09GX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgwOSwweDA1CisKKy8vZGF0YSB0eXBlIHRpbWUKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9ZRUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyMSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX01PTlRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIyLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfREFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9EQVlfT0ZfV0VFSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX0hPVVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI1LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfTUlOVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyNywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9USU1FX01JTExJU0VDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI4LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX1RJTUVfVElNRVNUQU1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MjksMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfVElNRV9KVUxJQU5fREFZX09GX1lFQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgyQSwweDA1CisvL3Byb3BlcnR5IHVzYWdlcyAoZ2V0L3NldCBmZWF0dXJlIHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9USU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4MzAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1RJTUVfVElNRV9aT05FX09GRlNFVF9GUk9NX1VUQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzMSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfVElNRV9USU1FX1pPTkVfTkFNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDMyLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9USU1FX0RBWUxJR0hUX1NBVklOR1NfVElNRV9PQlNFUlZFRCAgICAgICAgICAgICAgICAgICAweDBBLDB4MzMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX1RJTUVfVElNRV9UUklNX0FESlVTVE1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHgzNCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfVElNRV9BUk1fQUxBUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDM1LDB4MDUKKworLy9kYXRhIHR5cGUgY3VzdG9tCisvL2RhdGEgZmllbGQgdXNhZ2VzIChpbnB1dCByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9VU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX0JPT0xFQU5fQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQzLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ2LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NDcsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0OCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDQ5LDB4MDUKKworI2lmIDEgLy9kZWZpbmUgdmVuZG9yLXNwZWNpZmljIChub24tc3BlYykgY3VzdG9tIGRhdGFmaWVsZHMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0QiwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRDLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NEQsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0RSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDRGLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDUyLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU1LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8xOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDU4LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NTksMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVCLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfQ1VTVE9NX1ZBTFVFXzI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9DVVNUT01fVkFMVUVfMjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDVFLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0NVU1RPTV9WQUxVRV8yOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NUYsMHgwNQorI2VuZGlmCisKKy8vZGF0YSB0eXBlIGdlbmVyaWMKKy8vZGF0YSBmaWVsZCB1c2FnZXMgKGlucHV0IHJlcG9ydCkKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjAsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19HVUlEX09SX1BST1BFUlRZS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2MSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX0NBVEVHT1JZX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDYyLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfVFlQRV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjMsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19FVkVOVF9QUk9QRVJUWUtFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2NCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1BST1BFUlRZX1BST1BFUlRZS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDY1LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfREFUQUZJRUxEX1BST1BFUlRZS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2NywweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1BST1BFUlRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDY4LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfREFUQUZJRUxEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NjksMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfRU5VTUVSQVRPUl9UQUJMRV9ST1dfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2QSwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9FTlVNRVJBVE9SX1RBQkxFX1JPV19DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDZCLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfR1VJRF9PUl9QUk9QRVJUWUtFWV9LSU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NkMsMHgwNSAvLyBOQXJ5CisvL2JlZ2luIEdvclBLIGtpbmQgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR09SUEtfS0lORF9DQVRFR09SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQwLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR09SUEtfS0lORF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQxLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR09SUEtfS0lORF9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQyLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR09SUEtfS0lORF9QUk9QRVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQzLDB4MDggLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfR09SUEtfS0lORF9EQVRBRklFTEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweEQ0LDB4MDggLy8gU2VsCisvL2VuZCBHb3JQSyBraW5kIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg2RCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1BST1BFUlRZS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDZFLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfVE9QX0xFVkVMX0NPTExFQ1RJT05fSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NkYsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19SRVBPUlRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MCwweDA1CisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1JFUE9SVF9JVEVNX1BPU0lUSU9OX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDcxLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfRklSTVdBUkVfVkFSVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzIsMHgwNSAvLyBOQXJ5CisvL2JlZ2luIGZpcm13YXJlIHZhcnR5cGUgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAwLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9CT09MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAxLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9VSTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAyLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9JMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDAzLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9VSTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA0LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9JMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA1LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9VSTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA2LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9JNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA3LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9VSTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA4LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9JOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDA5LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9SNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBBLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9SOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBCLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9XU1RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBDLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9TVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBELDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9DTFNJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBFLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9WRUNUT1JfVlRfVUkxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDBGLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEwLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDExLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEyLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDEzLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE0LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE1LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE2LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE3LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE4LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDE5LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFBLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFCLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFDLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFELDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFFLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMTZFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDFGLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIwLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIxLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIyLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDIzLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI0LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI1LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI2LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI3LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI4LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDI5LDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJBLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJCLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJDLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJELDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJFLDB4MDkgLy8gU2VsCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfRklSTVdBUkVfVkFSVFlQRV9WVF9GMzJFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDJGLDB4MDkgLy8gU2VsCisvL2VuZCBmaXJtd2FyZSB2YXJ0eXBlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19VTklUX09GX01FQVNVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3MywweDA1IC8vIE5BcnkKKy8vYmVnaW4gdW5pdCBvZiBtZWFzdXJlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9OT1RfU1BFQ0lGSUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9MVVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTX0tFTFZJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTX0NFTFNJVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0MywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9QQVNDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ORVdUT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9NRVRFUlNfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9LSUxPR1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0NywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9NRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0OCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9NRVRFUlNfUEVSX1NFQ19TUVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0OSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9GQVJBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0QSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9BTVBFUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0QiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9XQVRUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0QywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9IRU5SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0RCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9PSE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0RSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9WT0xUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg0RiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9IRVJUWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9CQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTX0FOVElfQ0xPQ0tXSVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTX0NMT0NLV0lTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1MywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9ERUdSRUVTX1BFUl9TRUNfU1FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9LTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1NywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9QRVJDRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1OCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1OSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9NSUxMSVNFQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QSwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QiwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9CWVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1QywweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9NSUxMSUdBVVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RCwweDA5IC8vIFNlbAorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0dFTkVSSUNfVU5JVF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg1RSwweDA5IC8vIFNlbAorLy9lbmQgdW5pdCBvZiBtZWFzdXJlIHNlbGVjdG9ycworI2RlZmluZSBISURfVVNBR0VfU0VOU09SX0RBVEFfR0VORVJJQ19VTklUX0VYUE9ORU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg3NCwweDA1IC8vIE5BcnkKKy8vYmVnaW4gdW5pdCBleHBvbmVudCBzZWxlY3RvcnMKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzAsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzEsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzIsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzMsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzQsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzUsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzYsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzcsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzgsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzksMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0EsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0IsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UX0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0MsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UX0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0QsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UX0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0UsMHgwOSAvLyBTZWwKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9HRU5FUklDX0VYUE9ORU5UX0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4N0YsMHgwOSAvLyBTZWwKKy8vZW5kIHVuaXQgZXhwb25lbnQgc2VsZWN0b3JzCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfREFUQV9HRU5FUklDX1JFUE9SVF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDc1LDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBX0dFTkVSSUNfUkVQT1JUX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4NzYsMHgwNQorLy9wcm9wZXJ0eSB1c2FnZXMgKGdldC9zZXQgZmVhdHVyZSByZXBvcnQpCisjZGVmaW5lIEhJRF9VU0FHRV9TRU5TT1JfUFJPUEVSVFlfR0VORVJJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSwweDgwLDB4MDUKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9QUk9QRVJUWV9FTlVNRVJBVE9SX1RBQkxFX1JPV19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBBLDB4ODEsMHgwNQorI2RlZmluZSBISURfVVNBR0VfU0VOU09SX1BST1BFUlRZX0VOVU1FUkFUT1JfVEFCTEVfUk9XX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEEsMHg4MiwweDA1CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gT3RoZXIgSElEIGRlZmluaXRpb25zCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vTk9URTogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGRlc2lnbmVkIHRvIHBlcm1pdCBjb21waWxpbmcgdGhlIEhJRCByZXBvcnQgZGVzY3JpcHRvcnMKKy8vIHdpdGggc29tZXdoYXQgc2VsZi1leHBsYW5hdG9yeSBpbmZvcm1hdGlvbiB0byBoZWxwIHJlYWRhYmlsaXR5IGFuZCByZWR1Y2UgZXJyb3JzCisKKy8vaW5wdXQsb3V0cHV0LGZlYXR1cmUgZmxhZ3MKKyNkZWZpbmUgRGF0YV9BcnJfQWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ29uc3RfQXJyX0FicyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRGF0YV9WYXJfQWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQ29uc3RfVmFyX0FicyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgRGF0YV9WYXJfUmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYKKy8vY29sbGVjdGlvbiBmbGFncworI2RlZmluZSBQaHlzaWNhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBcHBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBMb2dpY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBOYW1lZEFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBVc2FnZVN3aXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorLy9vdGhlcgorI2RlZmluZSBVbmRlZmluZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorCisjZGVmaW5lIEhJRF9VU0FHRV9QQUdFKGEpICAgICAgICAgICAgICAgICAgICAgICAweDA1LGEKKyNkZWZpbmUgSElEX1VTQUdFKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksYQorI2RlZmluZSBISURfVVNBR0UxNihhLGIpICAgICAgICAgICAgICAgICAgICAgICAgMHgwQSxhLGIKKyNkZWZpbmUgSElEX1VTQUdFX1NFTlNPUl9EQVRBKGEsYikgICAgICAgICAgICAgIGF8YiAgICAgLy9UaGlzIG9yLXMgdGhlIG1vZCBpbnRvIHVzYWdlCisjZGVmaW5lIEhJRF9DT0xMRUNUSU9OKGEpICAgICAgICAgICAgICAgICAgICAgICAweEExLGEKKyNkZWZpbmUgSElEX1JFUE9SVF9JRChhKSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUsYQorI2RlZmluZSBISURfUkVQT1JUX1NJWkUoYSkgICAgICAgICAgICAgICAgICAgICAgMHg3NSxhCisjZGVmaW5lIEhJRF9SRVBPUlRfQ09VTlQoYSkgICAgICAgICAgICAgICAgICAgICAweDk1LGEKKyNkZWZpbmUgSElEX1VTQUdFX01JTl84KGEpICAgICAgICAgICAgICAgICAgICAgIDB4MTksYQorI2RlZmluZSBISURfVVNBR0VfTUlOXzE2KGEsYikgICAgICAgICAgICAgICAgICAgMHgxQSxhLGIKKyNkZWZpbmUgSElEX1VTQUdFX01BWF84KGEpICAgICAgICAgICAgICAgICAgICAgIDB4MjksYQorI2RlZmluZSBISURfVVNBR0VfTUFYXzE2KGEsYikgICAgICAgICAgICAgICAgICAgMHgyQSxhLGIKKyNkZWZpbmUgSElEX0xPR0lDQUxfTUlOXzgoYSkgICAgICAgICAgICAgICAgICAgIDB4MTUsYQorI2RlZmluZSBISURfTE9HSUNBTF9NSU5fMTYoYSxiKSAgICAgICAgICAgICAgICAgMHgxNixhLGIKKyNkZWZpbmUgSElEX0xPR0lDQUxfTUlOXzMyKGEsYixjLGQpICAgICAgICAgICAgIDB4MTcsYSxiLGMsZAorI2RlZmluZSBISURfTE9HSUNBTF9NQVhfOChhKSAgICAgICAgICAgICAgICAgICAgMHgyNSxhCisjZGVmaW5lIEhJRF9MT0dJQ0FMX01BWF8xNihhLGIpICAgICAgICAgICAgICAgICAweDI2LGEsYgorI2RlZmluZSBISURfTE9HSUNBTF9NQVhfMzIoYSxiLGMsZCkgICAgICAgICAgICAgMHgyNyxhLGIsYyxkCisjZGVmaW5lIEhJRF9VTklUX0VYUE9ORU5UKGEpICAgICAgICAgICAgICAgICAgICAweDU1LGEKKyNkZWZpbmUgSElEX0lOUFVUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODEsYQorI2RlZmluZSBISURfT1VUUFVUKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MSxhCisjZGVmaW5lIEhJRF9GRUFUVVJFKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAweEIxLGEKKyNkZWZpbmUgSElEX0VORF9DT0xMRUNUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4QzAKKworI2VuZGlmIC8vIEhJRFVUSUxfVEVTVF9ISURTRU5TT1JTUEVDX0gKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9IaWRVdGlscy90ZXN0L1RyaVN0YXRlVGVzdC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UcmlTdGF0ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2RmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvSGlkVXRpbHMvdGVzdC9UcmlTdGF0ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJUcmlTdGF0ZS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNzdGRpbnQ+CisjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGlvc3RyZWFtPgorCit1c2luZyBIaWRVdGlsOjpUcmlTdGF0ZTsKK3R5cGVkZWYgVHJpU3RhdGU8dWludDMyX3Q+IHRyaV91aW50MzJfdDsKK3R5cGVkZWYgVHJpU3RhdGU8aW50MzJfdD4gdHJpX2ludDMyX3Q7Cit0eXBlZGVmIFRyaVN0YXRlPGludDE2X3Q+IHRyaV9pbnQxNl90OworCitURVNUKFRyaVN0YXRlVGVzdCwgQ29uc3RydWN0b3IpIHsKKyAgICB0cmlfdWludDMyX3QgYTsKKyAgICBFWFBFQ1RfRkFMU0UoYS5pc1NldCgpKTsKKworICAgIGEgKz0gMTsKKyAgICBFWFBFQ1RfRkFMU0UoYS5pc1NldCgpKTsKKworICAgIGEgLT0gMTsKKyAgICBFWFBFQ1RfRkFMU0UoYS5pc1NldCgpKTsKKworICAgIGEgKj0gMTsKKyAgICBFWFBFQ1RfRkFMU0UoYS5pc1NldCgpKTsKKworICAgIGEgLz0gMTsKKyAgICBFWFBFQ1RfRkFMU0UoYS5pc1NldCgpKTsKKworICAgIHRyaV91aW50MzJfdCBiOworICAgIGIgPSBhOworICAgIEVYUEVDVF9GQUxTRShiLmlzU2V0KCkpOworCisgICAgYSA9IDE7CisgICAgRVhQRUNUX1RSVUUoYS5pc1NldCgpKTsKKworICAgIGIgPSBhOworICAgIEVYUEVDVF9UUlVFKGIuaXNTZXQoKSk7CisKKyAgICBhLmNsZWFyKCk7CisgICAgRVhQRUNUX0ZBTFNFKGEuaXNTZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoYi5pc1NldCgpKTsKKworICAgIHRyaV91aW50MzJfdCBjKGIpOworICAgIEVYUEVDVF9UUlVFKGMuaXNTZXQoKSk7CisKKyAgICBjLmNsZWFyKCk7CisgICAgRVhQRUNUX0ZBTFNFKGMuaXNTZXQoKSk7CisKKyAgICB0cmlfdWludDMyX3QgZChhKTsKKyAgICBFWFBFQ1RfRkFMU0UoYy5pc1NldCgpKTsKK30KKworVEVTVChUcmlTdGF0ZVRlc3QsIEluY0FuZERlY09wZXJhdGlvbikgeworICAgIHRyaV9pbnQzMl90IGEoMSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgKCsrYSkuZ2V0KDApKTsKKyAgICBFWFBFQ1RfRVEoMiwgKGErKykuZ2V0KDApKTsKKyAgICBFWFBFQ1RfRVEoMywgYS5nZXQoMCkpOworCisgICAgRVhQRUNUX0VRKDIsICgtLWEpLmdldCgwKSk7CisgICAgRVhQRUNUX0VRKDIsIChhLS0pLmdldCgwKSk7CisgICAgRVhQRUNUX0VRKDEsIGEuZ2V0KDApKTsKKworICAgIHRyaV91aW50MzJfdCBiOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTAwKSwgKCsrYikuZ2V0KDEwMCkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTAxKSwgKGIrKykuZ2V0KDEwMSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDx1aW50MzJfdD4oMTAyKSwgYi5nZXQoMTAyKSk7CisgICAgRVhQRUNUX0ZBTFNFKGIuaXNTZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEwMyksICgtLWIpLmdldCgxMDMpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEwNCksIChiLS0pLmdldCgxMDQpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDEwNSksIGIuZ2V0KDEwNSkpOworICAgIEVYUEVDVF9GQUxTRShiLmlzU2V0KCkpOworfQorCitURVNUKFRyaVN0YXRlVGVzdCwgQ29tcGFyaXNvbikgeworICAgIHRyaV9pbnQzMl90IGEoMSk7CisgICAgdHJpX2ludDMyX3QgYigxKTsKKyAgICB0cmlfaW50MzJfdCBjKDIpOworICAgIHRyaV9pbnQzMl90IGQ7CisKKyAgICBFWFBFQ1RfRVEoYSwgYik7CisgICAgRVhQRUNUX0ZBTFNFKChhICE9IGIpKTsKKyAgICBFWFBFQ1RfVFJVRSghKGEgIT0gYikpOworICAgIEVYUEVDVF9ORSgtMSwgYSk7CisKKyAgICBFWFBFQ1RfTFQoYSwgYyk7CisgICAgRVhQRUNUX0xUKGEsIDMpOworCisgICAgRVhQRUNUX0dUKGMsIGIpOworICAgIEVYUEVDVF9HVChjLCAwKTsKKworICAgIEVYUEVDVF9MRShhLCAxKTsKKyAgICBFWFBFQ1RfTEUoYSwgYyk7CisgICAgRVhQRUNUX0xFKGEsIDMpOworICAgIEVYUEVDVF9MRShhLCBiKTsKKworICAgIEVYUEVDVF9HRShjLCBiKTsKKyAgICBFWFBFQ1RfR0UoYiwgYSk7CisgICAgRVhQRUNUX0dFKGMsIDApOworICAgIEVYUEVDVF9HRShjLCAyKTsKKworICAgIEVYUEVDVF9GQUxTRSgoYSA9PSBkKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKGEgPj0gZCkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKChhIDw9IGQpLmlzU2V0KCkpOworICAgIEVYUEVDVF9GQUxTRSgoYSAhPSBkKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKGEgPiBkKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKGEgPCBkKS5pc1NldCgpKTsKKworICAgIC8vRVhQRUNUX0VRKGEsIGQpOyAvLyB3aWxsIGNhdXNlIHJ1bnRpbWUgZmFpbHVyZQorICAgIC8vIGR1ZSB0byBjb252ZXJ0aW5nIGEgbm90LXNldCBUcmlTdGF0ZTxib29sPiB0byBib29sCit9CisKK1RFU1QoVHJpU3RhdGVUZXN0LCBDb21wb3VuZEFzc2lnbikgeworICAgIHRyaV91aW50MzJfdCB4OworCisgICAgeCArPSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4IC09IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggKj0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCAvPSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4ICY9IDEwOworICAgIEVYUEVDVF9GQUxTRSh4LmlzU2V0KCkpOworICAgIHggfD0gMTA7CisgICAgRVhQRUNUX0ZBTFNFKHguaXNTZXQoKSk7CisgICAgeCAlPSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4IDw8PSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKyAgICB4ID4+PSAxMDsKKyAgICBFWFBFQ1RfRkFMU0UoeC5pc1NldCgpKTsKKworICAgIHRyaV9pbnQzMl90IHksIHosIHc7CisjZGVmaW5lIFRFU1RfQ09NUE9VTkRfQVNTSUdOKGEsIG9wLCBvcF9jLCBiKSBcCisgICAgeSA9IHogPSBhOyBcCisgICAgdyA9IGI7IFwKKyAgICB5IG9wX2MgYjsgXAorICAgIEVYUEVDVF9UUlVFKHkuaXNTZXQoKSk7IFwKKyAgICBFWFBFQ1RfRVEoeSwgKGEgb3AgYikpOyBcCisgICAgRVhQRUNUX0VRKHksICh6IG9wIGIpKTsgXAorICAgIEVYUEVDVF9FUSh5LCAoYSBvcCB3KSk7CisKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsICssICs9LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgLSwgLT0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCAqLCAqPSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsIC8sIC89LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgfCwgfD0sIDQ1Nik7CisgICAgVEVTVF9DT01QT1VORF9BU1NJR04oMTIzLCAmLCAmPSwgNDU2KTsKKyAgICBURVNUX0NPTVBPVU5EX0FTU0lHTigxMjMsIF4sIF49LCA0NTYpOworICAgIFRFU1RfQ09NUE9VTkRfQVNTSUdOKDEyMywgJSwgJT0sIDQ1Nik7CisjdW5kZWYgVEVTVF9DT01QT1VORF9BU1NJR04KKyAgICB5ID0geiA9IDEyMzsKKyAgICB3ID0gMTA7CisgICAgeSA8PD0gMTA7CisgICAgRVhQRUNUX1RSVUUoeS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRVEoMTIzIDw8IDEwLCB5KTsKKworICAgIHkgPSB6ID0gMTIzNDU7CisgICAgdyA9IDEwOworICAgIHkgPj49IDEwOworICAgIEVYUEVDVF9UUlVFKHkuaXNTZXQoKSk7CisgICAgRVhQRUNUX0VRKDEyMzQ1ID4+IDEwLCB5KTsKK30KKworVEVTVChUcmlTdGF0ZVRlc3QsIFVuYXJ5T3BlcmF0aW9uKSB7CisgICAgdHJpX2ludDE2X3QgcDsKKyAgICBFWFBFQ1RfRkFMU0UoKCFwKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKC1wKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoKH5wKS5pc1NldCgpKTsKKworICAgIHRyaV9pbnQxNl90IHEoMTIzNCk7CisgICAgRVhQRUNUX1RSVUUoKCFxKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRVEoIXN0YXRpY19jYXN0PGludDE2X3Q+KDEyMzQpLCAoIXEpKTsKKworICAgIHRyaV9pbnQxNl90IHIoMTIzNCk7CisgICAgRVhQRUNUX1RSVUUoKC1yKS5pc1NldCgpKTsKKyAgICBFWFBFQ1RfRVEoLTEyMzQsICgtcikpOworCisgICAgdHJpX2ludDE2X3QgcygxMjM0KTsKKyAgICBFWFBFQ1RfVFJVRSgofnMpLmlzU2V0KCkpOworICAgIEVYUEVDVF9FUSh+c3RhdGljX2Nhc3Q8aW50MTZfdD4oMTIzNCksIH5zKTsKK30KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1JpbmdCdWZmZXIuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1JpbmdCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NTdhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvUmluZ0J1ZmZlci5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiUmluZ0J1ZmZlci5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworUmluZ0J1ZmZlcjo6UmluZ0J1ZmZlcihzaXplX3Qgc2l6ZSkKKyAgICA6IG1TaXplKHNpemUpLAorICAgICAgbURhdGEoKHNlbnNvcnNfZXZlbnRfdCAqKW1hbGxvYyhzaXplb2Yoc2Vuc29yc19ldmVudF90KSAqIG1TaXplKSksCisgICAgICBtUmVhZFBvcygwKSwKKyAgICAgIG1Xcml0ZVBvcygwKSB7Cit9CisKK1JpbmdCdWZmZXI6On5SaW5nQnVmZmVyKCkgeworICAgIGZyZWUobURhdGEpOworICAgIG1EYXRhID0gTlVMTDsKK30KKworc3NpemVfdCBSaW5nQnVmZmVyOjp3cml0ZShjb25zdCBzZW5zb3JzX2V2ZW50X3QgKmV2LCBzaXplX3Qgc2l6ZSkgeworICAgIE11dGV4OjpBdXRvbG9jayBhdXRvTG9jayhtTG9jayk7CisKKyAgICBzaXplX3QgbnVtQXZhaWxhYmxlVG9SZWFkID0gbVdyaXRlUG9zIC0gbVJlYWRQb3M7CisgICAgc2l6ZV90IG51bUF2YWlsYWJsZVRvV3JpdGUgPSBtU2l6ZSAtIG51bUF2YWlsYWJsZVRvUmVhZDsKKworICAgIGlmIChzaXplID4gbnVtQXZhaWxhYmxlVG9Xcml0ZSkgeworICAgICAgICBzaXplID0gbnVtQXZhaWxhYmxlVG9Xcml0ZTsKKyAgICB9CisKKyAgICBzaXplX3Qgd3JpdGVQb3MgPSAobVdyaXRlUG9zICUgbVNpemUpOworICAgIHNpemVfdCBjb3B5ID0gbVNpemUgLSB3cml0ZVBvczsKKworICAgIGlmIChjb3B5ID4gc2l6ZSkgeworICAgICAgICBjb3B5ID0gc2l6ZTsKKyAgICB9CisKKyAgICBtZW1jcHkoJm1EYXRhW3dyaXRlUG9zXSwgZXYsIGNvcHkgKiBzaXplb2Yoc2Vuc29yc19ldmVudF90KSk7CisKKyAgICBpZiAoc2l6ZSA+IGNvcHkpIHsKKyAgICAgICAgbWVtY3B5KG1EYXRhLCAmZXZbY29weV0sIChzaXplIC0gY29weSkgKiBzaXplb2Yoc2Vuc29yc19ldmVudF90KSk7CisgICAgfQorCisgICAgbVdyaXRlUG9zICs9IHNpemU7CisKKyAgICBpZiAobnVtQXZhaWxhYmxlVG9SZWFkID09IDAgJiYgc2l6ZSA+IDApIHsKKyAgICAgICAgbU5vdEVtcHR5Q29uZGl0aW9uLmJyb2FkY2FzdCgpOworICAgIH0KKworICAgIHJldHVybiBzaXplOworfQorCitzc2l6ZV90IFJpbmdCdWZmZXI6OnJlYWQoc2Vuc29yc19ldmVudF90ICpldiwgc2l6ZV90IHNpemUpIHsKKyAgICBNdXRleDo6QXV0b2xvY2sgYXV0b0xvY2sobUxvY2spOworCisgICAgc2l6ZV90IG51bUF2YWlsYWJsZVRvUmVhZDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIG51bUF2YWlsYWJsZVRvUmVhZCA9IG1Xcml0ZVBvcyAtIG1SZWFkUG9zOworICAgICAgICBpZiAobnVtQXZhaWxhYmxlVG9SZWFkID4gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBtTm90RW1wdHlDb25kaXRpb24ud2FpdChtTG9jayk7CisgICAgfQorCisgICAgaWYgKHNpemUgPiBudW1BdmFpbGFibGVUb1JlYWQpIHsKKyAgICAgICAgc2l6ZSA9IG51bUF2YWlsYWJsZVRvUmVhZDsKKyAgICB9CisKKyAgICBzaXplX3QgcmVhZFBvcyA9IChtUmVhZFBvcyAlIG1TaXplKTsKKyAgICBzaXplX3QgY29weSA9IG1TaXplIC0gcmVhZFBvczsKKworICAgIGlmIChjb3B5ID4gc2l6ZSkgeworICAgICAgICBjb3B5ID0gc2l6ZTsKKyAgICB9CisKKyAgICBtZW1jcHkoZXYsICZtRGF0YVtyZWFkUG9zXSwgY29weSAqIHNpemVvZihzZW5zb3JzX2V2ZW50X3QpKTsKKworICAgIGlmIChzaXplID4gY29weSkgeworICAgICAgICBtZW1jcHkoJmV2W2NvcHldLCBtRGF0YSwgKHNpemUgLSBjb3B5KSAqIHNpemVvZihzZW5zb3JzX2V2ZW50X3QpKTsKKyAgICB9CisKKyAgICBtUmVhZFBvcyArPSBzaXplOworCisgICAgcmV0dXJuIHNpemU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9SaW5nQnVmZmVyLmggYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvUmluZ0J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmI4YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvUmluZ0J1ZmZlci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIFJJTkdfQlVGRkVSX0hfCisKKyNkZWZpbmUgUklOR19CVUZGRVJfSF8KKworI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQUJhc2UuaD4KKworI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworY2xhc3MgUmluZ0J1ZmZlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmluZ0J1ZmZlcihzaXplX3Qgc2l6ZSk7CisgICAgflJpbmdCdWZmZXIoKTsKKworICAgIHNzaXplX3Qgd3JpdGUoY29uc3Qgc2Vuc29yc19ldmVudF90ICpldiwgc2l6ZV90IHNpemUpOworICAgIHNzaXplX3QgcmVhZChzZW5zb3JzX2V2ZW50X3QgKmV2LCBzaXplX3Qgc2l6ZSk7CisKK3ByaXZhdGU6CisgICAgTXV0ZXggbUxvY2s7CisgICAgQ29uZGl0aW9uIG1Ob3RFbXB0eUNvbmRpdGlvbjsKKworICAgIHNpemVfdCBtU2l6ZTsKKyAgICBzZW5zb3JzX2V2ZW50X3QgKm1EYXRhOworICAgIHNpemVfdCBtUmVhZFBvcywgbVdyaXRlUG9zOworCisgICAgRElTQUxMT1dfRVZJTF9DT05TVFJVQ1RPUlMoUmluZ0J1ZmZlcik7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIFJJTkdfQlVGRkVSX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvZHluYW1pY19zZW5zb3IvU2Vuc29yRXZlbnRDYWxsYmFjay5oIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1NlbnNvckV2ZW50Q2FsbGJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThjZDdmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL1NlbnNvckV2ZW50Q2FsbGJhY2suaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBTkRST0lEX1NFTlNPUkhBTF9EU0VfU0VOU09SX0VWRU5UX0NBTExCQUNLX0gKKyNkZWZpbmUgQU5EUk9JRF9TRU5TT1JIQUxfRFNFX1NFTlNPUl9FVkVOVF9DQUxMQkFDS19ICisKKyNpbmNsdWRlIDxoYXJkd2FyZS9zZW5zb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgU2Vuc29ySGFsRXh0IHsKKworY2xhc3MgQmFzZVNlbnNvck9iamVjdDsKKworLy8gaWYgdGltZXN0YW1wIGluIHNlbnNvcnNfZXZlbnRfdCBoYXMgdGhpcyB2YWx1ZSwgaXQgd2lsbCBiZSBmaWxsZWQgYXQgZGlzcGF0Y2hlci4KK2NvbnN0ZXhwciBpbnQ2NF90IFRJTUVTVEFNUF9BVVRPX0ZJTEwgPSAtMTsKKworY2xhc3MgU2Vuc29yRXZlbnRDYWxsYmFjayB7CitwdWJsaWM6CisgICAgdmlydHVhbCBpbnQgc3VibWl0RXZlbnQoc3A8QmFzZVNlbnNvck9iamVjdD4gc2Vuc29yLCBjb25zdCBzZW5zb3JzX2V2ZW50X3QgJmUpID0gMDsKKyAgICB2aXJ0dWFsIH5TZW5zb3JFdmVudENhbGxiYWNrKCkgPSBkZWZhdWx0OworfTsKKworfSAvLyBuYW1lc3BhY2UgU2Vuc29ySGFsRXh0Cit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX1NFTlNPUkhBTF9EU0VfU0VOU09SX0VWRU5UX0NBTExCQUNLX0gKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9zZW5zb3JzLmNwcCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9zZW5zb3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzIwM2IyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL3NlbnNvcnMuY3BwCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworCisjaW5jbHVkZSAiRHluYW1pY1NlbnNvck1hbmFnZXIuaCIKKyNpbmNsdWRlICJzZW5zb3JzLmgiCisKKyNpbmNsdWRlIDxjdXRpbHMvcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQURlYnVnLmg+CisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgordXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1NlbnNvckNvbnRleHQ6OlNlbnNvckNvbnRleHQoY29uc3Qgc3RydWN0IGh3X21vZHVsZV90ICptb2R1bGUpIHsKKyAgICBtZW1zZXQoJmRldmljZSwgMCwgc2l6ZW9mKGRldmljZSkpOworCisgICAgZGV2aWNlLmNvbW1vbi50YWcgPSBIQVJEV0FSRV9ERVZJQ0VfVEFHOworICAgIGRldmljZS5jb21tb24udmVyc2lvbiA9IFNFTlNPUlNfREVWSUNFX0FQSV9WRVJTSU9OXzFfMzsKKyAgICBkZXZpY2UuY29tbW9uLm1vZHVsZSA9IGNvbnN0X2Nhc3Q8aHdfbW9kdWxlX3QgKj4obW9kdWxlKTsKKyAgICBkZXZpY2UuY29tbW9uLmNsb3NlID0gQ2xvc2VXcmFwcGVyOworICAgIGRldmljZS5hY3RpdmF0ZSA9IEFjdGl2YXRlV3JhcHBlcjsKKyAgICBkZXZpY2Uuc2V0RGVsYXkgPSBTZXREZWxheVdyYXBwZXI7CisgICAgZGV2aWNlLnBvbGwgPSBQb2xsV3JhcHBlcjsKKyAgICBkZXZpY2UuYmF0Y2ggPSBCYXRjaFdyYXBwZXI7CisgICAgZGV2aWNlLmZsdXNoID0gRmx1c2hXcmFwcGVyOworCisgICAgLy8gaW5pdGlhbGl6ZSBkeW5hbWljIHNlbnNvciBtYW5hZ2VyCisgICAgaW50MzJfdCBiYXNlID0gcHJvcGVydHlfZ2V0X2ludDMyKCJzZW5zb3IuZHluYW1pY19zZW5zb3JfaGFsLmhhbmRsZV9iYXNlIiwga0R5bmFtaWNIYW5kbGVCYXNlKTsKKyAgICBpbnQzMl90IGNvdW50ID0KKyAgICAgICAgICAgIHByb3BlcnR5X2dldF9pbnQzMigic2Vuc29yLmR5bmFtaWNfc2Vuc29yX2hhbC5oYW5kbGVfY291bnQiLCBrTWF4RHluYW1pY0hhbmRsZUNvdW50KTsKKyAgICBtRHluYW1pY1NlbnNvck1hbmFnZXIucmVzZXQoRHluYW1pY1NlbnNvck1hbmFnZXI6OmNyZWF0ZUluc3RhbmNlKGJhc2UsIGNvdW50LCBudWxscHRyKSk7Cit9CisKK2ludCBTZW5zb3JDb250ZXh0OjpjbG9zZSgpIHsKKyAgICBkZWxldGUgdGhpczsKKyAgICByZXR1cm4gMDsKK30KKworaW50IFNlbnNvckNvbnRleHQ6OmFjdGl2YXRlKGludCBoYW5kbGUsIGludCBlbmFibGVkKSB7CisgICAgcmV0dXJuIG1EeW5hbWljU2Vuc29yTWFuYWdlci0+YWN0aXZhdGUoaGFuZGxlLCBlbmFibGVkKTsKK30KKworaW50IFNlbnNvckNvbnRleHQ6OnNldERlbGF5KGludCBoYW5kbGUsIGludDY0X3QgZGVsYXlOcykgeworICAgIHJldHVybiBtRHluYW1pY1NlbnNvck1hbmFnZXItPnNldERlbGF5KGhhbmRsZSwgZGVsYXlOcyk7Cit9CisKK2ludCBTZW5zb3JDb250ZXh0Ojpwb2xsKHNlbnNvcnNfZXZlbnRfdCAqZGF0YSwgaW50IGNvdW50KSB7CisgICAgcmV0dXJuIG1EeW5hbWljU2Vuc29yTWFuYWdlci0+cG9sbChkYXRhLCBjb3VudCk7Cit9CisKK2ludCBTZW5zb3JDb250ZXh0OjpiYXRjaCgKKyAgICAgICAgaW50IGhhbmRsZSwKKyAgICAgICAgaW50NjRfdCBzYW1wbGluZ19wZXJpb2RfbnMsCisgICAgICAgIGludDY0X3QgbWF4X3JlcG9ydF9sYXRlbmN5X25zKSB7CisgICAgcmV0dXJuIG1EeW5hbWljU2Vuc29yTWFuYWdlci0+YmF0Y2goaGFuZGxlLCBzYW1wbGluZ19wZXJpb2RfbnMsIG1heF9yZXBvcnRfbGF0ZW5jeV9ucyk7Cit9CisKK2ludCBTZW5zb3JDb250ZXh0OjpmbHVzaChpbnQgaGFuZGxlKSB7CisgICAgcmV0dXJuIG1EeW5hbWljU2Vuc29yTWFuYWdlci0+Zmx1c2goaGFuZGxlKTsKK30KKworLy8gc3RhdGljCitpbnQgU2Vuc29yQ29udGV4dDo6Q2xvc2VXcmFwcGVyKHN0cnVjdCBod19kZXZpY2VfdCAqZGV2KSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vuc29yQ29udGV4dCAqPihkZXYpLT5jbG9zZSgpOworfQorCisvLyBzdGF0aWMKK2ludCBTZW5zb3JDb250ZXh0OjpBY3RpdmF0ZVdyYXBwZXIoCisgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QgKmRldiwgaW50IGhhbmRsZSwgaW50IGVuYWJsZWQpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZW5zb3JDb250ZXh0ICo+KGRldiktPmFjdGl2YXRlKGhhbmRsZSwgZW5hYmxlZCk7Cit9CisKKy8vIHN0YXRpYworaW50IFNlbnNvckNvbnRleHQ6OlNldERlbGF5V3JhcHBlcigKKyAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LCBpbnQgaGFuZGxlLCBpbnQ2NF90IGRlbGF5TnMpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTZW5zb3JDb250ZXh0ICo+KGRldiktPnNldERlbGF5KGhhbmRsZSwgZGVsYXlOcyk7Cit9CisKKy8vIHN0YXRpYworaW50IFNlbnNvckNvbnRleHQ6OlBvbGxXcmFwcGVyKAorICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsIHNlbnNvcnNfZXZlbnRfdCAqZGF0YSwgaW50IGNvdW50KSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Vuc29yQ29udGV4dCAqPihkZXYpLT5wb2xsKGRhdGEsIGNvdW50KTsKK30KKworLy8gc3RhdGljCitpbnQgU2Vuc29yQ29udGV4dDo6QmF0Y2hXcmFwcGVyKAorICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsCisgICAgICAgIGludCBoYW5kbGUsCisgICAgICAgIGludCBmbGFncywKKyAgICAgICAgaW50NjRfdCBzYW1wbGluZ19wZXJpb2RfbnMsCisgICAgICAgIGludDY0X3QgbWF4X3JlcG9ydF9sYXRlbmN5X25zKSB7CisgICAgKHZvaWQpIGZsYWdzOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlbnNvckNvbnRleHQgKj4oZGV2KS0+YmF0Y2goCisgICAgICAgICAgICBoYW5kbGUsIHNhbXBsaW5nX3BlcmlvZF9ucywgbWF4X3JlcG9ydF9sYXRlbmN5X25zKTsKK30KKworLy8gc3RhdGljCitpbnQgU2Vuc29yQ29udGV4dDo6Rmx1c2hXcmFwcGVyKHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlXzEgKmRldiwgaW50IGhhbmRsZSkgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFNlbnNvckNvbnRleHQgKj4oZGV2KS0+Zmx1c2goaGFuZGxlKTsKK30KKworc2l6ZV90IFNlbnNvckNvbnRleHQ6OmdldFNlbnNvckxpc3Qoc2Vuc29yX3QgY29uc3QgKipsaXN0KSB7CisgICAgKmxpc3QgPSAmKG1EeW5hbWljU2Vuc29yTWFuYWdlci0+Z2V0RHluYW1pY01ldGFTZW5zb3IoKSk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0YXRpYyBzZW5zb3JfdCBjb25zdCAqc2Vuc29yX2xpc3Q7CisKK3N0YXRpYyBpbnQgb3Blbl9zZW5zb3JzKAorICAgICAgICBjb25zdCBzdHJ1Y3QgaHdfbW9kdWxlX3QgKm1vZHVsZSwKKyAgICAgICAgY29uc3QgY2hhciAqLAorICAgICAgICBzdHJ1Y3QgaHdfZGV2aWNlX3QgKipkZXYpIHsKKyAgICBTZW5zb3JDb250ZXh0ICpjdHggPSBuZXcgU2Vuc29yQ29udGV4dChtb2R1bGUpOworICAgIGN0eC0+Z2V0U2Vuc29yTGlzdCgmc2Vuc29yX2xpc3QpOworICAgICpkZXYgPSAmY3R4LT5kZXZpY2UuY29tbW9uOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGh3X21vZHVsZV9tZXRob2RzX3Qgc2Vuc29yc19tb2R1bGVfbWV0aG9kcyA9IHsKKyAgICAub3BlbiA9IG9wZW5fc2Vuc29ycworfTsKKworc3RhdGljIGludCBnZXRfc2Vuc29yc19saXN0KAorICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19tb2R1bGVfdCAqLAorICAgICAgICBzdHJ1Y3Qgc2Vuc29yX3QgY29uc3QgKipsaXN0KSB7CisgICAgKmxpc3QgPSBzZW5zb3JfbGlzdDsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzZXRfb3BlcmF0aW9uX21vZGUodW5zaWduZWQgaW50IG1vZGUpIHsKKyAgICByZXR1cm4gKG1vZGUpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0cnVjdCBzZW5zb3JzX21vZHVsZV90IEhBTF9NT0RVTEVfSU5GT19TWU0gPSB7CisgICAgLmNvbW1vbiA9IHsKKyAgICAgICAgICAgIC50YWcgPSBIQVJEV0FSRV9NT0RVTEVfVEFHLAorICAgICAgICAgICAgLnZlcnNpb25fbWFqb3IgPSAxLAorICAgICAgICAgICAgLnZlcnNpb25fbWlub3IgPSAwLAorICAgICAgICAgICAgLmlkID0gU0VOU09SU19IQVJEV0FSRV9NT0RVTEVfSUQsCisgICAgICAgICAgICAubmFtZSA9ICJHb29nbGUgRHluYW1pYyBTZW5zb3IgTWFuYWdlciIsCisgICAgICAgICAgICAuYXV0aG9yID0gIkdvb2dsZSIsCisgICAgICAgICAgICAubWV0aG9kcyA9ICZzZW5zb3JzX21vZHVsZV9tZXRob2RzLAorICAgICAgICAgICAgLmRzbyAgPSBOVUxMLAorICAgICAgICAgICAgLnJlc2VydmVkID0gezB9LAorICAgIH0sCisgICAgLmdldF9zZW5zb3JzX2xpc3QgPSBnZXRfc2Vuc29yc19saXN0LAorICAgIC5zZXRfb3BlcmF0aW9uX21vZGUgPSBzZXRfb3BlcmF0aW9uX21vZGUsCit9OwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL2R5bmFtaWNfc2Vuc29yL3NlbnNvcnMuaCBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkODcwOAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvc2Vuc29ycy9keW5hbWljX3NlbnNvci9zZW5zb3JzLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU0VOU09SU19IXworI2RlZmluZSBTRU5TT1JTX0hfCisKKyNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FCYXNlLmg+CisjaW5jbHVkZSA8dXRpbHMvUmVmQmFzZS5oPgorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisgICAgbmFtZXNwYWNlIFNlbnNvckhhbEV4dCB7CisgICAgICAgIGNsYXNzIER5bmFtaWNTZW5zb3JNYW5hZ2VyOworICAgIH0gLy8gbmFtZXNwYWNlIEJhc2VTZW5zb3JPYmplY3QKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKKwordXNpbmcgYW5kcm9pZDo6U2Vuc29ySGFsRXh0OjpEeW5hbWljU2Vuc29yTWFuYWdlcjsKKworY2xhc3MgU2Vuc29yQ29udGV4dCB7CitwdWJsaWM6CisgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfMSBkZXZpY2U7CisKKyAgICBleHBsaWNpdCBTZW5zb3JDb250ZXh0KGNvbnN0IHN0cnVjdCBod19tb2R1bGVfdCAqbW9kdWxlKTsKKworICAgIHNpemVfdCBnZXRTZW5zb3JMaXN0KHNlbnNvcl90IGNvbnN0ICoqbGlzdCk7CisKK3ByaXZhdGU6CisKKyAgICBpbnQgY2xvc2UoKTsKKyAgICBpbnQgYWN0aXZhdGUoaW50IGhhbmRsZSwgaW50IGVuYWJsZWQpOworICAgIGludCBzZXREZWxheShpbnQgaGFuZGxlLCBpbnQ2NF90IGRlbGF5TnMpOworICAgIGludCBwb2xsKHNlbnNvcnNfZXZlbnRfdCAqZGF0YSwgaW50IGNvdW50KTsKKworICAgIGludCBiYXRjaChpbnQgaGFuZGxlLCBpbnQ2NF90IHNhbXBsaW5nX3BlcmlvZF9ucywKKyAgICAgICAgICAgICAgaW50NjRfdCBtYXhfcmVwb3J0X2xhdGVuY3lfbnMpOworCisgICAgaW50IGZsdXNoKGludCBoYW5kbGUpOworCisgICAgLy8gc3RhdGljIHdyYXBwZXJzCisgICAgc3RhdGljIGludCBDbG9zZVdyYXBwZXIoc3RydWN0IGh3X2RldmljZV90ICpkZXYpOworCisgICAgc3RhdGljIGludCBBY3RpdmF0ZVdyYXBwZXIoCisgICAgICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV90ICpkZXYsIGludCBoYW5kbGUsIGludCBlbmFibGVkKTsKKworICAgIHN0YXRpYyBpbnQgU2V0RGVsYXlXcmFwcGVyKAorICAgICAgICAgICAgc3RydWN0IHNlbnNvcnNfcG9sbF9kZXZpY2VfdCAqZGV2LCBpbnQgaGFuZGxlLCBpbnQ2NF90IGRlbGF5TnMpOworCisgICAgc3RhdGljIGludCBQb2xsV3JhcHBlcigKKyAgICAgICAgICAgIHN0cnVjdCBzZW5zb3JzX3BvbGxfZGV2aWNlX3QgKmRldiwgc2Vuc29yc19ldmVudF90ICpkYXRhLCBpbnQgY291bnQpOworCisgICAgc3RhdGljIGludCBCYXRjaFdyYXBwZXIoCisgICAgICAgICAgICBzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsCisgICAgICAgICAgICBpbnQgaGFuZGxlLAorICAgICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgaW50NjRfdCBzYW1wbGluZ19wZXJpb2RfbnMsCisgICAgICAgICAgICBpbnQ2NF90IG1heF9yZXBvcnRfbGF0ZW5jeV9ucyk7CisKKyAgICBzdGF0aWMgaW50IEZsdXNoV3JhcHBlcihzdHJ1Y3Qgc2Vuc29yc19wb2xsX2RldmljZV8xICpkZXYsIGludCBoYW5kbGUpOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IGtEeW5hbWljSGFuZGxlQmFzZSA9IDB4MTAwMDA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQzMl90IGtEeW5hbWljSGFuZGxlRW5kID0gMHgxMDAwMDAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgaW50MzJfdCBrTWF4RHluYW1pY0hhbmRsZUNvdW50ID0ga0R5bmFtaWNIYW5kbGVFbmQgLSBrRHluYW1pY0hhbmRsZUJhc2U7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RHluYW1pY1NlbnNvck1hbmFnZXI+IG1EeW5hbWljU2Vuc29yTWFuYWdlcjsKKworICAgIERJU0FMTE9XX0VWSUxfQ09OU1RSVUNUT1JTKFNlbnNvckNvbnRleHQpOworfTsKKworI2VuZGlmICAvLyBTRU5TT1JTX0hfCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuY3BwIGIvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmNwcAppbmRleCBmMzhkOTBkLi4yODEwMTE4IDEwMDY0NAotLS0gYS9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuY3BwCisrKyBiL21vZHVsZXMvc2Vuc29ycy9tdWx0aWhhbC5jcHAKQEAgLTE0LDMzICsxNCwzMCBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHBvbGwuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy5oPgorI2luY2x1ZGUgIlNlbnNvckV2ZW50UXVldWUuaCIKKyNpbmNsdWRlICJtdWx0aWhhbC5oIgogCiAjZGVmaW5lIExPR19OREVCVUcgMQogI2luY2x1ZGUgPGN1dGlscy9sb2cuaD4KKyNpbmNsdWRlIDxjdXRpbHMvYXRvbWljLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvc2Vuc29ycy5oPgogCiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxmc3RyZWFtPgogI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzdHJpbmc+CiAKLSNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPGRsZmNuLmg+Ci0jaW5jbHVkZSA8U2Vuc29yRXZlbnRRdWV1ZS5oPgotCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyKiBDT05GSUdfRklMRU5BTUUgPSAiL3N5c3RlbS9ldGMvc2Vuc29ycy9oYWxzLmNvbmYiOwotc3RhdGljIGNvbnN0IGludCBNQVhfQ09ORl9MSU5FX0xFTkdUSCA9IDEwMjQ7CiAKIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgaW5pdF9tb2R1bGVzX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgaW5pdF9zZW5zb3JzX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKQEAgLTI1OCw5ICsyNTUsOSBAQAogICAgIH0KIH0KIAotLy8gQW5kcm9pZCBMIHJlcXVpcmVzIHNlbnNvciBIQUxzIHRvIGJlIGVpdGhlciAxXzAgb3IgMV8zIGNvbXBsaWFudAorLy8gQW5kcm9pZCBOIGFuZCBoaXJlIHJlcXVpcmUgc2Vuc29yIEhBTHMgdG8gYmUgYXQgbGVhc3QgMV8zIGNvbXBsaWFudAogI2RlZmluZSBIQUxfVkVSU0lPTl9JU19DT01QTElBTlQodmVyc2lvbikgIFwKLSAgICAodmVyc2lvbiA9PSBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzAgfHwgdmVyc2lvbiA+PSBTRU5TT1JTX0RFVklDRV9BUElfVkVSU0lPTl8xXzMpCisgICAgKHZlcnNpb24gPj0gU0VOU09SU19ERVZJQ0VfQVBJX1ZFUlNJT05fMV8zKQogCiAvLyBSZXR1cm5zIHRydWUgaWYgSEFMIGlzIGNvbXBsaWFudCwgZmFsc2UgaWYgSEFMIGlzIG5vdCBjb21wbGlhbnQgb3IgaWYgaGFuZGxlIGlzIGludmFsaWQKIHN0YXRpYyBib29sIGhhbElzQ29tcGxpYW50KHNlbnNvcnNfcG9sbF9jb250ZXh0X3QgKmN0eCwgaW50IGhhbmRsZSkgewpAQCAtNTA0LDEzICs1MDEsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgZ2V0X3NvX3BhdGhzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAqc29fcGF0aHMpIHsKICAgICBzdGQ6OnN0cmluZyBsaW5lOwotICAgIHN0ZDo6aWZzdHJlYW0gY29uZl9maWxlKENPTkZJR19GSUxFTkFNRSk7CisgICAgc3RkOjppZnN0cmVhbSBjb25mX2ZpbGUoTVVMVElfSEFMX0NPTkZJR19GSUxFX1BBVEgpOwogCiAgICAgaWYoIWNvbmZfZmlsZSkgewotICAgICAgICBBTE9HVygiTm8gbXVsdGloYWwgY29uZmlnIGZpbGUgZm91bmQgYXQgJXMiLCBDT05GSUdfRklMRU5BTUUpOworICAgICAgICBBTE9HVygiTm8gbXVsdGloYWwgY29uZmlnIGZpbGUgZm91bmQgYXQgJXMiLCBNVUxUSV9IQUxfQ09ORklHX0ZJTEVfUEFUSCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQUxPR1YoIk11bHRpaGFsIGNvbmZpZyBmaWxlIGZvdW5kIGF0ICVzIiwgQ09ORklHX0ZJTEVOQU1FKTsKKyAgICBBTE9HVigiTXVsdGloYWwgY29uZmlnIGZpbGUgZm91bmQgYXQgJXMiLCBNVUxUSV9IQUxfQ09ORklHX0ZJTEVfUEFUSCk7CiAgICAgd2hpbGUgKHN0ZDo6Z2V0bGluZShjb25mX2ZpbGUsIGxpbmUpKSB7CiAgICAgICAgIEFMT0dWKCJjb25maWcgZmlsZSBsaW5lOiAnJXMnIiwgbGluZS5jX3N0cigpKTsKICAgICAgICAgc29fcGF0aHMtPnB1c2hfYmFjayhsaW5lKTsKQEAgLTY2MCw2ICs2NTcsMTAgQEAKICAgICAuZ2V0X3NlbnNvcnNfbGlzdCA9IG1vZHVsZV9fZ2V0X3NlbnNvcnNfbGlzdAogfTsKIAorc3RydWN0IHNlbnNvcnNfbW9kdWxlX3QgKmdldF9tdWx0aV9oYWxfbW9kdWxlX2luZm8oKSB7CisgICAgcmV0dXJuICgmSEFMX01PRFVMRV9JTkZPX1NZTSk7Cit9CisKIHN0YXRpYyBpbnQgb3Blbl9zZW5zb3JzKGNvbnN0IHN0cnVjdCBod19tb2R1bGVfdCogaHdfbW9kdWxlLCBjb25zdCBjaGFyKiBuYW1lLAogICAgICAgICBzdHJ1Y3QgaHdfZGV2aWNlX3QqKiBod19kZXZpY2Vfb3V0KSB7CiAgICAgQUxPR1YoIm9wZW5fc2Vuc29ycyBiZWdpbi4uLiIpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmggYi9tb2R1bGVzL3NlbnNvcnMvbXVsdGloYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBjN2NjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zZW5zb3JzL211bHRpaGFsLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEhBUkRXQVJFX0xJQkhBUkRXQVJFX01PRFVMRVNfU0VOU09SU19NVUxUSUhBTF9IXworI2RlZmluZSBIQVJEV0FSRV9MSUJIQVJEV0FSRV9NT0RVTEVTX1NFTlNPUlNfTVVMVElIQUxfSF8KKworI2luY2x1ZGUgPGhhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlIDxoYXJkd2FyZS9oYXJkd2FyZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciogTVVMVElfSEFMX0NPTkZJR19GSUxFX1BBVEggPSAiL3N5c3RlbS9ldGMvc2Vuc29ycy9oYWxzLmNvbmYiOworCitzdHJ1Y3Qgc2Vuc29yc19tb2R1bGVfdCAqZ2V0X211bHRpX2hhbF9tb2R1bGVfaW5mbyh2b2lkKTsKKworI2VuZGlmIC8vIEhBUkRXQVJFX0xJQkhBUkRXQVJFX01PRFVMRVNfU0VOU09SU19NVUxUSUhBTF9IXwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zZW5zb3JzL3Rlc3RzL1NlbnNvckV2ZW50UXVldWVfdGVzdC5jcHAgYi9tb2R1bGVzL3NlbnNvcnMvdGVzdHMvU2Vuc29yRXZlbnRRdWV1ZV90ZXN0LmNwcAppbmRleCAzMjE4YmI5Li5kM2Q3NWVlIDEwMDY0NAotLS0gYS9tb2R1bGVzL3NlbnNvcnMvdGVzdHMvU2Vuc29yRXZlbnRRdWV1ZV90ZXN0LmNwcAorKysgYi9tb2R1bGVzL3NlbnNvcnMvdGVzdHMvU2Vuc29yRXZlbnRRdWV1ZV90ZXN0LmNwcApAQCAtMzIsNyArMzIsNyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGNoZWNrSW50KGNoYXIqIG1zZywgaW50IGV4cGVjdGVkLCBpbnQgYWN0dWFsKSB7Citib29sIGNoZWNrSW50KGNvbnN0IGNoYXIqIG1zZywgaW50IGV4cGVjdGVkLCBpbnQgYWN0dWFsKSB7CiAgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgewogICAgICAgICBwcmludGYoIiVzOyBleHBlY3RlZCAlZDsgYWN0dWFsIHdhcyAlZFxuIiwgbXNnLCBleHBlY3RlZCwgYWN0dWFsKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiB9CiAKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CitpbnQgbWFpbihpbnQgYXJnYyBfX2F0dHJpYnV0ZSgodW51c2VkKSksIGNoYXIgKiphcmd2IF9fYXR0cmlidXRlKCh1bnVzZWQpKSkgewogICAgIGlmICh0ZXN0U2ltcGxlV3JpdGVTaXplQ291bnRzKCkgJiYKICAgICAgICAgICAgIHRlc3RXcmFwcGluZ1dyaXRlU2l6ZUNvdW50cygpICYmCiAgICAgICAgICAgICB0ZXN0RnVsbFF1ZXVlSW8oKSkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zb3VuZHRyaWdnZXIvQW5kcm9pZC5tayBiL21vZHVsZXMvc291bmR0cmlnZ2VyL0FuZHJvaWQubWsKaW5kZXggYmI1ODA1My4uODI1MGY5YiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zb3VuZHRyaWdnZXIvQW5kcm9pZC5taworKysgYi9tb2R1bGVzL3NvdW5kdHJpZ2dlci9BbmRyb2lkLm1rCkBAIC0xOSw2ICsxOSw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSBzb3VuZF90cmlnZ2VyLnN0dWIuZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gc291bmRfdHJpZ2dlcl9ody5jCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmxvZyBsaWJjdXRpbHMKIExPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCmRpZmYgLS1naXQgYS9tb2R1bGVzL3RoZXJtYWwvQW5kcm9pZC5tayBiL21vZHVsZXMvdGhlcm1hbC9BbmRyb2lkLm1rCmluZGV4IDgwYWQ3OGEuLmZmNTExNDUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdGhlcm1hbC9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvdGhlcm1hbC9BbmRyb2lkLm1rCkBAIC0xOCw2ICsxOCw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSB0aGVybWFsLmRlZmF1bHQKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfU1JDX0ZJTEVTIDo9IHRoZXJtYWwuYwogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJsb2cgbGliY3V0aWxzCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbApkaWZmIC0tZ2l0IGEvbW9kdWxlcy90dl9pbnB1dC9BbmRyb2lkLmJwIGIvbW9kdWxlcy90dl9pbnB1dC9BbmRyb2lkLmJwCmluZGV4IGJlYWMxMzIuLjUwOTE5OGQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdHZfaW5wdXQvQW5kcm9pZC5icAorKysgYi9tb2R1bGVzL3R2X2lucHV0L0FuZHJvaWQuYnAKQEAgLTE1LDYgKzE1LDcgQEAKIGNjX2xpYnJhcnlfc2hhcmVkIHsKICAgICBuYW1lOiAidHZfaW5wdXQuZGVmYXVsdCIsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiaHciLAorICAgIHByb3ByaWV0YXJ5OiB0cnVlLAogICAgIHNoYXJlZF9saWJzOiBbCiAgICAgICAgICJsaWJjdXRpbHMiLAogICAgICAgICAibGlibG9nIiwKZGlmZiAtLWdpdCBhL21vZHVsZXMvdHZfaW5wdXQvdHZfaW5wdXQuY3BwIGIvbW9kdWxlcy90dl9pbnB1dC90dl9pbnB1dC5jcHAKaW5kZXggZjkzY2IyMC4uNGM0MjUxOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy90dl9pbnB1dC90dl9pbnB1dC5jcHAKKysrIGIvbW9kdWxlcy90dl9pbnB1dC90dl9pbnB1dC5jcHAKQEAgLTM3LDE4ICszNywxOCBAQAogICAgICAgICBjb25zdCBjaGFyKiBuYW1lLCBzdHJ1Y3QgaHdfZGV2aWNlX3QqKiBkZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGh3X21vZHVsZV9tZXRob2RzX3QgdHZfaW5wdXRfbW9kdWxlX21ldGhvZHMgPSB7Ci0gICAgb3BlbjogdHZfaW5wdXRfZGV2aWNlX29wZW4KKyAgICAub3BlbiA9IHR2X2lucHV0X2RldmljZV9vcGVuCiB9OwogCiB0dl9pbnB1dF9tb2R1bGVfdCBIQUxfTU9EVUxFX0lORk9fU1lNID0gewotICAgIGNvbW1vbjogewotICAgICAgICB0YWc6IEhBUkRXQVJFX01PRFVMRV9UQUcsCi0gICAgICAgIHZlcnNpb25fbWFqb3I6IDAsCi0gICAgICAgIHZlcnNpb25fbWlub3I6IDEsCi0gICAgICAgIGlkOiBUVl9JTlBVVF9IQVJEV0FSRV9NT0RVTEVfSUQsCi0gICAgICAgIG5hbWU6ICJTYW1wbGUgVFYgaW5wdXQgbW9kdWxlIiwKLSAgICAgICAgYXV0aG9yOiAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIsCi0gICAgICAgIG1ldGhvZHM6ICZ0dl9pbnB1dF9tb2R1bGVfbWV0aG9kcywKKyAgICAuY29tbW9uID0geworICAgICAgICAudGFnID0gSEFSRFdBUkVfTU9EVUxFX1RBRywKKyAgICAgICAgLnZlcnNpb25fbWFqb3IgPSAwLAorICAgICAgICAudmVyc2lvbl9taW5vciA9IDEsCisgICAgICAgIC5pZCA9IFRWX0lOUFVUX0hBUkRXQVJFX01PRFVMRV9JRCwKKyAgICAgICAgLm5hbWUgPSAiU2FtcGxlIFRWIGlucHV0IG1vZHVsZSIsCisgICAgICAgIC5hdXRob3IgPSAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIsCisgICAgICAgIC5tZXRob2RzID0gJnR2X2lucHV0X21vZHVsZV9tZXRob2RzLAogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvdXNiYXVkaW8vQW5kcm9pZC5tayBiL21vZHVsZXMvdXNiYXVkaW8vQW5kcm9pZC5tawppbmRleCA5ZGYxZTc5Li5iMzZiZjlmIDEwMDY0NAotLS0gYS9tb2R1bGVzL3VzYmF1ZGlvL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy91c2JhdWRpby9BbmRyb2lkLm1rCkBAIC0xOCw2ICsxOCw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSBhdWRpby51c2IuZGVmYXVsdAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gaHcKK0xPQ0FMX1BST1BSSUVUQVJZX01PRFVMRSA6PSB0cnVlCiBMT0NBTF9TUkNfRklMRVMgOj0gXAogCWF1ZGlvX2hhbC5jCiBMT0NBTF9DX0lOQ0xVREVTICs9IFwKZGlmZiAtLWdpdCBhL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYS5jcHAgYi9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmEuY3BwCmluZGV4IDUwMGE5ODIuLjAzMjRkYTggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYS5jcHAKKysrIGIvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhLmNwcApAQCAtNDkxLDkgKzQ5MSw5IEBACiAgICAgLy8gVE9ETzogZHVtcCBhbGwgc2V0dGluZ3MKICAgICBkcHJpbnRmKGZkLCAiTW9zdCBSZWNlbnQgU2V0dGluZ3M6ICglcClcbiIsIG1TZXR0aW5ncyk7CiAKLSAgICBkcHJpbnRmKGZkLCAiTnVtYmVyIG9mIHN0cmVhbXM6ICVkXG4iLCBtU3RyZWFtcy5zaXplKCkpOworICAgIGRwcmludGYoZmQsICJOdW1iZXIgb2Ygc3RyZWFtczogJXp1XG4iLCBtU3RyZWFtcy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVN0cmVhbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgZHByaW50ZihmZCwgIlN0cmVhbSAlZC8lZDpcbiIsIGksIG1TdHJlYW1zLnNpemUoKSk7CisgICAgICAgIGRwcmludGYoZmQsICJTdHJlYW0gJXp1LyV6dTpcbiIsIGksIG1TdHJlYW1zLnNpemUoKSk7CiAgICAgICAgIG1TdHJlYW1zW2ldLT5kdW1wKGZkKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmFIQUwuY3BwIGIvbW9kdWxlcy91c2JjYW1lcmEvQ2FtZXJhSEFMLmNwcAppbmRleCBlZWMxMDQ0Li4xYTVlYjNhIDEwMDY0NAotLS0gYS9tb2R1bGVzL3VzYmNhbWVyYS9DYW1lcmFIQUwuY3BwCisrKyBiL21vZHVsZXMvdXNiY2FtZXJhL0NhbWVyYUhBTC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAKIAogaW50IENhbWVyYUhBTDo6Z2V0TnVtYmVyT2ZDYW1lcmFzKCkgewogICAgIGFuZHJvaWQ6Ok11dGV4OjpBdXRvbG9jayBhbChtTW9kdWxlTG9jayk7Ci0gICAgQUxPR1YoIiVzOiAlZCIsIF9fZnVuY19fLCBtQ2FtZXJhcy5zaXplKCkpOworICAgIEFMT0dWKCIlczogJXp1IiwgX19mdW5jX18sIG1DYW1lcmFzLnNpemUoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obUNhbWVyYXMuc2l6ZSgpKTsKIH0KIApAQCAtMTMwLDI5ICsxMzAsMjkgQEAKIH0KIAogc3RhdGljIGh3X21vZHVsZV9tZXRob2RzX3QgZ0NhbWVyYU1vZHVsZU1ldGhvZHMgPSB7Ci0gICAgb3BlbiA6IG9wZW5fZGV2CisgICAgLm9wZW4gPSBvcGVuX2RldgogfTsKIAogY2FtZXJhX21vZHVsZV90IEhBTF9NT0RVTEVfSU5GT19TWU0gX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpID0gewotICAgIGNvbW1vbiA6IHsKLSAgICAgICAgdGFnICAgICAgICAgICAgICAgIDogSEFSRFdBUkVfTU9EVUxFX1RBRywKLSAgICAgICAgbW9kdWxlX2FwaV92ZXJzaW9uIDogQ0FNRVJBX01PRFVMRV9BUElfVkVSU0lPTl8yXzQsCi0gICAgICAgIGhhbF9hcGlfdmVyc2lvbiAgICA6IEhBUkRXQVJFX0hBTF9BUElfVkVSU0lPTiwKLSAgICAgICAgaWQgICAgICAgICAgICAgICAgIDogQ0FNRVJBX0hBUkRXQVJFX01PRFVMRV9JRCwKLSAgICAgICAgbmFtZSAgICAgICAgICAgICAgIDogIkRlZmF1bHQgVVNCIENhbWVyYSBIQUwiLAotICAgICAgICBhdXRob3IgICAgICAgICAgICAgOiAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIsCi0gICAgICAgIG1ldGhvZHMgICAgICAgICAgICA6ICZnQ2FtZXJhTW9kdWxlTWV0aG9kcywKLSAgICAgICAgZHNvICAgICAgICAgICAgICAgIDogTlVMTCwKLSAgICAgICAgcmVzZXJ2ZWQgICAgICAgICAgIDogezB9LAorICAgIC5jb21tb24gPSB7CisgICAgICAgIC50YWcgICAgICAgICAgICAgICAgPSBIQVJEV0FSRV9NT0RVTEVfVEFHLAorICAgICAgICAubW9kdWxlX2FwaV92ZXJzaW9uID0gQ0FNRVJBX01PRFVMRV9BUElfVkVSU0lPTl8yXzQsCisgICAgICAgIC5oYWxfYXBpX3ZlcnNpb24gICAgPSBIQVJEV0FSRV9IQUxfQVBJX1ZFUlNJT04sCisgICAgICAgIC5pZCAgICAgICAgICAgICAgICAgPSBDQU1FUkFfSEFSRFdBUkVfTU9EVUxFX0lELAorICAgICAgICAubmFtZSAgICAgICAgICAgICAgID0gIkRlZmF1bHQgVVNCIENhbWVyYSBIQUwiLAorICAgICAgICAuYXV0aG9yICAgICAgICAgICAgID0gIlRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QiLAorICAgICAgICAubWV0aG9kcyAgICAgICAgICAgID0gJmdDYW1lcmFNb2R1bGVNZXRob2RzLAorICAgICAgICAuZHNvICAgICAgICAgICAgICAgID0gTlVMTCwKKyAgICAgICAgLnJlc2VydmVkICAgICAgICAgICA9IHswfSwKICAgICB9LAotICAgIGdldF9udW1iZXJfb2ZfY2FtZXJhcyA6IGdldF9udW1iZXJfb2ZfY2FtZXJhcywKLSAgICBnZXRfY2FtZXJhX2luZm8gICAgICAgOiBnZXRfY2FtZXJhX2luZm8sCi0gICAgc2V0X2NhbGxiYWNrcyAgICAgICAgIDogc2V0X2NhbGxiYWNrcywKLSAgICBnZXRfdmVuZG9yX3RhZ19vcHMgICAgOiBOVUxMLAotICAgIG9wZW5fbGVnYWN5ICAgICAgICAgICA6IE5VTEwsCi0gICAgc2V0X3RvcmNoX21vZGUgICAgICAgIDogTlVMTCwKLSAgICBpbml0ICAgICAgICAgICAgICAgICAgOiBOVUxMLAotICAgIHJlc2VydmVkICAgICAgICAgICAgICA6IHswfSwKKyAgICAuZ2V0X251bWJlcl9vZl9jYW1lcmFzID0gZ2V0X251bWJlcl9vZl9jYW1lcmFzLAorICAgIC5nZXRfY2FtZXJhX2luZm8gICAgICAgPSBnZXRfY2FtZXJhX2luZm8sCisgICAgLnNldF9jYWxsYmFja3MgICAgICAgICA9IHNldF9jYWxsYmFja3MsCisgICAgLmdldF92ZW5kb3JfdGFnX29wcyAgICA9IE5VTEwsCisgICAgLm9wZW5fbGVnYWN5ICAgICAgICAgICA9IE5VTEwsCisgICAgLnNldF90b3JjaF9tb2RlICAgICAgICA9IE5VTEwsCisgICAgLmluaXQgICAgICAgICAgICAgICAgICA9IE5VTEwsCisgICAgLnJlc2VydmVkICAgICAgICAgICAgICA9IHswfSwKIH07CiB9IC8vIGV4dGVybiAiQyIKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy91c2JjYW1lcmEvSG90cGx1Z1RocmVhZC5jcHAgYi9tb2R1bGVzL3VzYmNhbWVyYS9Ib3RwbHVnVGhyZWFkLmNwcAppbmRleCA4MGYxOGM4Li42MTg4ZWRlIDEwMDY0NAotLS0gYS9tb2R1bGVzL3VzYmNhbWVyYS9Ib3RwbHVnVGhyZWFkLmNwcAorKysgYi9tb2R1bGVzL3VzYmNhbWVyYS9Ib3RwbHVnVGhyZWFkLmNwcApAQCAtNDAsNiArNDAsNyBAQAogfQogCiBib29sIEhvdHBsdWdUaHJlYWQ6OnRocmVhZExvb3AoKSB7CisgICAgKHZvaWQpbU1vZHVsZTsgIC8vIHNpbGVuY2Ugd2FybmluZyBhYm91dCB1bnVzZWQgbWVtYmVyLgogCiAgICAgLyoqCiAgICAgICogQ2hlY2sgY2FtZXJhIGNvbm5lY3Rpb24gc3RhdHVzIGNoYW5nZSwgaWYgY29ubmVjdGVkLCBkbyBiZWxvdzoKZGlmZiAtLWdpdCBhL21vZHVsZXMvdXNiY2FtZXJhL1N0cmVhbS5jcHAgYi9tb2R1bGVzL3VzYmNhbWVyYS9TdHJlYW0uY3BwCmluZGV4IDQ1ZTdmYzIuLmQ0MTg3OTggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdXNiY2FtZXJhL1N0cmVhbS5jcHAKKysrIGIvbW9kdWxlcy91c2JjYW1lcmEvU3RyZWFtLmNwcApAQCAtMTcyLDEwICsxNzIsOSBAQAogICAgIC8vIFRvRG86IHByZXR0eXByaW50IHVzYWdlIG1hc2sgZmxhZ3MKICAgICBkcHJpbnRmKGZkLCAiR3JhbGxvYyBVc2FnZSBNYXNrOiAlIyIgUFJJeDMyICJcbiIsIG1TdHJlYW0tPnVzYWdlKTsKICAgICBkcHJpbnRmKGZkLCAiTWF4IEJ1ZmZlciBDb3VudDogJSIgUFJJdTMyICJcbiIsIG1TdHJlYW0tPm1heF9idWZmZXJzKTsKLSAgICBkcHJpbnRmKGZkLCAiTnVtYmVyIG9mIEJ1ZmZlcnMgaW4gdXNlIGJ5IEhBTDogJSIgUFJJdTMyICJcbiIsIG1CdWZmZXJzLnNpemUoKSk7CisgICAgZHByaW50ZihmZCwgIk51bWJlciBvZiBCdWZmZXJzIGluIHVzZSBieSBIQUw6ICV6dVxuIiwgbUJ1ZmZlcnMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1CdWZmZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGRwcmludGYoZmQsICJCdWZmZXIgJSIgUFJJdTMyICIvJSIgUFJJdTMyICI6ICVwXG4iLCBpLCBtQnVmZmVycy5zaXplKCksCi0gICAgICAgICAgICAgICAgbUJ1ZmZlcnNbaV0pOworICAgICAgICBkcHJpbnRmKGZkLCAiQnVmZmVyICV6dS8lenU6ICVwXG4iLCBpLCBtQnVmZmVycy5zaXplKCksIG1CdWZmZXJzW2ldKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvdXNiY2FtZXJhL1VzYkNhbWVyYS5jcHAgYi9tb2R1bGVzL3VzYmNhbWVyYS9Vc2JDYW1lcmEuY3BwCmluZGV4IGVjOTQ5YWUuLjY1Y2JlYzkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdXNiY2FtZXJhL1VzYkNhbWVyYS5jcHAKKysrIGIvbW9kdWxlcy91c2JjYW1lcmEvVXNiQ2FtZXJhLmNwcApAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgcmV0dXJuIHNldFRlbXBsYXRlKENBTUVSQTNfVEVNUExBVEVfTUFOVUFMLCBtLmdldCgpKTsKIH0KIAotYm9vbCBVc2JDYW1lcmE6OmlzVmFsaWRDYXB0dXJlU2V0dGluZ3MoY29uc3QgY2FtZXJhX21ldGFkYXRhX3QqIHNldHRpbmdzKSB7Citib29sIFVzYkNhbWVyYTo6aXNWYWxpZENhcHR1cmVTZXR0aW5ncyhjb25zdCBjYW1lcmFfbWV0YWRhdGFfdCogLypzZXR0aW5ncyovKSB7CiAgICAgLy8gVE9ETzogcmVqZWN0IHNldHRpbmdzIHRoYXQgY2Fubm90IGJlIGNhcHR1cmVkCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL3ZlaGljbGUvQW5kcm9pZC5tayBiL21vZHVsZXMvdmVoaWNsZS9BbmRyb2lkLm1rCmluZGV4IGE2NjZiYzYuLjlmZDQ5ZGEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvdmVoaWNsZS9BbmRyb2lkLm1rCisrKyBiL21vZHVsZXMvdmVoaWNsZS9BbmRyb2lkLm1rCkBAIC0xOSw2ICsxOSw3IEBACiBMT0NBTF9NT0RVTEUgOj0gdmVoaWNsZS5kZWZhdWx0CiAKIExPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGh3CitMT0NBTF9QUk9QUklFVEFSWV9NT0RVTEUgOj0gdHJ1ZQogTE9DQUxfQ19JTkNMVURFUyA6PSBoYXJkd2FyZS9saWJoYXJkd2FyZQogTE9DQUxfU1JDX0ZJTEVTIDo9IHZlaGljbGUuYyB0aW1lVXRpbC5jcHAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGlibG9nIGxpYmN1dGlscyBsaWJ1dGlscwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy92ZWhpY2xlL3ZlaGljbGUuYyBiL21vZHVsZXMvdmVoaWNsZS92ZWhpY2xlLmMKaW5kZXggNzg1NDVhZi4uNjZlMjljMCAxMDA2NDQKLS0tIGEvbW9kdWxlcy92ZWhpY2xlL3ZlaGljbGUuYworKysgYi9tb2R1bGVzL3ZlaGljbGUvdmVoaWNsZS5jCkBAIC0yNzksMTAgKzI3OSwxMCBAQAogICAgICAgICAgICAgQUxPR0QoIlZhbHVlIHR5cGU6IEZMT0FUXG5WYWx1ZTogJWZcbiIsIGRhdGEtPnZhbHVlLmZsb2F0X3ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZFSElDTEVfVkFMVUVfVFlQRV9JTlQzMjoKLSAgICAgICAgICAgIEFMT0dEKCJWYWx1ZSB0eXBlOiBJTlQzMlxuVmFsdWU6ICVkXG4iLCBkYXRhLT52YWx1ZS5pbnQzMl92YWx1ZSk7CisgICAgICAgICAgICBBTE9HRCgiVmFsdWUgdHlwZTogSU5UMzJcblZhbHVlOiAlIiBQUklkMzIgIlxuIiwgZGF0YS0+dmFsdWUuaW50MzJfdmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVkVISUNMRV9WQUxVRV9UWVBFX0lOVDY0OgotICAgICAgICAgICAgQUxPR0QoIlZhbHVlIHR5cGU6IElOVDY0XG5WYWx1ZTogJWxsZFxuIiwgZGF0YS0+dmFsdWUuaW50NjRfdmFsdWUpOworICAgICAgICAgICAgQUxPR0QoIlZhbHVlIHR5cGU6IElOVDY0XG5WYWx1ZTogJSIgUFJJZDY0ICJcbiIsIGRhdGEtPnZhbHVlLmludDY0X3ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZFSElDTEVfVkFMVUVfVFlQRV9CT09MRUFOOgogICAgICAgICAgICAgQUxPR0QoIlZhbHVlIHR5cGU6IEJPT0xFQU5cblZhbHVlOiAlZFxuIiwgZGF0YS0+dmFsdWUuYm9vbGVhbl92YWx1ZSk7CkBAIC0zMzEsMjIgKzMzMSw2IEBACiAgICAgICAgIGV2ZW50LnByb3AgPSBzdWItPnByb3A7CiAgICAgICAgIGV2ZW50LnRpbWVzdGFtcCA9IGVsYXBzZWRSZWFsdGltZU5hbm8oKTsKICAgICAgICAgc3dpdGNoIChzdWItPnByb3ApIHsKLSAgICAgICAgICAgIGNhc2UgVkVISUNMRV9QUk9QRVJUWV9EUklWSU5HX1NUQVRVUzoKLSAgICAgICAgICAgICAgICBldmVudC52YWx1ZV90eXBlID0gVkVISUNMRV9WQUxVRV9UWVBFX0lOVDMyOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoKGV2ZW50LnRpbWVzdGFtcCAmIDB4MzAwMDAwMDApPj4yOCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZS5kcml2aW5nX3N0YXR1cyA9IFZFSElDTEVfRFJJVklOR19TVEFUVVNfVU5SRVNUUklDVEVEOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlLmRyaXZpbmdfc3RhdHVzID0gVkVISUNMRV9EUklWSU5HX1NUQVRVU19OT19WSURFTzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBldmVudC52YWx1ZS5kcml2aW5nX3N0YXR1cyA9IFZFSElDTEVfRFJJVklOR19TVEFUVVNfTk9fS0VZQk9BUkRfSU5QVVQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlLmRyaXZpbmdfc3RhdHVzID0gVkVISUNMRV9EUklWSU5HX1NUQVRVU19OT19DT05GSUc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBWRUhJQ0xFX1BST1BFUlRZX0dFQVJfU0VMRUNUSU9OOgogICAgICAgICAgICAgICAgIGV2ZW50LnZhbHVlX3R5cGUgPSBWRUhJQ0xFX1ZBTFVFX1RZUEVfSU5UMzI7CiAgICAgICAgICAgICAgICAgc3dpdGNoICgoZXZlbnQudGltZXN0YW1wICYgMHgzMDAwMDAwMCk+PjI4KSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL3ZpYnJhdG9yL0FuZHJvaWQuYnAgYi9tb2R1bGVzL3ZpYnJhdG9yL0FuZHJvaWQuYnAKaW5kZXggZjlhZmQ0NS4uM2M0YWViZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy92aWJyYXRvci9BbmRyb2lkLmJwCisrKyBiL21vZHVsZXMvdmlicmF0b3IvQW5kcm9pZC5icApAQCAtMTgsNiArMTgsNyBAQAogICAgIC8vIEhBTCBtb2R1bGUgaW1wbGVtZW50YXRpb24gc3RvcmVkIGluCiAgICAgLy8gaHcvPFZJQlJBVE9SX0hBUkRXQVJFX01PRFVMRV9JRD4uZGVmYXVsdC5zbwogICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImh3IiwKKyAgICBwcm9wcmlldGFyeTogdHJ1ZSwKICAgICBpbmNsdWRlX2RpcnM6IFsiaGFyZHdhcmUvbGliaGFyZHdhcmUiXSwKICAgICBzcmNzOiBbInZpYnJhdG9yLmMiXSwKICAgICBzaGFyZWRfbGliczogWyJsaWJsb2ciXSwKZGlmZiAtLWdpdCBhL21vZHVsZXMvdnIvQW5kcm9pZC5tayBiL21vZHVsZXMvdnIvQW5kcm9pZC5tawppbmRleCA0M2M4ZTkyLi5lMDRjMGRhIDEwMDY0NAotLS0gYS9tb2R1bGVzL3ZyL0FuZHJvaWQubWsKKysrIGIvbW9kdWxlcy92ci9BbmRyb2lkLm1rCkBAIC0xOCw2ICsxOCw3IEBACiAKIExPQ0FMX01PRFVMRSA6PSB2ci5kZWZhdWx0CiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBodworTE9DQUxfUFJPUFJJRVRBUllfTU9EVUxFIDo9IHRydWUKIExPQ0FMX1NSQ19GSUxFUyA6PSB2ci5jCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmN1dGlscwogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKZGlmZiAtLWdpdCBhL3Rlc3RzL2NhbWVyYTIvQW5kcm9pZC5tayBiL3Rlc3RzL2NhbWVyYTIvQW5kcm9pZC5tawppbmRleCBlNDVmNDY3Li5lNGY5NjQwIDEwMDY0NAotLS0gYS90ZXN0cy9jYW1lcmEyL0FuZHJvaWQubWsKKysrIGIvdGVzdHMvY2FtZXJhMi9BbmRyb2lkLm1rCkBAIC0yNSwxMCArMjUsMTIgQEAKIAlsaWJndWkgXAogCWxpYnN5bmMgXAogCWxpYnVpIFwKLQlsaWJkbAorCWxpYmRsIFwKKwlhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5kZXZpY2VAMy4yCiAKIExPQ0FMX0NfSU5DTFVERVMgKz0gXAogCXN5c3RlbS9tZWRpYS9jYW1lcmEvaW5jbHVkZSBcCisJc3lzdGVtL21lZGlhL3ByaXZhdGUvY2FtZXJhL2luY2x1ZGUgXAogCWZyYW1ld29ya3MvYXYvaW5jbHVkZS8gXAogCWZyYW1ld29ya3MvYXYvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UgXAogCWZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUgXApkaWZmIC0tZ2l0IGEvdGVzdHMvY2FtZXJhMi9DYW1lcmFNb2R1bGVGaXh0dXJlLmggYi90ZXN0cy9jYW1lcmEyL0NhbWVyYU1vZHVsZUZpeHR1cmUuaAppbmRleCAyNTUxM2FmLi5iMGQ0OWUyIDEwMDY0NAotLS0gYS90ZXN0cy9jYW1lcmEyL0NhbWVyYU1vZHVsZUZpeHR1cmUuaAorKysgYi90ZXN0cy9jYW1lcmEyL0NhbWVyYU1vZHVsZUZpeHR1cmUuaApAQCAtNzQsNyArNzQsNiBAQAogICAgIHZvaWQgVGVhckRvd24oKSB7CiAgICAgICAgIFRFU1RfRVhURU5TSU9OX0ZPUktJTkdfVEVBUl9ET1dOOwogCi0gICAgICAgIGRlbGV0ZSBtTW9kdWxlOwogICAgICAgICBUZWFyRG93bk1peGluKCk7CiAKICAgICAgICAgLyogaW1wb3J0YW50OiBkZXZpY2UgbXVzdCBiZSBkZXN0cnVjdGVkIGJlZm9yZSBjbG9zaW5nIG1vZHVsZSwKQEAgLTg1LDYgKzg0LDcgQEAKICAgICAgICAgICAgIEFTU0VSVF9FUSgwLCBIV01vZHVsZUhlbHBlcnM6OmNsb3NlTW9kdWxlKG1Nb2R1bGUtPmdldERzbygpKSkKICAgICAgICAgICAgICAgICA8PCAiRmFpbGVkIHRvIGNsb3NlIGNhbWVyYSBIQUwgbW9kdWxlIjsKICAgICAgICAgfQorICAgICAgICBkZWxldGUgbU1vZHVsZTsKICAgICB9CiAKICAgICB2b2lkIENyZWF0ZUNhbWVyYShpbnQgY2FtZXJhSUQsIC8qb3V0Ki8gc3A8Q2FtZXJhRGV2aWNlQmFzZT4gKmRldmljZSkgewpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgICAgICAgY2FzZSBDQU1FUkFfREVWSUNFX0FQSV9WRVJTSU9OXzNfMDoKICAgICAgICAgICAgIGNhc2UgQ0FNRVJBX0RFVklDRV9BUElfVkVSU0lPTl8zXzE6CiAgICAgICAgICAgICBjYXNlIENBTUVSQV9ERVZJQ0VfQVBJX1ZFUlNJT05fM18yOgotICAgICAgICAgICAgICAgICpkZXZpY2UgPSBuZXcgQ2FtZXJhM0RldmljZShjYW1lcmFJRCk7CisgICAgICAgICAgICAgICAgKmRldmljZSA9IG5ldyBDYW1lcmEzRGV2aWNlKFN0cmluZzg6OmZvcm1hdCgiJWQiLCBjYW1lcmFJRCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBkZXZpY2UtPmNsZWFyKCk7CmRpZmYgLS1naXQgYS90ZXN0cy9oYXJkd2FyZS9BbmRyb2lkLmJwIGIvdGVzdHMvaGFyZHdhcmUvQW5kcm9pZC5icApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY4ZTI4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9oYXJkd2FyZS9BbmRyb2lkLmJwCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotY2NfbGlicmFyeV9zdGF0aWMgewotICAgIG5hbWU6ICJzdGF0aWMtaGFsLWNoZWNrIiwKLSAgICBzcmNzOiBbCi0gICAgICAgICJzdHJ1Y3Qtc2l6ZS5jcHAiLAotICAgICAgICAic3RydWN0LW9mZnNldC5jcHAiLAotICAgICAgICAic3RydWN0LWxhc3QuY3BwIiwKLSAgICBdLAotICAgIHNoYXJlZF9saWJzOiBbImxpYmhhcmR3YXJlIl0sCi0gICAgY2ZsYWdzOiBbCi0gICAgICAgICItc3RkPWdudSsrMTEiLAotICAgICAgICAiLU8wIiwKLSAgICBdLAotCi0gICAgaW5jbHVkZV9kaXJzOiBbInN5c3RlbS9tZWRpYS9jYW1lcmEvaW5jbHVkZSJdLAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaGFyZHdhcmUvQW5kcm9pZC5tayBiL3Rlc3RzL2hhcmR3YXJlL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NDBjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hhcmR3YXJlL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxMiBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfTU9EVUxFIDo9IHN0YXRpYy1oYWwtY2hlY2sKK0xPQ0FMX1NSQ19GSUxFUyA6PSBzdHJ1Y3Qtc2l6ZS5jcHAgc3RydWN0LW9mZnNldC5jcHAgc3RydWN0LWxhc3QuY3BwCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmhhcmR3YXJlCitMT0NBTF9DRkxBR1MgOj0gLXN0ZD1nbnUrKzExIC1PMAorCitMT0NBTF9DX0lOQ0xVREVTICs9IFwKKyAgICBzeXN0ZW0vbWVkaWEvY2FtZXJhL2luY2x1ZGUKKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvdGVzdHMvaGFyZHdhcmUvc3RydWN0LW9mZnNldC5jcHAgYi90ZXN0cy9oYXJkd2FyZS9zdHJ1Y3Qtb2Zmc2V0LmNwcAppbmRleCAxMGMwODk1Li43ZjdmMmUwIDEwMDY0NAotLS0gYS90ZXN0cy9oYXJkd2FyZS9zdHJ1Y3Qtb2Zmc2V0LmNwcAorKysgYi90ZXN0cy9oYXJkd2FyZS9zdHJ1Y3Qtb2Zmc2V0LmNwcApAQCAtMTE2LDcgKzExNiw5IEBACiAgICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCBiYXRjaCwgNzYsIDE0NCk7CiAgICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCBmbHVzaCwgODAsIDE1Mik7CiAgICAgQ0hFQ0tfTUVNQkVSX0FUKHNlbnNvcnNfcG9sbF9kZXZpY2VfMV90LCBpbmplY3Rfc2Vuc29yX2RhdGEsIDg0LCAxNjApOwotICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgcmVzZXJ2ZWRfcHJvY3MsIDg4LCAxNjgpOworICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgcmVnaXN0ZXJfZGlyZWN0X2NoYW5uZWwsIDg4LCAxNjgpOworICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgY29uZmlnX2RpcmVjdF9yZXBvcnQsIDkyLCAxNzYpOworICAgIENIRUNLX01FTUJFUl9BVChzZW5zb3JzX3BvbGxfZGV2aWNlXzFfdCwgcmVzZXJ2ZWRfcHJvY3MsIDk2LCAxODQpOwogCiAgICAgLy9UeXBlcyBkZWZpbmVkIGluIGZiLmgKICAgICBDSEVDS19NRU1CRVJfQVQoZnJhbWVidWZmZXJfZGV2aWNlX3QsIGNvbW1vbiwgMCwgMCk7CmRpZmYgLS1naXQgYS90ZXN0cy92ZWhpY2xlL1JFQURNRSBiL3Rlc3RzL3ZlaGljbGUvUkVBRE1FCmluZGV4IGI4ZmM3ZDQuLjQyZDIyMTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3ZlaGljbGUvUkVBRE1FCisrKyBiL3Rlc3RzL3ZlaGljbGUvUkVBRE1FCkBAIC00OSwxMyArNDksMTMgQEAKICQgbW1tIGhhcmR3YXJlL2xpYmhhcmR3YXJlCiAKIFRoaXMgd2lsbCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGJpbmFyaWVzIHRoYXQgd2UgY2FyZSBhYm91dDoKLWkpIG91dC90YXJnZXQvcHJvZHVjdC9YWFgvc3lzdGVtL2xpYi9ody92ZWhpY2xlLmRlZmF1bHQuc28KK2kpIG91dC90YXJnZXQvcHJvZHVjdC9YWFgvdmVuZG9yL2xpYi9ody92ZWhpY2xlLmRlZmF1bHQuc28KIGlpKSBvdXQvdGFyZ2V0L3Byb2R1Y3QvWFhYL2RhdGEvbmF0aXZldGVzdC92ZWhpY2xlX3Rlc3RzCiBpaWkpIG91dC90YXJnZXQvcHJvZHVjdC9YWFgvc3lzdGVtL2Jpbi92ZWhpY2xlLWhhbC10b29sCiAKIFRoZSBsb2NhdGlvbiBmb3IgdGhlIGZpcnN0IHNoYXJlZCBsaWJyYXJ5IHdvdWxkIGJlOgotJCBhZGIgcHVzaCBvdXQvdGFyZ2V0L3Byb2R1Y3QvWFhYL3N5c3RlbS9saWIvaHcvdmVoaWNsZS5kZWZhdWx0LnNvCi0vc3lzdGVtL2xpYi9odworJCBhZGIgcHVzaCBvdXQvdGFyZ2V0L3Byb2R1Y3QvWFhYL3ZlbmRvci9saWIvaHcvdmVoaWNsZS5kZWZhdWx0LnNvCisvdmVuZG9yL2xpYi9odwogWW91IGNhbiBhbHNvIHVzZSAnYWRiIHN5bmMnIGlmIHlvdSBsaWtlLCBhbHRob3VnaCB0aGlzIGlzIHRoZSBlYXNpZXN0IGxlYXN0CiBoYXNzbGUgd2F5IG9mIHB1dHRpbmcgaXQgaW4gcGxhY2UuCiAKZGlmZiAtLWdpdCBhL3Rlc3RzL3ZlaGljbGUvdmVoaWNsZS1oYWwtdG9vbC5jIGIvdGVzdHMvdmVoaWNsZS92ZWhpY2xlLWhhbC10b29sLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAo=