ZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L0NNU0lTL3J1bGVzLm1rIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvQ01TSVMvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4MjAwYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L0NNU0lTL3J1bGVzLm1rCkBAIC0wLDAgKzEsNCBAQAorTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKKworR0xPQkFMX0lOQ0xVREVTICs9ICQoTE9DQUxfRElSKQorCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9DTVNJUy9zdG0zMmYyeHguaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L0NNU0lTL3N0bTMyZjJ4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MzgyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9DTVNJUy9zdG0zMmYyeHguaApAQCAtMCwwICsxLDY5NjkgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eC5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMw0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyDQorICAqIEBicmllZiAgIENNU0lTIENvcnRleC1NMyBEZXZpY2UgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUuIA0KKyAgKiAgICAgICAgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBwZXJpcGhlcmFsIHJlZ2lzdGVyJ3MgZGVmaW5pdGlvbnMsIGJpdHMgDQorICAqICAgICAgICAgIGRlZmluaXRpb25zIGFuZCBtZW1vcnkgbWFwcGluZyBmb3IgU1RNMzJGMnh4IGRldmljZXMuDQorICAqICAgICAgICAgICAgDQorICAqICAgICAgICAgIFRoZSBmaWxlIGlzIHRoZSB1bmlxdWUgaW5jbHVkZSBmaWxlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHByb2dyYW1tZXINCisgICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6DQorICAqICAgICAgICAgICAtIENvbmZpZ3VyYXRpb24gc2VjdGlvbiB0aGF0IGFsbG93cyB0byBzZWxlY3Q6DQorICAqICAgICAgICAgICAgICAtIFRoZSBkZXZpY2UgdXNlZCBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uDQorICAqICAgICAgICAgICAgICAtIFRvIHVzZSBvciBub3QgdGhlIHBlcmlwaGVyYWyScyBkcml2ZXJzIGluIGFwcGxpY2F0aW9uIGNvZGUoaS5lLg0KKyAgKiAgICAgICAgICAgICAgICBjb2RlIHdpbGwgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFsknMgcmVnaXN0ZXJzIA0KKyAgKiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkcml2ZXJzIEFQSSksIHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYnkgDQorICAqICAgICAgICAgICAgICAgICIjZGVmaW5lIFVTRV9TVERQRVJJUEhfRFJJVkVSIg0KKyAgKiAgICAgICAgICAgICAgLSBUbyBjaGFuZ2UgZmV3IGFwcGxpY2F0aW9uLXNwZWNpZmljIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgSFNFIA0KKyAgKiAgICAgICAgICAgICAgICBjcnlzdGFsIGZyZXF1ZW5jeQ0KKyAgKiAgICAgICAgICAgLSBEYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCBwZXJpcGhlcmFscw0KKyAgKiAgICAgICAgICAgLSBQZXJpcGhlcmFsJ3MgcmVnaXN0ZXJzIGRlY2xhcmF0aW9ucyBhbmQgYml0cyBkZWZpbml0aW9uDQorICAqICAgICAgICAgICAtIE1hY3JvcyB0byBhY2Nlc3MgcGVyaXBoZXJhbJJzIHJlZ2lzdGVycyBoYXJkd2FyZQ0KKyAgKiAgDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQ01TSVMNCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIHN0bTMyZjJ4eA0KKyAgKiBAew0KKyAgKi8NCisgICAgDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KKyAgDQorLyoqIEBhZGR0b2dyb3VwIExpYnJhcnlfY29uZmlndXJhdGlvbl9zZWN0aW9uDQorICAqIEB7DQorICAqLw0KKyAgDQorLyogVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IGFjY29yZGluZyB0byB0aGUgdGFyZ2V0IFNUTTMyIGRldmljZSB1c2VkIGluIHlvdXINCisgICBhcHBsaWNhdGlvbiANCisgICovDQorDQorI2lmICFkZWZpbmVkIChTVE0zMkYyWFgpIA0KKyAgI2RlZmluZSBTVE0zMkYyWFgNCisjZW5kaWYNCisNCisvKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQ0KKyAgICAgICAgZGV2aWNlcywgeW91IGNhbiBkZWZpbmUgdGhlIGRldmljZSBpbiB5b3VyIHRvb2xjaGFpbiBjb21waWxlciBwcmVwcm9jZXNzb3IuDQorICAqLw0KKw0KKyNpZiAhZGVmaW5lZCAoU1RNMzJGMlhYKQ0KKyAjZXJyb3IgIlBsZWFzZSBzZWxlY3QgZmlyc3QgdGhlIHRhcmdldCBTVE0zMkYyWFggZGV2aWNlIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiAoaW4gc3RtMzJmMnh4LmggZmlsZSkiDQorI2VuZGlmDQorDQorI2lmICFkZWZpbmVkICAoVVNFX1NURFBFUklQSF9EUklWRVIpDQorLyoqDQorICogQGJyaWVmIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdpbGwgbm90IHVzZSB0aGUgcGVyaXBoZXJhbHMgZHJpdmVycy4NCisgICBJbiB0aGlzIGNhc2UsIHRoZXNlIGRyaXZlcnMgd2lsbCBub3QgYmUgaW5jbHVkZWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgDQorICAgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFscyByZWdpc3RlcnMgDQorICAgKi8NCisgIC8qI2RlZmluZSBVU0VfU1REUEVSSVBIX0RSSVZFUiovDQorI2VuZGlmIC8qIFVTRV9TVERQRVJJUEhfRFJJVkVSICovDQorDQorLyoqDQorICogQGJyaWVmIEluIHRoZSBmb2xsb3dpbmcgbGluZSBhZGp1c3QgdGhlIHZhbHVlIG9mIEV4dGVybmFsIEhpZ2ggU3BlZWQgb3NjaWxsYXRvciAoSFNFKQ0KKyAgIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiANCisgICANCisgICBUaXA6IFRvIGF2b2lkIG1vZGlmeWluZyB0aGlzIGZpbGUgZWFjaCB0aW1lIHlvdSBuZWVkIHRvIHVzZSBkaWZmZXJlbnQgSFNFLCB5b3UNCisgICAgICAgIGNhbiBkZWZpbmUgdGhlIEhTRSB2YWx1ZSBpbiB5b3VyIHRvb2xjaGFpbiBjb21waWxlciBwcmVwcm9jZXNzb3IuDQorICAqLyAgICAgICAgICAgDQorI2lmICFkZWZpbmVkICAoSFNFX1ZBTFVFKSANCisgICNkZWZpbmUgSFNFX1ZBTFVFICAgICgodWludDMyX3QpMjUwMDAwMDApIC8qITwgVmFsdWUgb2YgdGhlIEV4dGVybmFsIG9zY2lsbGF0b3IgaW4gSHogKi8NCisjZW5kaWYgLyogSFNFX1ZBTFVFICovDQorDQorLyoqDQorICogQGJyaWVmIEluIHRoZSBmb2xsb3dpbmcgbGluZSBhZGp1c3QgdGhlIEV4dGVybmFsIEhpZ2ggU3BlZWQgb3NjaWxsYXRvciAoSFNFKSBTdGFydHVwIA0KKyAgIFRpbWVvdXQgdmFsdWUgDQorICAgKi8NCisjaWYgIWRlZmluZWQgIChIU0VfU1RBUlRVUF9USU1FT1VUKSANCisgICNkZWZpbmUgSFNFX1NUQVJUVVBfVElNRU9VVCAgICAoKHVpbnQxNl90KTB4MDUwMCkgICAvKiE8IFRpbWUgb3V0IGZvciBIU0Ugc3RhcnQgdXAgKi8NCisjZW5kaWYgLyogSFNFX1NUQVJUVVBfVElNRU9VVCAqLw0KKw0KKyNpZiAhZGVmaW5lZCAgKEhTSV9WQUxVRSkgICANCisgICNkZWZpbmUgSFNJX1ZBTFVFICAgICgodWludDMyX3QpMTYwMDAwMDApIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLw0KKyNlbmRpZiAvKiBIU0lfVkFMVUUgKi8NCisNCisvKioNCisgKiBAYnJpZWYgU1RNMzJGMlhYIFN0YW5kYXJkIFBlcmlwaGVyYWxzIExpYnJhcnkgdmVyc2lvbiBudW1iZXIgVjEuMS4zDQorICAgKi8NCisjZGVmaW5lIF9fU1RNMzJGMlhYX1NURFBFUklQSF9WRVJTSU9OX01BSU4gICAoMHgwMSkgLyohPCBbMzE6MjRdIG1haW4gdmVyc2lvbiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIF9fU1RNMzJGMlhYX1NURFBFUklQSF9WRVJTSU9OX1NVQjEgICAoMHgwMSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLw0KKyNkZWZpbmUgX19TVE0zMkYyWFhfU1REUEVSSVBIX1ZFUlNJT05fU1VCMiAgICgweDAzKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovDQorI2RlZmluZSBfX1NUTTMyRjJYWF9TVERQRVJJUEhfVkVSU0lPTl9SQyAgICAgKDB4MDApIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovIA0KKyNkZWZpbmUgX19TVE0zMkYyWFhfU1REUEVSSVBIX1ZFUlNJT04gICAgICAgICgoX19TVE0zMkYyWFhfU1REUEVSSVBIX1ZFUlNJT05fTUFJTiA8PCAyNClcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjJYWF9TVERQRVJJUEhfVkVSU0lPTl9TVUIxIDw8IDE2KVwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGMlhYX1NURFBFUklQSF9WRVJTSU9OX1NVQjIgPDwgOClcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjJYWF9TVERQRVJJUEhfVkVSU0lPTl9SQykpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBDb25maWd1cmF0aW9uX3NlY3Rpb25fZm9yX0NNU0lTDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAqIEBicmllZiBDb25maWd1cmF0aW9uIG9mIHRoZSBDb3J0ZXgtTTMgUHJvY2Vzc29yIGFuZCBDb3JlIFBlcmlwaGVyYWxzIA0KKyAqLw0KKyNkZWZpbmUgX19DTTNfUkVWICAgICAgICAgICAgICAgICAweDAyMDAgIC8qITwgQ29yZSBSZXZpc2lvbiByMnAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorI2RlZmluZSBfX01QVV9QUkVTRU5UICAgICAgICAgICAgIDEgICAgICAgLyohPCBTVE0zMkYyWFggcHJvdmlkZXMgYW4gTVBVICAgICAgICAgICAgICAgICAgICAgKi8NCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgNCAgICAgICAvKiE8IFNUTTMyRjJYWCB1c2VzIDQgQml0cyBmb3IgdGhlIFByaW9yaXR5IExldmVscyAqLw0KKyNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwICAgICAgIC8qITwgU2V0IHRvIDEgaWYgZGlmZmVyZW50IFN5c1RpY2sgQ29uZmlnIGlzIHVzZWQgICovDQorDQorLyoqDQorICogQGJyaWVmIFNUTTMyRjJYWCBJbnRlcnJ1cHQgTnVtYmVyIERlZmluaXRpb24sIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgZGV2aWNlIA0KKyAqICAgICAgICBpbiBAcmVmIExpYnJhcnlfY29uZmlndXJhdGlvbl9zZWN0aW9uIA0KKyAqLw0KK3R5cGVkZWYgZW51bSBJUlFuDQorew0KKy8qKioqKiogIENvcnRleC1NMyBQcm9jZXNzb3IgRXhjZXB0aW9ucyBOdW1iZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorICBOb25NYXNrYWJsZUludF9JUlFuICAgICAgICAgPSAtMTQsICAgIC8qITwgMiBOb24gTWFza2FibGUgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE1lbW9yeU1hbmFnZW1lbnRfSVJRbiAgICAgICA9IC0xMiwgICAgLyohPCA0IENvcnRleC1NMyBNZW1vcnkgTWFuYWdlbWVudCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgQnVzRmF1bHRfSVJRbiAgICAgICAgICAgICAgID0gLTExLCAgICAvKiE8IDUgQ29ydGV4LU0zIEJ1cyBGYXVsdCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVc2FnZUZhdWx0X0lSUW4gICAgICAgICAgICAgPSAtMTAsICAgIC8qITwgNiBDb3J0ZXgtTTMgVXNhZ2UgRmF1bHQgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNWQ2FsbF9JUlFuICAgICAgICAgICAgICAgICA9IC01LCAgICAgLyohPCAxMSBDb3J0ZXgtTTMgU1YgQ2FsbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRGVidWdNb25pdG9yX0lSUW4gICAgICAgICAgID0gLTQsICAgICAvKiE8IDEyIENvcnRleC1NMyBEZWJ1ZyBNb25pdG9yIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBQZW5kU1ZfSVJRbiAgICAgICAgICAgICAgICAgPSAtMiwgICAgIC8qITwgMTQgQ29ydGV4LU0zIFBlbmQgU1YgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFN5c1RpY2tfSVJRbiAgICAgICAgICAgICAgICA9IC0xLCAgICAgLyohPCAxNSBDb3J0ZXgtTTMgU3lzdGVtIFRpY2sgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKiogIFNUTTMyIHNwZWNpZmljIEludGVycnVwdCBOdW1iZXJzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorICBXV0RHX0lSUW4gICAgICAgICAgICAgICAgICAgPSAwLCAgICAgIC8qITwgV2luZG93IFdhdGNoRG9nIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFBWRF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgLyohPCBQVkQgdGhyb3VnaCBFWFRJIExpbmUgZGV0ZWN0aW9uIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVEFNUF9TVEFNUF9JUlFuICAgICAgICAgICAgID0gMiwgICAgICAvKiE8IFRhbXBlciBhbmQgVGltZVN0YW1wIGludGVycnVwdHMgdGhyb3VnaCB0aGUgRVhUSSBsaW5lICAgICAgICAgICAgICovDQorICBSVENfV0tVUF9JUlFuICAgICAgICAgICAgICAgPSAzLCAgICAgIC8qITwgUlRDIFdha2V1cCBpbnRlcnJ1cHQgdGhyb3VnaCB0aGUgRVhUSSBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEZMQVNIX0lSUW4gICAgICAgICAgICAgICAgICA9IDQsICAgICAgLyohPCBGTEFTSCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgUkNDX0lSUW4gICAgICAgICAgICAgICAgICAgID0gNSwgICAgICAvKiE8IFJDQyBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBFWFRJMF9JUlFuICAgICAgICAgICAgICAgICAgPSA2LCAgICAgIC8qITwgRVhUSSBMaW5lMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEVYVEkxX0lSUW4gICAgICAgICAgICAgICAgICA9IDcsICAgICAgLyohPCBFWFRJIExpbmUxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRVhUSTJfSVJRbiAgICAgICAgICAgICAgICAgID0gOCwgICAgICAvKiE8IEVYVEkgTGluZTIgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBFWFRJM19JUlFuICAgICAgICAgICAgICAgICAgPSA5LCAgICAgIC8qITwgRVhUSSBMaW5lMyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEVYVEk0X0lSUW4gICAgICAgICAgICAgICAgICA9IDEwLCAgICAgLyohPCBFWFRJIExpbmU0IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMV9TdHJlYW0wX0lSUW4gICAgICAgICAgID0gMTEsICAgICAvKiE8IERNQTEgU3RyZWFtIDAgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBETUExX1N0cmVhbTFfSVJRbiAgICAgICAgICAgPSAxMiwgICAgIC8qITwgRE1BMSBTdHJlYW0gMSBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIERNQTFfU3RyZWFtMl9JUlFuICAgICAgICAgICA9IDEzLCAgICAgLyohPCBETUExIFN0cmVhbSAyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMV9TdHJlYW0zX0lSUW4gICAgICAgICAgID0gMTQsICAgICAvKiE8IERNQTEgU3RyZWFtIDMgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBETUExX1N0cmVhbTRfSVJRbiAgICAgICAgICAgPSAxNSwgICAgIC8qITwgRE1BMSBTdHJlYW0gNCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIERNQTFfU3RyZWFtNV9JUlFuICAgICAgICAgICA9IDE2LCAgICAgLyohPCBETUExIFN0cmVhbSA1IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMV9TdHJlYW02X0lSUW4gICAgICAgICAgID0gMTcsICAgICAvKiE8IERNQTEgU3RyZWFtIDYgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBBRENfSVJRbiAgICAgICAgICAgICAgICAgICAgPSAxOCwgICAgIC8qITwgQURDMSwgQURDMiBhbmQgQURDMyBnbG9iYWwgSW50ZXJydXB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENBTjFfVFhfSVJRbiAgICAgICAgICAgICAgICA9IDE5LCAgICAgLyohPCBDQU4xIFRYIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgQ0FOMV9SWDBfSVJRbiAgICAgICAgICAgICAgID0gMjAsICAgICAvKiE8IENBTjEgUlgwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDQU4xX1JYMV9JUlFuICAgICAgICAgICAgICAgPSAyMSwgICAgIC8qITwgQ0FOMSBSWDEgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENBTjFfU0NFX0lSUW4gICAgICAgICAgICAgICA9IDIyLCAgICAgLyohPCBDQU4xIFNDRSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRVhUSTlfNV9JUlFuICAgICAgICAgICAgICAgID0gMjMsICAgICAvKiE8IEV4dGVybmFsIExpbmVbOTo1XSBJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU0xX0JSS19USU05X0lSUW4gICAgICAgICAgPSAyNCwgICAgIC8qITwgVElNMSBCcmVhayBpbnRlcnJ1cHQgYW5kIFRJTTkgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTTFfVVBfVElNMTBfSVJRbiAgICAgICAgICA9IDI1LCAgICAgLyohPCBUSU0xIFVwZGF0ZSBJbnRlcnJ1cHQgYW5kIFRJTTEwIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAqLw0KKyAgVElNMV9UUkdfQ09NX1RJTTExX0lSUW4gICAgID0gMjYsICAgICAvKiE8IFRJTTEgVHJpZ2dlciBhbmQgQ29tbXV0YXRpb24gSW50ZXJydXB0IGFuZCBUSU0xMSBnbG9iYWwgaW50ZXJydXB0ICovDQorICBUSU0xX0NDX0lSUW4gICAgICAgICAgICAgICAgPSAyNywgICAgIC8qITwgVElNMSBDYXB0dXJlIENvbXBhcmUgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFRJTTJfSVJRbiAgICAgICAgICAgICAgICAgICA9IDI4LCAgICAgLyohPCBUSU0yIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVElNM19JUlFuICAgICAgICAgICAgICAgICAgID0gMjksICAgICAvKiE8IFRJTTMgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU00X0lSUW4gICAgICAgICAgICAgICAgICAgPSAzMCwgICAgIC8qITwgVElNNCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEkyQzFfRVZfSVJRbiAgICAgICAgICAgICAgICA9IDMxLCAgICAgLyohPCBJMkMxIEV2ZW50IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgSTJDMV9FUl9JUlFuICAgICAgICAgICAgICAgID0gMzIsICAgICAvKiE8IEkyQzEgRXJyb3IgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBJMkMyX0VWX0lSUW4gICAgICAgICAgICAgICAgPSAzMywgICAgIC8qITwgSTJDMiBFdmVudCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEkyQzJfRVJfSVJRbiAgICAgICAgICAgICAgICA9IDM0LCAgICAgLyohPCBJMkMyIEVycm9yIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAgDQorICBTUEkxX0lSUW4gICAgICAgICAgICAgICAgICAgPSAzNSwgICAgIC8qITwgU1BJMSBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNQSTJfSVJRbiAgICAgICAgICAgICAgICAgICA9IDM2LCAgICAgLyohPCBTUEkyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVVNBUlQxX0lSUW4gICAgICAgICAgICAgICAgID0gMzcsICAgICAvKiE8IFVTQVJUMSBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBVU0FSVDJfSVJRbiAgICAgICAgICAgICAgICAgPSAzOCwgICAgIC8qITwgVVNBUlQyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVTQVJUM19JUlFuICAgICAgICAgICAgICAgICA9IDM5LCAgICAgLyohPCBVU0FSVDMgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRVhUSTE1XzEwX0lSUW4gICAgICAgICAgICAgID0gNDAsICAgICAvKiE8IEV4dGVybmFsIExpbmVbMTU6MTBdIEludGVycnVwdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBSVENfQWxhcm1fSVJRbiAgICAgICAgICAgICAgPSA0MSwgICAgIC8qITwgUlRDIEFsYXJtIChBIGFuZCBCKSB0aHJvdWdoIEVYVEkgTGluZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgKi8NCisgIE9UR19GU19XS1VQX0lSUW4gICAgICAgICAgICA9IDQyLCAgICAgLyohPCBVU0IgT1RHIEZTIFdha2V1cCB0aHJvdWdoIEVYVEkgbGluZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAqLyAgICANCisgIFRJTThfQlJLX1RJTTEyX0lSUW4gICAgICAgICA9IDQzLCAgICAgLyohPCBUSU04IEJyZWFrIEludGVycnVwdCBhbmQgVElNMTIgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAqLw0KKyAgVElNOF9VUF9USU0xM19JUlFuICAgICAgICAgID0gNDQsICAgICAvKiE8IFRJTTggVXBkYXRlIEludGVycnVwdCBhbmQgVElNMTMgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICovDQorICBUSU04X1RSR19DT01fVElNMTRfSVJRbiAgICAgPSA0NSwgICAgIC8qITwgVElNOCBUcmlnZ2VyIGFuZCBDb21tdXRhdGlvbiBJbnRlcnJ1cHQgYW5kIFRJTTE0IGdsb2JhbCBpbnRlcnJ1cHQgKi8NCisgIFRJTThfQ0NfSVJRbiAgICAgICAgICAgICAgICA9IDQ2LCAgICAgLyohPCBUSU04IENhcHR1cmUgQ29tcGFyZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMV9TdHJlYW03X0lSUW4gICAgICAgICAgID0gNDcsICAgICAvKiE8IERNQTEgU3RyZWFtNyBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBGU01DX0lSUW4gICAgICAgICAgICAgICAgICAgPSA0OCwgICAgIC8qITwgRlNNQyBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFNESU9fSVJRbiAgICAgICAgICAgICAgICAgICA9IDQ5LCAgICAgLyohPCBTRElPIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVElNNV9JUlFuICAgICAgICAgICAgICAgICAgID0gNTAsICAgICAvKiE8IFRJTTUgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBTUEkzX0lSUW4gICAgICAgICAgICAgICAgICAgPSA1MSwgICAgIC8qITwgU1BJMyBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIFVBUlQ0X0lSUW4gICAgICAgICAgICAgICAgICA9IDUyLCAgICAgLyohPCBVQVJUNCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVUFSVDVfSVJRbiAgICAgICAgICAgICAgICAgID0gNTMsICAgICAvKiE8IFVBUlQ1IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBUSU02X0RBQ19JUlFuICAgICAgICAgICAgICAgPSA1NCwgICAgIC8qITwgVElNNiBnbG9iYWwgYW5kIERBQzEmMiB1bmRlcnJ1biBlcnJvciAgaW50ZXJydXB0cyAgICAgICAgICAgICAgICAgKi8NCisgIFRJTTdfSVJRbiAgICAgICAgICAgICAgICAgICA9IDU1LCAgICAgLyohPCBUSU03IGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMl9TdHJlYW0wX0lSUW4gICAgICAgICAgID0gNTYsICAgICAvKiE8IERNQTIgU3RyZWFtIDAgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBETUEyX1N0cmVhbTFfSVJRbiAgICAgICAgICAgPSA1NywgICAgIC8qITwgRE1BMiBTdHJlYW0gMSBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIERNQTJfU3RyZWFtMl9JUlFuICAgICAgICAgICA9IDU4LCAgICAgLyohPCBETUEyIFN0cmVhbSAyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMl9TdHJlYW0zX0lSUW4gICAgICAgICAgID0gNTksICAgICAvKiE8IERNQTIgU3RyZWFtIDMgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBETUEyX1N0cmVhbTRfSVJRbiAgICAgICAgICAgPSA2MCwgICAgIC8qITwgRE1BMiBTdHJlYW0gNCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEVUSF9JUlFuICAgICAgICAgICAgICAgICAgICA9IDYxLCAgICAgLyohPCBFdGhlcm5ldCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRVRIX1dLVVBfSVJRbiAgICAgICAgICAgICAgID0gNjIsICAgICAvKiE8IEV0aGVybmV0IFdha2V1cCB0aHJvdWdoIEVYVEkgbGluZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDQU4yX1RYX0lSUW4gICAgICAgICAgICAgICAgPSA2MywgICAgIC8qITwgQ0FOMiBUWCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENBTjJfUlgwX0lSUW4gICAgICAgICAgICAgICA9IDY0LCAgICAgLyohPCBDQU4yIFJYMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgQ0FOMl9SWDFfSVJRbiAgICAgICAgICAgICAgID0gNjUsICAgICAvKiE8IENBTjIgUlgxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDQU4yX1NDRV9JUlFuICAgICAgICAgICAgICAgPSA2NiwgICAgIC8qITwgQ0FOMiBTQ0UgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE9UR19GU19JUlFuICAgICAgICAgICAgICAgICA9IDY3LCAgICAgLyohPCBVU0IgT1RHIEZTIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRE1BMl9TdHJlYW01X0lSUW4gICAgICAgICAgID0gNjgsICAgICAvKiE8IERNQTIgU3RyZWFtIDUgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBETUEyX1N0cmVhbTZfSVJRbiAgICAgICAgICAgPSA2OSwgICAgIC8qITwgRE1BMiBTdHJlYW0gNiBnbG9iYWwgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIERNQTJfU3RyZWFtN19JUlFuICAgICAgICAgICA9IDcwLCAgICAgLyohPCBETUEyIFN0cmVhbSA3IGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgVVNBUlQ2X0lSUW4gICAgICAgICAgICAgICAgID0gNzEsICAgICAvKiE8IFVTQVJUNiBnbG9iYWwgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIA0KKyAgSTJDM19FVl9JUlFuICAgICAgICAgICAgICAgID0gNzIsICAgICAvKiE8IEkyQzMgZXZlbnQgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBJMkMzX0VSX0lSUW4gICAgICAgICAgICAgICAgPSA3MywgICAgIC8qITwgSTJDMyBlcnJvciBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE9UR19IU19FUDFfT1VUX0lSUW4gICAgICAgICA9IDc0LCAgICAgLyohPCBVU0IgT1RHIEhTIEVuZCBQb2ludCAxIE91dCBnbG9iYWwgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgT1RHX0hTX0VQMV9JTl9JUlFuICAgICAgICAgID0gNzUsICAgICAvKiE8IFVTQiBPVEcgSFMgRW5kIFBvaW50IDEgSW4gZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBPVEdfSFNfV0tVUF9JUlFuICAgICAgICAgICAgPSA3NiwgICAgIC8qITwgVVNCIE9URyBIUyBXYWtldXAgdGhyb3VnaCBFWFRJIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIE9UR19IU19JUlFuICAgICAgICAgICAgICAgICA9IDc3LCAgICAgLyohPCBVU0IgT1RHIEhTIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgRENNSV9JUlFuICAgICAgICAgICAgICAgICAgID0gNzgsICAgICAvKiE8IERDTUkgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBDUllQX0lSUW4gICAgICAgICAgICAgICAgICAgPSA3OSwgICAgIC8qITwgQ1JZUCBjcnlwdG8gZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIEhBU0hfUk5HX0lSUW4gICAgICAgICAgICAgICA9IDgwICAgICAgLyohPCBIYXNoIGFuZCBSbmcgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gSVJRbl9UeXBlOw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisjaWYgQVJNX0NQVV9DT1JURVhfTTMNCisjaW5jbHVkZSAiY29yZV9jbTMuaCINCisjZWxpZiBBUk1fQ1BVX0NPUlRFWF9NNA0KKyNpbmNsdWRlICJjb3JlX2NtNC5oIg0KKyNlbmRpZg0KKyNpbmNsdWRlICJzeXN0ZW1fc3RtMzJmMnh4LmgiDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KKy8qIENBIC0gUXVpZXRpbmcgdGhlIHBlcmlwaCBsaWIgYnVpbGQgKi8NCisjZGVmaW5lIGFzc2VydF9wYXJhbSh4KQ0KKy8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF90eXBlcw0KKyAgKiBAew0KKyAgKi8gIA0KKy8qITwgU1RNMzJGMTB4IFN0YW5kYXJkIFBlcmlwaGVyYWwgTGlicmFyeSBvbGQgdHlwZXMgKG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlKSAqLw0KK3R5cGVkZWYgaW50MzJfdCAgczMyOw0KK3R5cGVkZWYgaW50MTZfdCBzMTY7DQordHlwZWRlZiBpbnQ4X3QgIHM4Ow0KKw0KK3R5cGVkZWYgY29uc3QgaW50MzJfdCBzYzMyOyAgLyohPCBSZWFkIE9ubHkgKi8NCit0eXBlZGVmIGNvbnN0IGludDE2X3Qgc2MxNjsgIC8qITwgUmVhZCBPbmx5ICovDQordHlwZWRlZiBjb25zdCBpbnQ4X3Qgc2M4OyAgIC8qITwgUmVhZCBPbmx5ICovDQorDQordHlwZWRlZiBfX0lPIGludDMyX3QgIHZzMzI7DQordHlwZWRlZiBfX0lPIGludDE2X3QgIHZzMTY7DQordHlwZWRlZiBfX0lPIGludDhfdCAgIHZzODsNCisNCit0eXBlZGVmIF9fSSBpbnQzMl90IHZzYzMyOyAgLyohPCBSZWFkIE9ubHkgKi8NCit0eXBlZGVmIF9fSSBpbnQxNl90IHZzYzE2OyAgLyohPCBSZWFkIE9ubHkgKi8NCit0eXBlZGVmIF9fSSBpbnQ4X3QgdnNjODsgICAvKiE8IFJlYWQgT25seSAqLw0KKw0KK3R5cGVkZWYgdWludDMyX3QgIHUzMjsNCit0eXBlZGVmIHVpbnQxNl90IHUxNjsNCit0eXBlZGVmIHVpbnQ4X3QgIHU4Ow0KKw0KK3R5cGVkZWYgY29uc3QgdWludDMyX3QgdWMzMjsgIC8qITwgUmVhZCBPbmx5ICovDQordHlwZWRlZiBjb25zdCB1aW50MTZfdCB1YzE2OyAgLyohPCBSZWFkIE9ubHkgKi8NCit0eXBlZGVmIGNvbnN0IHVpbnQ4X3QgdWM4OyAgIC8qITwgUmVhZCBPbmx5ICovDQorDQordHlwZWRlZiBfX0lPIHVpbnQzMl90ICB2dTMyOw0KK3R5cGVkZWYgX19JTyB1aW50MTZfdCB2dTE2Ow0KK3R5cGVkZWYgX19JTyB1aW50OF90ICB2dTg7DQorDQordHlwZWRlZiBfX0kgdWludDMyX3QgdnVjMzI7ICAvKiE8IFJlYWQgT25seSAqLw0KK3R5cGVkZWYgX19JIHVpbnQxNl90IHZ1YzE2OyAgLyohPCBSZWFkIE9ubHkgKi8NCit0eXBlZGVmIF9fSSB1aW50OF90IHZ1Yzg7ICAgLyohPCBSZWFkIE9ubHkgKi8NCisNCit0eXBlZGVmIGVudW0ge1JFU0VUID0gMCwgU0VUID0gIVJFU0VUfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsNCisNCit0eXBlZGVmIGVudW0ge0RJU0FCTEUgPSAwLCBFTkFCTEUgPSAhRElTQUJMRX0gRnVuY3Rpb25hbFN0YXRlOw0KKyNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpDQorDQordHlwZWRlZiBlbnVtIHtFUlJPUiA9IDAsIFNVQ0NFU1MgPSAhRVJST1J9IEVycm9yU3RhdHVzOw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgUGVyaXBoZXJhbF9yZWdpc3RlcnNfc3RydWN0dXJlcw0KKyAgKiBAew0KKyAgKi8gICANCisNCisvKiogDQorICAqIEBicmllZiBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgIA0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgU1I7ICAgICAvKiE8IEFEQyBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IENSMTsgICAgLyohPCBBREMgY29udHJvbCByZWdpc3RlciAxLCAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAqLyAgICAgIA0KKyAgX19JTyB1aW50MzJfdCBDUjI7ICAgIC8qITwgQURDIGNvbnRyb2wgcmVnaXN0ZXIgMiwgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDggKi8NCisgIF9fSU8gdWludDMyX3QgU01QUjE7ICAvKiE8IEFEQyBzYW1wbGUgdGltZSByZWdpc3RlciAxLCAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorICBfX0lPIHVpbnQzMl90IFNNUFIyOyAgLyohPCBBREMgc2FtcGxlIHRpbWUgcmVnaXN0ZXIgMiwgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxMCAqLw0KKyAgX19JTyB1aW50MzJfdCBKT0ZSMTsgIC8qITwgQURDIGluamVjdGVkIGNoYW5uZWwgZGF0YSBvZmZzZXQgcmVnaXN0ZXIgMSwgQWRkcmVzcyBvZmZzZXQ6IDB4MTQgKi8NCisgIF9fSU8gdWludDMyX3QgSk9GUjI7ICAvKiE8IEFEQyBpbmplY3RlZCBjaGFubmVsIGRhdGEgb2Zmc2V0IHJlZ2lzdGVyIDIsIEFkZHJlc3Mgb2Zmc2V0OiAweDE4ICovDQorICBfX0lPIHVpbnQzMl90IEpPRlIzOyAgLyohPCBBREMgaW5qZWN0ZWQgY2hhbm5lbCBkYXRhIG9mZnNldCByZWdpc3RlciAzLCBBZGRyZXNzIG9mZnNldDogMHgxQyAqLw0KKyAgX19JTyB1aW50MzJfdCBKT0ZSNDsgIC8qITwgQURDIGluamVjdGVkIGNoYW5uZWwgZGF0YSBvZmZzZXQgcmVnaXN0ZXIgNCwgQWRkcmVzcyBvZmZzZXQ6IDB4MjAgKi8NCisgIF9fSU8gdWludDMyX3QgSFRSOyAgICAvKiE8IEFEQyB3YXRjaGRvZyBoaWdoZXIgdGhyZXNob2xkIHJlZ2lzdGVyLCAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI0ICovDQorICBfX0lPIHVpbnQzMl90IExUUjsgICAgLyohPCBBREMgd2F0Y2hkb2cgbG93ZXIgdGhyZXNob2xkIHJlZ2lzdGVyLCAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyOCAqLw0KKyAgX19JTyB1aW50MzJfdCBTUVIxOyAgIC8qITwgQURDIHJlZ3VsYXIgc2VxdWVuY2UgcmVnaXN0ZXIgMSwgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MkMgKi8NCisgIF9fSU8gdWludDMyX3QgU1FSMjsgICAvKiE8IEFEQyByZWd1bGFyIHNlcXVlbmNlIHJlZ2lzdGVyIDIsICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDMwICovDQorICBfX0lPIHVpbnQzMl90IFNRUjM7ICAgLyohPCBBREMgcmVndWxhciBzZXF1ZW5jZSByZWdpc3RlciAzLCAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgzNCAqLw0KKyAgX19JTyB1aW50MzJfdCBKU1FSOyAgIC8qITwgQURDIGluamVjdGVkIHNlcXVlbmNlIHJlZ2lzdGVyLCAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MzgqLw0KKyAgX19JTyB1aW50MzJfdCBKRFIxOyAgIC8qITwgQURDIGluamVjdGVkIGRhdGEgcmVnaXN0ZXIgMSwgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4M0MgKi8NCisgIF9fSU8gdWludDMyX3QgSkRSMjsgICAvKiE8IEFEQyBpbmplY3RlZCBkYXRhIHJlZ2lzdGVyIDIsICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDQwICovDQorICBfX0lPIHVpbnQzMl90IEpEUjM7ICAgLyohPCBBREMgaW5qZWN0ZWQgZGF0YSByZWdpc3RlciAzLCAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHg0NCAqLw0KKyAgX19JTyB1aW50MzJfdCBKRFI0OyAgIC8qITwgQURDIGluamVjdGVkIGRhdGEgcmVnaXN0ZXIgNCwgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4NDggKi8NCisgIF9fSU8gdWludDMyX3QgRFI7ICAgICAvKiE8IEFEQyByZWd1bGFyIGRhdGEgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDRDICovDQorfSBBRENfVHlwZURlZjsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgQ1NSOyAgICAvKiE8IEFEQyBDb21tb24gc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiBBREMxIGJhc2UgYWRkcmVzcyArIDB4MzAwICovDQorICBfX0lPIHVpbnQzMl90IENDUjsgICAgLyohPCBBREMgY29tbW9uIGNvbnRyb2wgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogQURDMSBiYXNlIGFkZHJlc3MgKyAweDMwNCAqLw0KKyAgX19JTyB1aW50MzJfdCBDRFI7ICAgIC8qITwgQURDIGNvbW1vbiByZWd1bGFyIGRhdGEgcmVnaXN0ZXIgZm9yIGR1YWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCB0cmlwbGUgbW9kZXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiBBREMxIGJhc2UgYWRkcmVzcyArIDB4MzA4ICovDQorfSBBRENfQ29tbW9uX1R5cGVEZWY7DQorDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgVHhNYWlsQm94IA0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgVElSOyAgLyohPCBDQU4gVFggbWFpbGJveCBpZGVudGlmaWVyIHJlZ2lzdGVyICovDQorICBfX0lPIHVpbnQzMl90IFREVFI7IC8qITwgQ0FOIG1haWxib3ggZGF0YSBsZW5ndGggY29udHJvbCBhbmQgdGltZSBzdGFtcCByZWdpc3RlciAqLw0KKyAgX19JTyB1aW50MzJfdCBURExSOyAvKiE8IENBTiBtYWlsYm94IGRhdGEgbG93IHJlZ2lzdGVyICovDQorICBfX0lPIHVpbnQzMl90IFRESFI7IC8qITwgQ0FOIG1haWxib3ggZGF0YSBoaWdoIHJlZ2lzdGVyICovDQorfSBDQU5fVHhNYWlsQm94X1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgRklGT01haWxCb3ggDQorICAqLw0KKyAgDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IFJJUjsgIC8qITwgQ0FOIHJlY2VpdmUgRklGTyBtYWlsYm94IGlkZW50aWZpZXIgcmVnaXN0ZXIgKi8NCisgIF9fSU8gdWludDMyX3QgUkRUUjsgLyohPCBDQU4gcmVjZWl2ZSBGSUZPIG1haWxib3ggZGF0YSBsZW5ndGggY29udHJvbCBhbmQgdGltZSBzdGFtcCByZWdpc3RlciAqLw0KKyAgX19JTyB1aW50MzJfdCBSRExSOyAvKiE8IENBTiByZWNlaXZlIEZJRk8gbWFpbGJveCBkYXRhIGxvdyByZWdpc3RlciAqLw0KKyAgX19JTyB1aW50MzJfdCBSREhSOyAvKiE8IENBTiByZWNlaXZlIEZJRk8gbWFpbGJveCBkYXRhIGhpZ2ggcmVnaXN0ZXIgKi8NCit9IENBTl9GSUZPTWFpbEJveF9UeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIEZpbHRlclJlZ2lzdGVyIA0KKyAgKi8NCisgIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBGUjE7IC8qITwgQ0FOIEZpbHRlciBiYW5rIHJlZ2lzdGVyIDEgKi8NCisgIF9fSU8gdWludDMyX3QgRlIyOyAvKiE8IENBTiBGaWx0ZXIgYmFuayByZWdpc3RlciAxICovDQorfSBDQU5fRmlsdGVyUmVnaXN0ZXJfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBDb250cm9sbGVyIEFyZWEgTmV0d29yayANCisgICovDQorICANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIE1DUjsgICAgICAgICAgICAgICAgIC8qITwgQ0FOIG1hc3RlciBjb250cm9sIHJlZ2lzdGVyLCAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBNU1I7ICAgICAgICAgICAgICAgICAvKiE8IENBTiBtYXN0ZXIgc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgVFNSOyAgICAgICAgICAgICAgICAgLyohPCBDQU4gdHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDggICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIFJGMFI7ICAgICAgICAgICAgICAgIC8qITwgQ0FOIHJlY2VpdmUgRklGTyAwIHJlZ2lzdGVyLCAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBSRjFSOyAgICAgICAgICAgICAgICAvKiE8IENBTiByZWNlaXZlIEZJRk8gMSByZWdpc3RlciwgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxMCAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgSUVSOyAgICAgICAgICAgICAgICAgLyohPCBDQU4gaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciwgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MTQgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIEVTUjsgICAgICAgICAgICAgICAgIC8qITwgQ0FOIGVycm9yIHN0YXR1cyByZWdpc3RlciwgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE4ICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBCVFI7ICAgICAgICAgICAgICAgICAvKiE8IENBTiBiaXQgdGltaW5nIHJlZ2lzdGVyLCAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxQyAgICAgICAgICAqLw0KKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgUkVTRVJWRUQwWzg4XTsgICAgICAgLyohPCBSZXNlcnZlZCwgMHgwMjAgLSAweDE3RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIENBTl9UeE1haWxCb3hfVHlwZURlZiAgICAgIHNUeE1haWxCb3hbM107ICAgICAgIC8qITwgQ0FOIFR4IE1haWxCb3gsICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE4MCAtIDB4MUFDICovDQorICBDQU5fRklGT01haWxCb3hfVHlwZURlZiAgICBzRklGT01haWxCb3hbMl07ICAgICAvKiE8IENBTiBGSUZPIE1haWxCb3gsICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxQjAgLSAweDFDQyAqLw0KKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgUkVTRVJWRUQxWzEyXTsgICAgICAgLyohPCBSZXNlcnZlZCwgMHgxRDAgLSAweDFGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIEZNUjsgICAgICAgICAgICAgICAgIC8qITwgQ0FOIGZpbHRlciBtYXN0ZXIgcmVnaXN0ZXIsICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDIwMCAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBGTTFSOyAgICAgICAgICAgICAgICAvKiE8IENBTiBmaWx0ZXIgbW9kZSByZWdpc3RlciwgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyMDQgICAgICAgICAqLw0KKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgUkVTRVJWRUQyOyAgICAgICAgICAgLyohPCBSZXNlcnZlZCwgMHgyMDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIEZTMVI7ICAgICAgICAgICAgICAgIC8qITwgQ0FOIGZpbHRlciBzY2FsZSByZWdpc3RlciwgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDIwQyAgICAgICAgICovDQorICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICBSRVNFUlZFRDM7ICAgICAgICAgICAvKiE8IFJlc2VydmVkLCAweDIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgRkZBMVI7ICAgICAgICAgICAgICAgLyohPCBDQU4gZmlsdGVyIEZJRk8gYXNzaWdubWVudCByZWdpc3RlciwgQWRkcmVzcyBvZmZzZXQ6IDB4MjE0ICAgICAgICAgKi8NCisgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgIFJFU0VSVkVENDsgICAgICAgICAgIC8qITwgUmVzZXJ2ZWQsIDB4MjE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBGQTFSOyAgICAgICAgICAgICAgICAvKiE8IENBTiBmaWx0ZXIgYWN0aXZhdGlvbiByZWdpc3RlciwgICAgICBBZGRyZXNzIG9mZnNldDogMHgyMUMgICAgICAgICAqLw0KKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgUkVTRVJWRUQ1WzhdOyAgICAgICAgLyohPCBSZXNlcnZlZCwgMHgyMjAtMHgyM0YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gDQorICBDQU5fRmlsdGVyUmVnaXN0ZXJfVHlwZURlZiBzRmlsdGVyUmVnaXN0ZXJbMjhdOyAvKiE8IENBTiBGaWx0ZXIgUmVnaXN0ZXIsICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyNDAtMHgzMUMgICAqLw0KK30gQ0FOX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgQ1JDIGNhbGN1bGF0aW9uIHVuaXQgDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBEUjsgICAgICAgICAvKiE8IENSQyBEYXRhIHJlZ2lzdGVyLCAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgX19JTyB1aW50OF90ICBJRFI7ICAgICAgICAvKiE8IENSQyBJbmRlcGVuZGVudCBkYXRhIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KKyAgdWludDhfdCAgICAgICBSRVNFUlZFRDA7ICAvKiE8IFJlc2VydmVkLCAweDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDE7ICAvKiE8IFJlc2VydmVkLCAweDA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBDUjsgICAgICAgICAvKiE8IENSQyBDb250cm9sIHJlZ2lzdGVyLCAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KK30gQ1JDX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgRGlnaXRhbCB0byBBbmFsb2cgQ29udmVydGVyDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBDUjsgICAgICAgLyohPCBEQUMgY29udHJvbCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgX19JTyB1aW50MzJfdCBTV1RSSUdSOyAgLyohPCBEQUMgc29mdHdhcmUgdHJpZ2dlciByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFIxMlIxOyAgLyohPCBEQUMgY2hhbm5lbDEgMTItYml0IHJpZ2h0LWFsaWduZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFIxMkwxOyAgLyohPCBEQUMgY2hhbm5lbDEgMTItYml0IGxlZnQgYWxpZ25lZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIsICBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KKyAgX19JTyB1aW50MzJfdCBESFI4UjE7ICAgLyohPCBEQUMgY2hhbm5lbDEgOC1iaXQgcmlnaHQgYWxpZ25lZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIsICBBZGRyZXNzIG9mZnNldDogMHgxMCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFIxMlIyOyAgLyohPCBEQUMgY2hhbm5lbDIgMTItYml0IHJpZ2h0IGFsaWduZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgxNCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFIxMkwyOyAgLyohPCBEQUMgY2hhbm5lbDIgMTItYml0IGxlZnQgYWxpZ25lZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIsICBBZGRyZXNzIG9mZnNldDogMHgxOCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFI4UjI7ICAgLyohPCBEQUMgY2hhbm5lbDIgOC1iaXQgcmlnaHQtYWxpZ25lZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIsICBBZGRyZXNzIG9mZnNldDogMHgxQyAqLw0KKyAgX19JTyB1aW50MzJfdCBESFIxMlJEOyAgLyohPCBEdWFsIERBQyAxMi1iaXQgcmlnaHQtYWxpZ25lZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIsICAgICBBZGRyZXNzIG9mZnNldDogMHgyMCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFIxMkxEOyAgLyohPCBEVUFMIERBQyAxMi1iaXQgbGVmdCBhbGlnbmVkIGRhdGEgaG9sZGluZyByZWdpc3RlciwgICAgICBBZGRyZXNzIG9mZnNldDogMHgyNCAqLw0KKyAgX19JTyB1aW50MzJfdCBESFI4UkQ7ICAgLyohPCBEVUFMIERBQyA4LWJpdCByaWdodCBhbGlnbmVkIGRhdGEgaG9sZGluZyByZWdpc3RlciwgICAgICBBZGRyZXNzIG9mZnNldDogMHgyOCAqLw0KKyAgX19JTyB1aW50MzJfdCBET1IxOyAgICAgLyohPCBEQUMgY2hhbm5lbDEgZGF0YSBvdXRwdXQgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyQyAqLw0KKyAgX19JTyB1aW50MzJfdCBET1IyOyAgICAgLyohPCBEQUMgY2hhbm5lbDIgZGF0YSBvdXRwdXQgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgzMCAqLw0KKyAgX19JTyB1aW50MzJfdCBTUjsgICAgICAgLyohPCBEQUMgc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgzNCAqLw0KK30gREFDX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgRGVidWcgTUNVDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBJRENPREU7ICAvKiE8IE1DVSBkZXZpY2UgSUQgY29kZSwgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgX19JTyB1aW50MzJfdCBDUjsgICAgICAvKiE8IERlYnVnIE1DVSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KKyAgX19JTyB1aW50MzJfdCBBUEIxRlo7ICAvKiE8IERlYnVnIE1DVSBBUEIxIGZyZWV6ZSByZWdpc3RlciwgICBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KKyAgX19JTyB1aW50MzJfdCBBUEIyRlo7ICAvKiE8IERlYnVnIE1DVSBBUEIyIGZyZWV6ZSByZWdpc3RlciwgICBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KK31EQkdNQ1VfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBEQ01JDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBDUjsgICAgICAgLyohPCBEQ01JIGNvbnRyb2wgcmVnaXN0ZXIgMSwgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IFNSOyAgICAgICAvKiE8IERDTUkgc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDQgKi8NCisgIF9fSU8gdWludDMyX3QgUklTUjsgICAgIC8qITwgRENNSSByYXcgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KKyAgX19JTyB1aW50MzJfdCBJRVI7ICAgICAgLyohPCBEQ01JIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIsICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorICBfX0lPIHVpbnQzMl90IE1JU1I7ICAgICAvKiE8IERDTUkgbWFza2VkIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MTAgKi8NCisgIF9fSU8gdWludDMyX3QgSUNSOyAgICAgIC8qITwgRENNSSBpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxNCAqLw0KKyAgX19JTyB1aW50MzJfdCBFU0NSOyAgICAgLyohPCBEQ01JIGVtYmVkZGVkIHN5bmNocm9uaXphdGlvbiBjb2RlIHJlZ2lzdGVyLCAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE4ICovDQorICBfX0lPIHVpbnQzMl90IEVTVVI7ICAgICAvKiE8IERDTUkgZW1iZWRkZWQgc3luY2hyb25pemF0aW9uIHVubWFzayByZWdpc3RlciwgQWRkcmVzcyBvZmZzZXQ6IDB4MUMgKi8NCisgIF9fSU8gdWludDMyX3QgQ1dTVFJUUjsgIC8qITwgRENNSSBjcm9wIHdpbmRvdyBzdGFydCwgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyMCAqLw0KKyAgX19JTyB1aW50MzJfdCBDV1NJWkVSOyAgLyohPCBEQ01JIGNyb3Agd2luZG93IHNpemUsICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI0ICovDQorICBfX0lPIHVpbnQzMl90IERSOyAgICAgICAvKiE8IERDTUkgZGF0YSByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MjggKi8NCit9IERDTUlfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBETUEgQ29udHJvbGxlcg0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgQ1I7ICAgICAvKiE8IERNQSBzdHJlYW0geCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgTkRUUjsgICAvKiE8IERNQSBzdHJlYW0geCBudW1iZXIgb2YgZGF0YSByZWdpc3RlciAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgUEFSOyAgICAvKiE8IERNQSBzdHJlYW0geCBwZXJpcGhlcmFsIGFkZHJlc3MgcmVnaXN0ZXIgKi8NCisgIF9fSU8gdWludDMyX3QgTTBBUjsgICAvKiE8IERNQSBzdHJlYW0geCBtZW1vcnkgMCBhZGRyZXNzIHJlZ2lzdGVyICAgKi8NCisgIF9fSU8gdWludDMyX3QgTTFBUjsgICAvKiE8IERNQSBzdHJlYW0geCBtZW1vcnkgMSBhZGRyZXNzIHJlZ2lzdGVyICAgKi8NCisgIF9fSU8gdWludDMyX3QgRkNSOyAgICAvKiE8IERNQSBzdHJlYW0geCBGSUZPIGNvbnRyb2wgcmVnaXN0ZXIgICAgICAgKi8NCit9IERNQV9TdHJlYW1fVHlwZURlZjsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgTElTUjsgICAvKiE8IERNQSBsb3cgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwgICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgX19JTyB1aW50MzJfdCBISVNSOyAgIC8qITwgRE1BIGhpZ2ggaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciwgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IExJRkNSOyAgLyohPCBETUEgbG93IGludGVycnVwdCBmbGFnIGNsZWFyIHJlZ2lzdGVyLCAgQWRkcmVzcyBvZmZzZXQ6IDB4MDggKi8NCisgIF9fSU8gdWludDMyX3QgSElGQ1I7ICAvKiE8IERNQSBoaWdoIGludGVycnVwdCBmbGFnIGNsZWFyIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KK30gRE1BX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgRXRoZXJuZXQgTUFDDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBNQUNDUjsNCisgIF9fSU8gdWludDMyX3QgTUFDRkZSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNIVEhSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNIVExSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNNSUlBUjsNCisgIF9fSU8gdWludDMyX3QgTUFDTUlJRFI7DQorICBfX0lPIHVpbnQzMl90IE1BQ0ZDUjsNCisgIF9fSU8gdWludDMyX3QgTUFDVkxBTlRSOyAgICAgICAgICAgICAvKiAgICA4ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVEMFsyXTsNCisgIF9fSU8gdWludDMyX3QgTUFDUldVRkZSOyAgICAgICAgICAgICAvKiAgIDExICovDQorICBfX0lPIHVpbnQzMl90IE1BQ1BNVENTUjsNCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQxWzJdOw0KKyAgX19JTyB1aW50MzJfdCBNQUNTUjsgICAgICAgICAgICAgICAgIC8qICAgMTUgKi8NCisgIF9fSU8gdWludDMyX3QgTUFDSU1SOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBMEhSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBMExSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBMUhSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBMUxSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBMkhSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBMkxSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBM0hSOw0KKyAgX19JTyB1aW50MzJfdCBNQUNBM0xSOyAgICAgICAgICAgICAgIC8qICAgMjQgKi8NCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQyWzQwXTsNCisgIF9fSU8gdWludDMyX3QgTU1DQ1I7ICAgICAgICAgICAgICAgICAvKiAgIDY1ICovDQorICBfX0lPIHVpbnQzMl90IE1NQ1JJUjsNCisgIF9fSU8gdWludDMyX3QgTU1DVElSOw0KKyAgX19JTyB1aW50MzJfdCBNTUNSSU1SOw0KKyAgX19JTyB1aW50MzJfdCBNTUNUSU1SOyAgICAgICAgICAgICAgIC8qICAgNjkgKi8NCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQzWzE0XTsNCisgIF9fSU8gdWludDMyX3QgTU1DVEdGU0NDUjsgICAgICAgICAgICAvKiAgIDg0ICovDQorICBfX0lPIHVpbnQzMl90IE1NQ1RHRk1TQ0NSOw0KKyAgdWludDMyX3QgICAgICBSRVNFUlZFRDRbNV07DQorICBfX0lPIHVpbnQzMl90IE1NQ1RHRkNSOw0KKyAgdWludDMyX3QgICAgICBSRVNFUlZFRDVbMTBdOw0KKyAgX19JTyB1aW50MzJfdCBNTUNSRkNFQ1I7DQorICBfX0lPIHVpbnQzMl90IE1NQ1JGQUVDUjsNCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQ2WzEwXTsNCisgIF9fSU8gdWludDMyX3QgTU1DUkdVRkNSOw0KKyAgdWludDMyX3QgICAgICBSRVNFUlZFRDdbMzM0XTsNCisgIF9fSU8gdWludDMyX3QgUFRQVFNDUjsNCisgIF9fSU8gdWludDMyX3QgUFRQU1NJUjsNCisgIF9fSU8gdWludDMyX3QgUFRQVFNIUjsNCisgIF9fSU8gdWludDMyX3QgUFRQVFNMUjsNCisgIF9fSU8gdWludDMyX3QgUFRQVFNIVVI7DQorICBfX0lPIHVpbnQzMl90IFBUUFRTTFVSOw0KKyAgX19JTyB1aW50MzJfdCBQVFBUU0FSOw0KKyAgX19JTyB1aW50MzJfdCBQVFBUVEhSOw0KKyAgX19JTyB1aW50MzJfdCBQVFBUVExSOw0KKyAgX19JTyB1aW50MzJfdCBSRVNFUlZFRDg7DQorICBfX0lPIHVpbnQzMl90IFBUUFRTU1I7ICAvKiBhZGRlZCBmb3IgU1RNMzJGMnh4ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVEOVs1NjVdOw0KKyAgX19JTyB1aW50MzJfdCBETUFCTVI7DQorICBfX0lPIHVpbnQzMl90IERNQVRQRFI7DQorICBfX0lPIHVpbnQzMl90IERNQVJQRFI7DQorICBfX0lPIHVpbnQzMl90IERNQVJETEFSOw0KKyAgX19JTyB1aW50MzJfdCBETUFURExBUjsNCisgIF9fSU8gdWludDMyX3QgRE1BU1I7DQorICBfX0lPIHVpbnQzMl90IERNQU9NUjsNCisgIF9fSU8gdWludDMyX3QgRE1BSUVSOw0KKyAgX19JTyB1aW50MzJfdCBETUFNRkJPQ1I7DQorICBfX0lPIHVpbnQzMl90IERNQVJTV1RSOyAgLyogYWRkZWQgZm9yIFNUTTMyRjJ4eCAqLw0KKyAgdWludDMyX3QgICAgICBSRVNFUlZFRDEwWzhdOw0KKyAgX19JTyB1aW50MzJfdCBETUFDSFREUjsNCisgIF9fSU8gdWludDMyX3QgRE1BQ0hSRFI7DQorICBfX0lPIHVpbnQzMl90IERNQUNIVEJBUjsNCisgIF9fSU8gdWludDMyX3QgRE1BQ0hSQkFSOw0KK30gRVRIX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgRXh0ZXJuYWwgSW50ZXJydXB0L0V2ZW50IENvbnRyb2xsZXINCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IElNUjsgICAgLyohPCBFWFRJIEludGVycnVwdCBtYXNrIHJlZ2lzdGVyLCAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IEVNUjsgICAgLyohPCBFWFRJIEV2ZW50IG1hc2sgcmVnaXN0ZXIsICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IFJUU1I7ICAgLyohPCBFWFRJIFJpc2luZyB0cmlnZ2VyIHNlbGVjdGlvbiByZWdpc3RlciwgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICovDQorICBfX0lPIHVpbnQzMl90IEZUU1I7ICAgLyohPCBFWFRJIEZhbGxpbmcgdHJpZ2dlciBzZWxlY3Rpb24gcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorICBfX0lPIHVpbnQzMl90IFNXSUVSOyAgLyohPCBFWFRJIFNvZnR3YXJlIGludGVycnVwdCBldmVudCByZWdpc3RlciwgIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICBfX0lPIHVpbnQzMl90IFBSOyAgICAgLyohPCBFWFRJIFBlbmRpbmcgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE0ICovDQorfSBFWFRJX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgRkxBU0ggUmVnaXN0ZXJzDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBBQ1I7ICAgICAgLyohPCBGTEFTSCBhY2Nlc3MgY29udHJvbCByZWdpc3RlciwgQWRkcmVzcyBvZmZzZXQ6IDB4MDAgKi8NCisgIF9fSU8gdWludDMyX3QgS0VZUjsgICAgIC8qITwgRkxBU0gga2V5IHJlZ2lzdGVyLCAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IE9QVEtFWVI7ICAvKiE8IEZMQVNIIG9wdGlvbiBrZXkgcmVnaXN0ZXIsICAgICBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KKyAgX19JTyB1aW50MzJfdCBTUjsgICAgICAgLyohPCBGTEFTSCBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MEMgKi8NCisgIF9fSU8gdWludDMyX3QgQ1I7ICAgICAgIC8qITwgRkxBU0ggY29udHJvbCByZWdpc3RlciwgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICBfX0lPIHVpbnQzMl90IE9QVENSOyAgICAvKiE8IEZMQVNIIG9wdGlvbiBjb250cm9sIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgxNCAqLw0KK30gRkxBU0hfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBGbGV4aWJsZSBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXINCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IEJUQ1JbOF07ICAgIC8qITwgTk9SL1BTUkFNIGNoaXAtc2VsZWN0IGNvbnRyb2wgcmVnaXN0ZXIoQkNSKSBhbmQgY2hpcC1zZWxlY3QgdGltaW5nIHJlZ2lzdGVyKEJUUiksIEFkZHJlc3Mgb2Zmc2V0OiAweDAwLTFDICovICAgDQorfSBGU01DX0JhbmsxX1R5cGVEZWY7IA0KKw0KKy8qKiANCisgICogQGJyaWVmIEZsZXhpYmxlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBCYW5rMUUNCisgICovDQorICANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgQldUUls3XTsgICAgLyohPCBOT1IvUFNSQU0gd3JpdGUgdGltaW5nIHJlZ2lzdGVycywgQWRkcmVzcyBvZmZzZXQ6IDB4MTA0LTB4MTFDICovDQorfSBGU01DX0JhbmsxRV9UeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmIEZsZXhpYmxlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBCYW5rMg0KKyAgKi8NCisgIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBQQ1IyOyAgICAgICAvKiE8IE5BTkQgRmxhc2ggY29udHJvbCByZWdpc3RlciAyLCAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4NjAgKi8NCisgIF9fSU8gdWludDMyX3QgU1IyOyAgICAgICAgLyohPCBOQU5EIEZsYXNoIEZJRk8gc3RhdHVzIGFuZCBpbnRlcnJ1cHQgcmVnaXN0ZXIgMiwgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDY0ICovDQorICBfX0lPIHVpbnQzMl90IFBNRU0yOyAgICAgIC8qITwgTkFORCBGbGFzaCBDb21tb24gbWVtb3J5IHNwYWNlIHRpbWluZyByZWdpc3RlciAyLCAgICBBZGRyZXNzIG9mZnNldDogMHg2OCAqLw0KKyAgX19JTyB1aW50MzJfdCBQQVRUMjsgICAgICAvKiE8IE5BTkQgRmxhc2ggQXR0cmlidXRlIG1lbW9yeSBzcGFjZSB0aW1pbmcgcmVnaXN0ZXIgMiwgQWRkcmVzcyBvZmZzZXQ6IDB4NkMgKi8NCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQwOyAgLyohPCBSZXNlcnZlZCwgMHg3MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEVDQ1IyOyAgICAgIC8qITwgTkFORCBGbGFzaCBFQ0MgcmVzdWx0IHJlZ2lzdGVycyAyLCAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHg3NCAqLw0KK30gRlNNQ19CYW5rMl9UeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmIEZsZXhpYmxlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBCYW5rMw0KKyAgKi8NCisgIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBQQ1IzOyAgICAgICAvKiE8IE5BTkQgRmxhc2ggY29udHJvbCByZWdpc3RlciAzLCAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4ODAgKi8NCisgIF9fSU8gdWludDMyX3QgU1IzOyAgICAgICAgLyohPCBOQU5EIEZsYXNoIEZJRk8gc3RhdHVzIGFuZCBpbnRlcnJ1cHQgcmVnaXN0ZXIgMywgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDg0ICovDQorICBfX0lPIHVpbnQzMl90IFBNRU0zOyAgICAgIC8qITwgTkFORCBGbGFzaCBDb21tb24gbWVtb3J5IHNwYWNlIHRpbWluZyByZWdpc3RlciAzLCAgICBBZGRyZXNzIG9mZnNldDogMHg4OCAqLw0KKyAgX19JTyB1aW50MzJfdCBQQVRUMzsgICAgICAvKiE8IE5BTkQgRmxhc2ggQXR0cmlidXRlIG1lbW9yeSBzcGFjZSB0aW1pbmcgcmVnaXN0ZXIgMywgQWRkcmVzcyBvZmZzZXQ6IDB4OEMgKi8NCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQwOyAgLyohPCBSZXNlcnZlZCwgMHg5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEVDQ1IzOyAgICAgIC8qITwgTkFORCBGbGFzaCBFQ0MgcmVzdWx0IHJlZ2lzdGVycyAzLCAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHg5NCAqLw0KK30gRlNNQ19CYW5rM19UeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmIEZsZXhpYmxlIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciBCYW5rNA0KKyAgKi8NCisgIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBQQ1I0OyAgICAgICAvKiE8IFBDIENhcmQgIGNvbnRyb2wgcmVnaXN0ZXIgNCwgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweEEwICovDQorICBfX0lPIHVpbnQzMl90IFNSNDsgICAgICAgIC8qITwgUEMgQ2FyZCAgRklGTyBzdGF0dXMgYW5kIGludGVycnVwdCByZWdpc3RlciA0LCAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4QTQgKi8NCisgIF9fSU8gdWludDMyX3QgUE1FTTQ7ICAgICAgLyohPCBQQyBDYXJkICBDb21tb24gbWVtb3J5IHNwYWNlIHRpbWluZyByZWdpc3RlciA0LCAgICBBZGRyZXNzIG9mZnNldDogMHhBOCAqLw0KKyAgX19JTyB1aW50MzJfdCBQQVRUNDsgICAgICAvKiE8IFBDIENhcmQgIEF0dHJpYnV0ZSBtZW1vcnkgc3BhY2UgdGltaW5nIHJlZ2lzdGVyIDQsIEFkZHJlc3Mgb2Zmc2V0OiAweEFDICovDQorICBfX0lPIHVpbnQzMl90IFBJTzQ7ICAgICAgIC8qITwgUEMgQ2FyZCAgSS9PIHNwYWNlIHRpbWluZyByZWdpc3RlciA0LCAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4QjAgKi8NCit9IEZTTUNfQmFuazRfVHlwZURlZjsgDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgR2VuZXJhbCBQdXJwb3NlIEkvTw0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgTU9ERVI7ICAgIC8qITwgR1BJTyBwb3J0IG1vZGUgcmVnaXN0ZXIsICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBPVFlQRVI7ICAgLyohPCBHUElPIHBvcnQgb3V0cHV0IHR5cGUgcmVnaXN0ZXIsICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAgICAgICovDQorICBfX0lPIHVpbnQzMl90IE9TUEVFRFI7ICAvKiE8IEdQSU8gcG9ydCBvdXRwdXQgc3BlZWQgcmVnaXN0ZXIsICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgUFVQRFI7ICAgIC8qITwgR1BJTyBwb3J0IHB1bGwtdXAvcHVsbC1kb3duIHJlZ2lzdGVyLCAgQWRkcmVzcyBvZmZzZXQ6IDB4MEMgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBJRFI7ICAgICAgLyohPCBHUElPIHBvcnQgaW5wdXQgZGF0YSByZWdpc3RlciwgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxMCAgICAgICovDQorICBfX0lPIHVpbnQzMl90IE9EUjsgICAgICAvKiE8IEdQSU8gcG9ydCBvdXRwdXQgZGF0YSByZWdpc3RlciwgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE0ICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgQlNSUkw7ICAgIC8qITwgR1BJTyBwb3J0IGJpdCBzZXQvcmVzZXQgbG93IHJlZ2lzdGVyLCAgQWRkcmVzcyBvZmZzZXQ6IDB4MTggICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBCU1JSSDsgICAgLyohPCBHUElPIHBvcnQgYml0IHNldC9yZXNldCBoaWdoIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgxQSAgICAgICovDQorICBfX0lPIHVpbnQzMl90IExDS1I7ICAgICAvKiE8IEdQSU8gcG9ydCBjb25maWd1cmF0aW9uIGxvY2sgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDFDICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgQUZSWzJdOyAgIC8qITwgR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gcmVnaXN0ZXJzLCAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MjAtMHgyNCAqLw0KK30gR1BJT19UeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmIFN5c3RlbSBjb25maWd1cmF0aW9uIGNvbnRyb2xsZXINCisgICovDQorICANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgTUVNUk1QOyAgICAgICAvKiE8IFNZU0NGRyBtZW1vcnkgcmVtYXAgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgUE1DOyAgICAgICAgICAvKiE8IFNZU0NGRyBwZXJpcGhlcmFsIG1vZGUgY29uZmlndXJhdGlvbiByZWdpc3RlciwgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgRVhUSUNSWzRdOyAgICAvKiE8IFNZU0NGRyBleHRlcm5hbCBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIEFkZHJlc3Mgb2Zmc2V0OiAweDA4LTB4MTQgKi8NCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRURbMl07ICAvKiE8IFJlc2VydmVkLCAweDE4LTB4MUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gDQorICBfX0lPIHVpbnQzMl90IENNUENSOyAgICAgICAgLyohPCBTWVNDRkcgQ29tcGVuc2F0aW9uIGNlbGwgY29udHJvbCByZWdpc3RlciwgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyMCAgICAgICovDQorfSBTWVNDRkdfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBJbnRlci1pbnRlZ3JhdGVkIENpcmN1aXQgSW50ZXJmYWNlDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MTZfdCBDUjE7ICAgICAgICAvKiE8IEkyQyBDb250cm9sIHJlZ2lzdGVyIDEsICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDA7ICAvKiE8IFJlc2VydmVkLCAweDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBDUjI7ICAgICAgICAvKiE8IEkyQyBDb250cm9sIHJlZ2lzdGVyIDIsICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDE7ICAvKiE8IFJlc2VydmVkLCAweDA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBPQVIxOyAgICAgICAvKiE8IEkyQyBPd24gYWRkcmVzcyByZWdpc3RlciAxLCBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDI7ICAvKiE8IFJlc2VydmVkLCAweDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBPQVIyOyAgICAgICAvKiE8IEkyQyBPd24gYWRkcmVzcyByZWdpc3RlciAyLCBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDM7ICAvKiE8IFJlc2VydmVkLCAweDBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBEUjsgICAgICAgICAvKiE8IEkyQyBEYXRhIHJlZ2lzdGVyLCAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDQ7ICAvKiE8IFJlc2VydmVkLCAweDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBTUjE7ICAgICAgICAvKiE8IEkyQyBTdGF0dXMgcmVnaXN0ZXIgMSwgICAgICBBZGRyZXNzIG9mZnNldDogMHgxNCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDU7ICAvKiE8IFJlc2VydmVkLCAweDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBTUjI7ICAgICAgICAvKiE8IEkyQyBTdGF0dXMgcmVnaXN0ZXIgMiwgICAgICBBZGRyZXNzIG9mZnNldDogMHgxOCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDY7ICAvKiE8IFJlc2VydmVkLCAweDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBDQ1I7ICAgICAgICAvKiE8IEkyQyBDbG9jayBjb250cm9sIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgxQyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDc7ICAvKiE8IFJlc2VydmVkLCAweDFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBUUklTRTsgICAgICAvKiE8IEkyQyBUUklTRSByZWdpc3RlciwgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDg7ICAvKiE8IFJlc2VydmVkLCAweDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gSTJDX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgSW5kZXBlbmRlbnQgV0FUQ0hET0cNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IEtSOyAgIC8qITwgSVdERyBLZXkgcmVnaXN0ZXIsICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IFBSOyAgIC8qITwgSVdERyBQcmVzY2FsZXIgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IFJMUjsgIC8qITwgSVdERyBSZWxvYWQgcmVnaXN0ZXIsICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICovDQorICBfX0lPIHVpbnQzMl90IFNSOyAgIC8qITwgSVdERyBTdGF0dXMgcmVnaXN0ZXIsICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorfSBJV0RHX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgUG93ZXIgQ29udHJvbA0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgQ1I7ICAgLyohPCBQV1IgcG93ZXIgY29udHJvbCByZWdpc3RlciwgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IENTUjsgIC8qITwgUFdSIHBvd2VyIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KK30gUFdSX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgUmVzZXQgYW5kIENsb2NrIENvbnRyb2wNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IENSOyAgICAgICAgICAgIC8qITwgUkNDIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IFBMTENGR1I7ICAgICAgIC8qITwgUkNDIFBMTCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IENGR1I7ICAgICAgICAgIC8qITwgUkNDIGNsb2NrIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICovDQorICBfX0lPIHVpbnQzMl90IENJUjsgICAgICAgICAgIC8qITwgUkNDIGNsb2NrIGludGVycnVwdCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorICBfX0lPIHVpbnQzMl90IEFIQjFSU1RSOyAgICAgIC8qITwgUkNDIEFIQjEgcGVyaXBoZXJhbCByZXNldCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICBfX0lPIHVpbnQzMl90IEFIQjJSU1RSOyAgICAgIC8qITwgUkNDIEFIQjIgcGVyaXBoZXJhbCByZXNldCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE0ICovDQorICBfX0lPIHVpbnQzMl90IEFIQjNSU1RSOyAgICAgIC8qITwgUkNDIEFIQjMgcGVyaXBoZXJhbCByZXNldCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE4ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVEMDsgICAgIC8qITwgUmVzZXJ2ZWQsIDB4MUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEFQQjFSU1RSOyAgICAgIC8qITwgUkNDIEFQQjEgcGVyaXBoZXJhbCByZXNldCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDIwICovDQorICBfX0lPIHVpbnQzMl90IEFQQjJSU1RSOyAgICAgIC8qITwgUkNDIEFQQjIgcGVyaXBoZXJhbCByZXNldCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI0ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVEMVsyXTsgIC8qITwgUmVzZXJ2ZWQsIDB4MjgtMHgyQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEFIQjFFTlI7ICAgICAgIC8qITwgUkNDIEFIQjEgcGVyaXBoZXJhbCBjbG9jayByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDMwICovDQorICBfX0lPIHVpbnQzMl90IEFIQjJFTlI7ICAgICAgIC8qITwgUkNDIEFIQjIgcGVyaXBoZXJhbCBjbG9jayByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM0ICovDQorICBfX0lPIHVpbnQzMl90IEFIQjNFTlI7ICAgICAgIC8qITwgUkNDIEFIQjMgcGVyaXBoZXJhbCBjbG9jayByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM4ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVEMjsgICAgIC8qITwgUmVzZXJ2ZWQsIDB4M0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEFQQjFFTlI7ICAgICAgIC8qITwgUkNDIEFQQjEgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDQwICovDQorICBfX0lPIHVpbnQzMl90IEFQQjJFTlI7ICAgICAgIC8qITwgUkNDIEFQQjIgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDQ0ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVEM1syXTsgIC8qITwgUmVzZXJ2ZWQsIDB4NDgtMHg0QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEFIQjFMUEVOUjsgICAgIC8qITwgUkNDIEFIQjEgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgaW4gbG93IHBvd2VyIG1vZGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDUwICovDQorICBfX0lPIHVpbnQzMl90IEFIQjJMUEVOUjsgICAgIC8qITwgUkNDIEFIQjIgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgaW4gbG93IHBvd2VyIG1vZGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDU0ICovDQorICBfX0lPIHVpbnQzMl90IEFIQjNMUEVOUjsgICAgIC8qITwgUkNDIEFIQjMgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgaW4gbG93IHBvd2VyIG1vZGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDU4ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVENDsgICAgIC8qITwgUmVzZXJ2ZWQsIDB4NUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEFQQjFMUEVOUjsgICAgIC8qITwgUkNDIEFQQjEgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgaW4gbG93IHBvd2VyIG1vZGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDYwICovDQorICBfX0lPIHVpbnQzMl90IEFQQjJMUEVOUjsgICAgIC8qITwgUkNDIEFQQjIgcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgaW4gbG93IHBvd2VyIG1vZGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDY0ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVENVsyXTsgIC8qITwgUmVzZXJ2ZWQsIDB4NjgtMHg2QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEJEQ1I7ICAgICAgICAgIC8qITwgUkNDIEJhY2t1cCBkb21haW4gY29udHJvbCByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDcwICovDQorICBfX0lPIHVpbnQzMl90IENTUjsgICAgICAgICAgIC8qITwgUkNDIGNsb2NrIGNvbnRyb2wgJiBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDc0ICovDQorICB1aW50MzJfdCAgICAgIFJFU0VSVkVENlsyXTsgIC8qITwgUmVzZXJ2ZWQsIDB4NzgtMHg3QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IFNTQ0dSOyAgICAgICAgIC8qITwgUkNDIHNwcmVhZCBzcGVjdHJ1bSBjbG9jayBnZW5lcmF0aW9uIHJlZ2lzdGVyLCAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDgwICovDQorICBfX0lPIHVpbnQzMl90IFBMTEkyU0NGR1I7ICAgIC8qITwgUkNDIFBMTEkyUyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDg0ICovDQorfSBSQ0NfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBSZWFsLVRpbWUgQ2xvY2sNCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IFRSOyAgICAgIC8qITwgUlRDIHRpbWUgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IERSOyAgICAgIC8qITwgUlRDIGRhdGUgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IENSOyAgICAgIC8qITwgUlRDIGNvbnRyb2wgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICovDQorICBfX0lPIHVpbnQzMl90IElTUjsgICAgIC8qITwgUlRDIGluaXRpYWxpemF0aW9uIGFuZCBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorICBfX0lPIHVpbnQzMl90IFBSRVI7ICAgIC8qITwgUlRDIHByZXNjYWxlciByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICBfX0lPIHVpbnQzMl90IFdVVFI7ICAgIC8qITwgUlRDIHdha2V1cCB0aW1lciByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE0ICovDQorICBfX0lPIHVpbnQzMl90IENBTElCUjsgIC8qITwgUlRDIGNhbGlicmF0aW9uIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE4ICovDQorICBfX0lPIHVpbnQzMl90IEFMUk1BUjsgIC8qITwgUlRDIGFsYXJtIEEgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDFDICovDQorICBfX0lPIHVpbnQzMl90IEFMUk1CUjsgIC8qITwgUlRDIGFsYXJtIEIgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDIwICovDQorICBfX0lPIHVpbnQzMl90IFdQUjsgICAgIC8qITwgUlRDIHdyaXRlIHByb3RlY3Rpb24gcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI0ICovDQorICB1aW50MzJfdCBSRVNFUlZFRDE7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4MjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICB1aW50MzJfdCBSRVNFUlZFRDI7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4MkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IFRTVFI7ICAgIC8qITwgUlRDIHRpbWUgc3RhbXAgdGltZSByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDMwICovDQorICBfX0lPIHVpbnQzMl90IFRTRFI7ICAgIC8qITwgUlRDIHRpbWUgc3RhbXAgZGF0ZSByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM0ICovDQorICB1aW50MzJfdCBSRVNFUlZFRDM7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4MzggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICB1aW50MzJfdCBSRVNFUlZFRDQ7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4M0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IFRBRkNSOyAgIC8qITwgUlRDIHRhbXBlciBhbmQgYWx0ZXJuYXRlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDQwICovDQorICB1aW50MzJfdCBSRVNFUlZFRDU7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4NDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICB1aW50MzJfdCBSRVNFUlZFRDY7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4NDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICB1aW50MzJfdCBSRVNFUlZFRDc7ICAgIC8qITwgUmVzZXJ2ZWQsIDB4NEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IEJLUDBSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDUwICovDQorICBfX0lPIHVpbnQzMl90IEJLUDFSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDU0ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDJSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDU4ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDNSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDVDICovDQorICBfX0lPIHVpbnQzMl90IEJLUDRSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDYwICovDQorICBfX0lPIHVpbnQzMl90IEJLUDVSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDY0ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDZSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDY4ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDdSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDZDICovDQorICBfX0lPIHVpbnQzMl90IEJLUDhSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDcwICovDQorICBfX0lPIHVpbnQzMl90IEJLUDlSOyAgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDc0ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDEwUjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDc4ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDExUjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDdDICovDQorICBfX0lPIHVpbnQzMl90IEJLUDEyUjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDgwICovDQorICBfX0lPIHVpbnQzMl90IEJLUDEzUjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDg0ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDE0UjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDg4ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDE1UjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDhDICovDQorICBfX0lPIHVpbnQzMl90IEJLUDE2UjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDkwICovDQorICBfX0lPIHVpbnQzMl90IEJLUDE3UjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDk0ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDE4UjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDk4ICovDQorICBfX0lPIHVpbnQzMl90IEJLUDE5UjsgIC8qITwgUlRDIGJhY2t1cCByZWdpc3RlciAxOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDlDICovDQorfSBSVENfVHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiBTRCBob3N0IEludGVyZmFjZQ0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIF9fSU8gdWludDMyX3QgUE9XRVI7ICAgICAgICAgIC8qITwgU0RJTyBwb3dlciBjb250cm9sIHJlZ2lzdGVyLCAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgX19JTyB1aW50MzJfdCBDTEtDUjsgICAgICAgICAgLyohPCBTREkgY2xvY2sgY29udHJvbCByZWdpc3RlciwgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IEFSRzsgICAgICAgICAgICAvKiE8IFNESU8gYXJndW1lbnQgcmVnaXN0ZXIsICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDggKi8NCisgIF9fSU8gdWludDMyX3QgQ01EOyAgICAgICAgICAgIC8qITwgU0RJTyBjb21tYW5kIHJlZ2lzdGVyLCAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KKyAgX19JIHVpbnQzMl90ICBSRVNQQ01EOyAgICAgICAgLyohPCBTRElPIGNvbW1hbmQgcmVzcG9uc2UgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICBfX0kgdWludDMyX3QgIFJFU1AxOyAgICAgICAgICAvKiE8IFNESU8gcmVzcG9uc2UgMSByZWdpc3RlciwgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MTQgKi8NCisgIF9fSSB1aW50MzJfdCAgUkVTUDI7ICAgICAgICAgIC8qITwgU0RJTyByZXNwb25zZSAyIHJlZ2lzdGVyLCAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxOCAqLw0KKyAgX19JIHVpbnQzMl90ICBSRVNQMzsgICAgICAgICAgLyohPCBTRElPIHJlc3BvbnNlIDMgcmVnaXN0ZXIsICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDFDICovDQorICBfX0kgdWludDMyX3QgIFJFU1A0OyAgICAgICAgICAvKiE8IFNESU8gcmVzcG9uc2UgNCByZWdpc3RlciwgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MjAgKi8NCisgIF9fSU8gdWludDMyX3QgRFRJTUVSOyAgICAgICAgIC8qITwgU0RJTyBkYXRhIHRpbWVyIHJlZ2lzdGVyLCAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyNCAqLw0KKyAgX19JTyB1aW50MzJfdCBETEVOOyAgICAgICAgICAgLyohPCBTRElPIGRhdGEgbGVuZ3RoIHJlZ2lzdGVyLCAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI4ICovDQorICBfX0lPIHVpbnQzMl90IERDVFJMOyAgICAgICAgICAvKiE8IFNESU8gZGF0YSBjb250cm9sIHJlZ2lzdGVyLCAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MkMgKi8NCisgIF9fSSB1aW50MzJfdCAgRENPVU5UOyAgICAgICAgIC8qITwgU0RJTyBkYXRhIGNvdW50ZXIgcmVnaXN0ZXIsICAgICBBZGRyZXNzIG9mZnNldDogMHgzMCAqLw0KKyAgX19JIHVpbnQzMl90ICBTVEE7ICAgICAgICAgICAgLyohPCBTRElPIHN0YXR1cyByZWdpc3RlciwgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM0ICovDQorICBfX0lPIHVpbnQzMl90IElDUjsgICAgICAgICAgICAvKiE8IFNESU8gaW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyLCAgQWRkcmVzcyBvZmZzZXQ6IDB4MzggKi8NCisgIF9fSU8gdWludDMyX3QgTUFTSzsgICAgICAgICAgIC8qITwgU0RJTyBtYXNrIHJlZ2lzdGVyLCAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgzQyAqLw0KKyAgdWludDMyX3QgICAgICBSRVNFUlZFRDBbMl07ICAgLyohPCBSZXNlcnZlZCwgMHg0MC0weDQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0kgdWludDMyX3QgIEZJRk9DTlQ7ICAgICAgICAvKiE8IFNESU8gRklGTyBjb3VudGVyIHJlZ2lzdGVyLCAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4NDggKi8NCisgIHVpbnQzMl90ICAgICAgUkVTRVJWRUQxWzEzXTsgIC8qITwgUmVzZXJ2ZWQsIDB4NEMtMHg3QyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBGSUZPOyAgICAgICAgICAgLyohPCBTRElPIGRhdGEgRklGTyByZWdpc3RlciwgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDgwICovDQorfSBTRElPX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MTZfdCBDUjE7ICAgICAgICAvKiE8IFNQSSBjb250cm9sIHJlZ2lzdGVyIDEgKG5vdCB1c2VkIGluIEkyUyBtb2RlKSwgICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDA7ICAvKiE8IFJlc2VydmVkLCAweDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBDUjI7ICAgICAgICAvKiE8IFNQSSBjb250cm9sIHJlZ2lzdGVyIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDE7ICAvKiE8IFJlc2VydmVkLCAweDA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBTUjsgICAgICAgICAvKiE8IFNQSSBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDI7ICAvKiE8IFJlc2VydmVkLCAweDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBEUjsgICAgICAgICAvKiE8IFNQSSBkYXRhIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDM7ICAvKiE8IFJlc2VydmVkLCAweDBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBDUkNQUjsgICAgICAvKiE8IFNQSSBDUkMgcG9seW5vbWlhbCByZWdpc3RlciAobm90IHVzZWQgaW4gSTJTIG1vZGUpLCBBZGRyZXNzIG9mZnNldDogMHgxMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDQ7ICAvKiE8IFJlc2VydmVkLCAweDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBSWENSQ1I7ICAgICAvKiE8IFNQSSBSWCBDUkMgcmVnaXN0ZXIgKG5vdCB1c2VkIGluIEkyUyBtb2RlKSwgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxNCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDU7ICAvKiE8IFJlc2VydmVkLCAweDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBUWENSQ1I7ICAgICAvKiE8IFNQSSBUWCBDUkMgcmVnaXN0ZXIgKG5vdCB1c2VkIGluIEkyUyBtb2RlKSwgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxOCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDY7ICAvKiE8IFJlc2VydmVkLCAweDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBJMlNDRkdSOyAgICAvKiE8IFNQSV9JMlMgY29uZmlndXJhdGlvbiByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxQyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDc7ICAvKiE8IFJlc2VydmVkLCAweDFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBJMlNQUjsgICAgICAvKiE8IFNQSV9JMlMgcHJlc2NhbGVyIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDg7ICAvKiE8IFJlc2VydmVkLCAweDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gU1BJX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgVElNDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MTZfdCBDUjE7ICAgICAgICAgLyohPCBUSU0gY29udHJvbCByZWdpc3RlciAxLCAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDAgKi8NCisgIHVpbnQxNl90ICAgICAgUkVTRVJWRUQwOyAgIC8qITwgUmVzZXJ2ZWQsIDB4MDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQxNl90IENSMjsgICAgICAgICAvKiE8IFRJTSBjb250cm9sIHJlZ2lzdGVyIDIsICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwNCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDE7ICAgLyohPCBSZXNlcnZlZCwgMHgwNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgU01DUjsgICAgICAgIC8qITwgVElNIHNsYXZlIG1vZGUgY29udHJvbCByZWdpc3RlciwgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEMjsgICAvKiE8IFJlc2VydmVkLCAweDBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBESUVSOyAgICAgICAgLyohPCBUSU0gRE1BL2ludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIsICAgQWRkcmVzcyBvZmZzZXQ6IDB4MEMgKi8NCisgIHVpbnQxNl90ICAgICAgUkVTRVJWRUQzOyAgIC8qITwgUmVzZXJ2ZWQsIDB4MEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQxNl90IFNSOyAgICAgICAgICAvKiE8IFRJTSBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgxMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDQ7ICAgLyohPCBSZXNlcnZlZCwgMHgxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgRUdSOyAgICAgICAgIC8qITwgVElNIGV2ZW50IGdlbmVyYXRpb24gcmVnaXN0ZXIsICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE0ICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVENTsgICAvKiE8IFJlc2VydmVkLCAweDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBDQ01SMTsgICAgICAgLyohPCBUSU0gY2FwdHVyZS9jb21wYXJlIG1vZGUgcmVnaXN0ZXIgMSwgQWRkcmVzcyBvZmZzZXQ6IDB4MTggKi8NCisgIHVpbnQxNl90ICAgICAgUkVTRVJWRUQ2OyAgIC8qITwgUmVzZXJ2ZWQsIDB4MUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQxNl90IENDTVIyOyAgICAgICAvKiE8IFRJTSBjYXB0dXJlL2NvbXBhcmUgbW9kZSByZWdpc3RlciAyLCBBZGRyZXNzIG9mZnNldDogMHgxQyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDc7ICAgLyohPCBSZXNlcnZlZCwgMHgxRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgQ0NFUjsgICAgICAgIC8qITwgVElNIGNhcHR1cmUvY29tcGFyZSBlbmFibGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDIwICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEODsgICAvKiE8IFJlc2VydmVkLCAweDIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBDTlQ7ICAgICAgICAgLyohPCBUSU0gY291bnRlciByZWdpc3RlciwgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MjQgKi8NCisgIF9fSU8gdWludDE2X3QgUFNDOyAgICAgICAgIC8qITwgVElNIHByZXNjYWxlciwgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI4ICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEOTsgICAvKiE8IFJlc2VydmVkLCAweDJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBBUlI7ICAgICAgICAgLyohPCBUSU0gYXV0by1yZWxvYWQgcmVnaXN0ZXIsICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MkMgKi8NCisgIF9fSU8gdWludDE2X3QgUkNSOyAgICAgICAgIC8qITwgVElNIHJlcGV0aXRpb24gY291bnRlciByZWdpc3RlciwgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDMwICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEMTA7ICAvKiE8IFJlc2VydmVkLCAweDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBDQ1IxOyAgICAgICAgLyohPCBUSU0gY2FwdHVyZS9jb21wYXJlIHJlZ2lzdGVyIDEsICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MzQgKi8NCisgIF9fSU8gdWludDMyX3QgQ0NSMjsgICAgICAgIC8qITwgVElNIGNhcHR1cmUvY29tcGFyZSByZWdpc3RlciAyLCAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM4ICovDQorICBfX0lPIHVpbnQzMl90IENDUjM7ICAgICAgICAvKiE8IFRJTSBjYXB0dXJlL2NvbXBhcmUgcmVnaXN0ZXIgMywgICAgICBBZGRyZXNzIG9mZnNldDogMHgzQyAqLw0KKyAgX19JTyB1aW50MzJfdCBDQ1I0OyAgICAgICAgLyohPCBUSU0gY2FwdHVyZS9jb21wYXJlIHJlZ2lzdGVyIDQsICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4NDAgKi8NCisgIF9fSU8gdWludDE2X3QgQkRUUjsgICAgICAgIC8qITwgVElNIGJyZWFrIGFuZCBkZWFkLXRpbWUgcmVnaXN0ZXIsICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDQ0ICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEMTE7ICAvKiE8IFJlc2VydmVkLCAweDQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBEQ1I7ICAgICAgICAgLyohPCBUSU0gRE1BIGNvbnRyb2wgcmVnaXN0ZXIsICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4NDggKi8NCisgIHVpbnQxNl90ICAgICAgUkVTRVJWRUQxMjsgIC8qITwgUmVzZXJ2ZWQsIDB4NEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQxNl90IERNQVI7ICAgICAgICAvKiE8IFRJTSBETUEgYWRkcmVzcyBmb3IgZnVsbCB0cmFuc2ZlciwgICBBZGRyZXNzIG9mZnNldDogMHg0QyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDEzOyAgLyohPCBSZXNlcnZlZCwgMHg0RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgT1I7ICAgICAgICAgIC8qITwgVElNIG9wdGlvbiByZWdpc3RlciwgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDUwICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEMTQ7ICAvKiE8IFJlc2VydmVkLCAweDUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KK30gVElNX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgVW5pdmVyc2FsIFN5bmNocm9ub3VzIEFzeW5jaHJvbm91cyBSZWNlaXZlciBUcmFuc21pdHRlcg0KKyAgKi8NCisgDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQxNl90IFNSOyAgICAgICAgIC8qITwgVVNBUlQgU3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDA7ICAvKiE8IFJlc2VydmVkLCAweDAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgRFI7ICAgICAgICAgLyohPCBVU0FSVCBEYXRhIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVEMTsgIC8qITwgUmVzZXJ2ZWQsIDB4MDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBCUlI7ICAgICAgICAvKiE8IFVTQVJUIEJhdWQgcmF0ZSByZWdpc3RlciwgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDggKi8NCisgIHVpbnQxNl90ICAgICAgUkVTRVJWRUQyOyAgLyohPCBSZXNlcnZlZCwgMHgwQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQxNl90IENSMTsgICAgICAgIC8qITwgVVNBUlQgQ29udHJvbCByZWdpc3RlciAxLCAgICAgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwQyAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDM7ICAvKiE8IFJlc2VydmVkLCAweDBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisgIF9fSU8gdWludDE2X3QgQ1IyOyAgICAgICAgLyohPCBVU0FSVCBDb250cm9sIHJlZ2lzdGVyIDIsICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICB1aW50MTZfdCAgICAgIFJFU0VSVkVENDsgIC8qITwgUmVzZXJ2ZWQsIDB4MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyAgX19JTyB1aW50MTZfdCBDUjM7ICAgICAgICAvKiE8IFVTQVJUIENvbnRyb2wgcmVnaXN0ZXIgMywgICAgICAgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MTQgKi8NCisgIHVpbnQxNl90ICAgICAgUkVTRVJWRUQ1OyAgLyohPCBSZXNlcnZlZCwgMHgxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQxNl90IEdUUFI7ICAgICAgIC8qITwgVVNBUlQgR3VhcmQgdGltZSBhbmQgcHJlc2NhbGVyIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgxOCAqLw0KKyAgdWludDE2X3QgICAgICBSRVNFUlZFRDY7ICAvKiE8IFJlc2VydmVkLCAweDFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCit9IFVTQVJUX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgV2luZG93IFdBVENIRE9HDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgX19JTyB1aW50MzJfdCBDUjsgICAvKiE8IFdXREcgQ29udHJvbCByZWdpc3RlciwgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDAgKi8NCisgIF9fSU8gdWludDMyX3QgQ0ZSOyAgLyohPCBXV0RHIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IFNSOyAgIC8qITwgV1dERyBTdGF0dXMgcmVnaXN0ZXIsICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwOCAqLw0KK30gV1dER19UeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmIENyeXB0byBQcm9jZXNzb3INCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBfX0lPIHVpbnQzMl90IENSOyAgICAgLyohPCBDUllQIGNvbnRyb2wgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDAwICovDQorICBfX0lPIHVpbnQzMl90IFNSOyAgICAgLyohPCBDUllQIHN0YXR1cyByZWdpc3RlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IERSOyAgICAgLyohPCBDUllQIGRhdGEgaW5wdXQgcmVnaXN0ZXIsICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA4ICovDQorICBfX0lPIHVpbnQzMl90IERPVVQ7ICAgLyohPCBDUllQIGRhdGEgb3V0cHV0IHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBDICovDQorICBfX0lPIHVpbnQzMl90IERNQUNSOyAgLyohPCBDUllQIERNQSBjb250cm9sIHJlZ2lzdGVyLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDEwICovDQorICBfX0lPIHVpbnQzMl90IElNU0NSOyAgLyohPCBDUllQIGludGVycnVwdCBtYXNrIHNldC9jbGVhciByZWdpc3RlciwgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE0ICovDQorICBfX0lPIHVpbnQzMl90IFJJU1I7ICAgLyohPCBDUllQIHJhdyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDE4ICovDQorICBfX0lPIHVpbnQzMl90IE1JU1I7ICAgLyohPCBDUllQIG1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLCAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDFDICovDQorICBfX0lPIHVpbnQzMl90IEswTFI7ICAgLyohPCBDUllQIGtleSBsZWZ0ICByZWdpc3RlciAwLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDIwICovDQorICBfX0lPIHVpbnQzMl90IEswUlI7ICAgLyohPCBDUllQIGtleSByaWdodCByZWdpc3RlciAwLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI0ICovDQorICBfX0lPIHVpbnQzMl90IEsxTFI7ICAgLyohPCBDUllQIGtleSBsZWZ0ICByZWdpc3RlciAxLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDI4ICovDQorICBfX0lPIHVpbnQzMl90IEsxUlI7ICAgLyohPCBDUllQIGtleSByaWdodCByZWdpc3RlciAxLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDJDICovDQorICBfX0lPIHVpbnQzMl90IEsyTFI7ICAgLyohPCBDUllQIGtleSBsZWZ0ICByZWdpc3RlciAyLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDMwICovDQorICBfX0lPIHVpbnQzMl90IEsyUlI7ICAgLyohPCBDUllQIGtleSByaWdodCByZWdpc3RlciAyLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM0ICovDQorICBfX0lPIHVpbnQzMl90IEszTFI7ICAgLyohPCBDUllQIGtleSBsZWZ0ICByZWdpc3RlciAzLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDM4ICovDQorICBfX0lPIHVpbnQzMl90IEszUlI7ICAgLyohPCBDUllQIGtleSByaWdodCByZWdpc3RlciAzLCAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDNDICovDQorICBfX0lPIHVpbnQzMl90IElWMExSOyAgLyohPCBDUllQIGluaXRpYWxpemF0aW9uIHZlY3RvciBsZWZ0LXdvcmQgIHJlZ2lzdGVyIDAsIEFkZHJlc3Mgb2Zmc2V0OiAweDQwICovDQorICBfX0lPIHVpbnQzMl90IElWMFJSOyAgLyohPCBDUllQIGluaXRpYWxpemF0aW9uIHZlY3RvciByaWdodC13b3JkIHJlZ2lzdGVyIDAsIEFkZHJlc3Mgb2Zmc2V0OiAweDQ0ICovDQorICBfX0lPIHVpbnQzMl90IElWMUxSOyAgLyohPCBDUllQIGluaXRpYWxpemF0aW9uIHZlY3RvciBsZWZ0LXdvcmQgIHJlZ2lzdGVyIDEsIEFkZHJlc3Mgb2Zmc2V0OiAweDQ4ICovDQorICBfX0lPIHVpbnQzMl90IElWMVJSOyAgLyohPCBDUllQIGluaXRpYWxpemF0aW9uIHZlY3RvciByaWdodC13b3JkIHJlZ2lzdGVyIDEsIEFkZHJlc3Mgb2Zmc2V0OiAweDRDICovDQorfSBDUllQX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgSEFTSA0KKyAgKi8NCisgIA0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgIF9fSU8gdWludDMyX3QgQ1I7ICAgICAgICAvKiE8IEhBU0ggY29udHJvbCByZWdpc3RlciwgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IERJTjsgICAgICAgLyohPCBIQVNIIGRhdGEgaW5wdXQgcmVnaXN0ZXIsICAgICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBTVFI7ICAgICAgIC8qITwgSEFTSCBzdGFydCByZWdpc3RlciwgICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgwOCAgICAgICAgKi8NCisgIF9fSU8gdWludDMyX3QgSFJbNV07ICAgICAvKiE8IEhBU0ggZGlnZXN0IHJlZ2lzdGVycywgICAgICAgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MEMtMHgxQyAgICovDQorICBfX0lPIHVpbnQzMl90IElNUjsgICAgICAgLyohPCBIQVNIIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIsIEFkZHJlc3Mgb2Zmc2V0OiAweDIwICAgICAgICAqLw0KKyAgX19JTyB1aW50MzJfdCBTUjsgICAgICAgIC8qITwgSEFTSCBzdGF0dXMgcmVnaXN0ZXIsICAgICAgICAgICBBZGRyZXNzIG9mZnNldDogMHgyNCAgICAgICAgKi8NCisgIHVpbnQzMl90ICBSRVNFUlZFRFs1Ml07ICAvKiE8IFJlc2VydmVkLCAweDI4LTB4RjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorICBfX0lPIHVpbnQzMl90IENTUls1MV07ICAgLyohPCBIQVNIIGNvbnRleHQgc3dhcCByZWdpc3RlcnMsICAgIEFkZHJlc3Mgb2Zmc2V0OiAweDBGOC0weDFDMCAqLyAgDQorfSBIQVNIX1R5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgSEFTSA0KKyAgKi8NCisgIA0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgIF9fSU8gdWludDMyX3QgQ1I7ICAvKiE8IFJORyBjb250cm9sIHJlZ2lzdGVyLCBBZGRyZXNzIG9mZnNldDogMHgwMCAqLw0KKyAgX19JTyB1aW50MzJfdCBTUjsgIC8qITwgUk5HIHN0YXR1cyByZWdpc3RlciwgIEFkZHJlc3Mgb2Zmc2V0OiAweDA0ICovDQorICBfX0lPIHVpbnQzMl90IERSOyAgLyohPCBSTkcgZGF0YSByZWdpc3RlciwgICAgQWRkcmVzcyBvZmZzZXQ6IDB4MDggKi8NCit9IFJOR19UeXBlRGVmOw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisgIA0KKy8qKiBAYWRkdG9ncm91cCBQZXJpcGhlcmFsX21lbW9yeV9tYXANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBGTEFTSF9CQVNFICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAvKiE8IEZMQVNIIGJhc2UgYWRkcmVzcyBpbiB0aGUgYWxpYXMgcmVnaW9uICovDQorI2RlZmluZSBTUkFNX0JBU0UgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAvKiE8IFNSQU0gYmFzZSBhZGRyZXNzIGluIHRoZSBhbGlhcyByZWdpb24gKi8NCisjZGVmaW5lIFBFUklQSF9CQVNFICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApIC8qITwgUGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgaW4gdGhlIGFsaWFzIHJlZ2lvbiAqLw0KKw0KKyNkZWZpbmUgU1JBTV9CQl9CQVNFICAgICAgICAgICgodWludDMyX3QpMHgyMjAwMDAwMCkgLyohPCBTUkFNIGJhc2UgYWRkcmVzcyBpbiB0aGUgYml0LWJhbmQgcmVnaW9uICovDQorI2RlZmluZSBQRVJJUEhfQkJfQkFTRSAgICAgICAgKCh1aW50MzJfdCkweDQyMDAwMDAwKSAvKiE8IFBlcmlwaGVyYWwgYmFzZSBhZGRyZXNzIGluIHRoZSBiaXQtYmFuZCByZWdpb24gKi8NCisNCisjZGVmaW5lIEZTTUNfUl9CQVNFICAgICAgICAgICAoKHVpbnQzMl90KTB4QTAwMDAwMDApIC8qITwgRlNNQyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovDQorDQorLyohPCBQZXJpcGhlcmFsIG1lbW9yeSBtYXAgKi8NCisjZGVmaW5lIEFQQjFQRVJJUEhfQkFTRSAgICAgICBQRVJJUEhfQkFTRQ0KKyNkZWZpbmUgQVBCMlBFUklQSF9CQVNFICAgICAgIChQRVJJUEhfQkFTRSArIDB4MDAwMTAwMDApDQorI2RlZmluZSBBSEIxUEVSSVBIX0JBU0UgICAgICAgKFBFUklQSF9CQVNFICsgMHgwMDAyMDAwMCkNCisjZGVmaW5lIEFIQjJQRVJJUEhfQkFTRSAgICAgICAoUEVSSVBIX0JBU0UgKyAweDEwMDAwMDAwKQ0KKw0KKy8qITwgQVBCMSBwZXJpcGhlcmFscyAqLw0KKyNkZWZpbmUgVElNMl9CQVNFICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDAwMDApDQorI2RlZmluZSBUSU0zX0JBU0UgICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4MDQwMCkNCisjZGVmaW5lIFRJTTRfQkFTRSAgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHgwODAwKQ0KKyNkZWZpbmUgVElNNV9CQVNFICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDBDMDApDQorI2RlZmluZSBUSU02X0JBU0UgICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4MTAwMCkNCisjZGVmaW5lIFRJTTdfQkFTRSAgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHgxNDAwKQ0KKyNkZWZpbmUgVElNMTJfQkFTRSAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDE4MDApDQorI2RlZmluZSBUSU0xM19CQVNFICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4MUMwMCkNCisjZGVmaW5lIFRJTTE0X0JBU0UgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHgyMDAwKQ0KKyNkZWZpbmUgUlRDX0JBU0UgICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDI4MDApDQorI2RlZmluZSBXV0RHX0JBU0UgICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4MkMwMCkNCisjZGVmaW5lIElXREdfQkFTRSAgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHgzMDAwKQ0KKyNkZWZpbmUgU1BJMl9CQVNFICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDM4MDApDQorI2RlZmluZSBTUEkzX0JBU0UgICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4M0MwMCkNCisjZGVmaW5lIFVTQVJUMl9CQVNFICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHg0NDAwKQ0KKyNkZWZpbmUgVVNBUlQzX0JBU0UgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDQ4MDApDQorI2RlZmluZSBVQVJUNF9CQVNFICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4NEMwMCkNCisjZGVmaW5lIFVBUlQ1X0JBU0UgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHg1MDAwKQ0KKyNkZWZpbmUgSTJDMV9CQVNFICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDU0MDApDQorI2RlZmluZSBJMkMyX0JBU0UgICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4NTgwMCkNCisjZGVmaW5lIEkyQzNfQkFTRSAgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHg1QzAwKQ0KKyNkZWZpbmUgQ0FOMV9CQVNFICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDY0MDApDQorI2RlZmluZSBDQU4yX0JBU0UgICAgICAgICAgICAgKEFQQjFQRVJJUEhfQkFTRSArIDB4NjgwMCkNCisjZGVmaW5lIFBXUl9CQVNFICAgICAgICAgICAgICAoQVBCMVBFUklQSF9CQVNFICsgMHg3MDAwKQ0KKyNkZWZpbmUgREFDX0JBU0UgICAgICAgICAgICAgIChBUEIxUEVSSVBIX0JBU0UgKyAweDc0MDApDQorDQorLyohPCBBUEIyIHBlcmlwaGVyYWxzICovDQorI2RlZmluZSBUSU0xX0JBU0UgICAgICAgICAgICAgKEFQQjJQRVJJUEhfQkFTRSArIDB4MDAwMCkNCisjZGVmaW5lIFRJTThfQkFTRSAgICAgICAgICAgICAoQVBCMlBFUklQSF9CQVNFICsgMHgwNDAwKQ0KKyNkZWZpbmUgVVNBUlQxX0JBU0UgICAgICAgICAgIChBUEIyUEVSSVBIX0JBU0UgKyAweDEwMDApDQorI2RlZmluZSBVU0FSVDZfQkFTRSAgICAgICAgICAgKEFQQjJQRVJJUEhfQkFTRSArIDB4MTQwMCkNCisjZGVmaW5lIEFEQzFfQkFTRSAgICAgICAgICAgICAoQVBCMlBFUklQSF9CQVNFICsgMHgyMDAwKQ0KKyNkZWZpbmUgQURDMl9CQVNFICAgICAgICAgICAgIChBUEIyUEVSSVBIX0JBU0UgKyAweDIxMDApDQorI2RlZmluZSBBREMzX0JBU0UgICAgICAgICAgICAgKEFQQjJQRVJJUEhfQkFTRSArIDB4MjIwMCkNCisjZGVmaW5lIEFEQ19CQVNFICAgICAgICAgICAgICAoQVBCMlBFUklQSF9CQVNFICsgMHgyMzAwKQ0KKyNkZWZpbmUgU0RJT19CQVNFICAgICAgICAgICAgIChBUEIyUEVSSVBIX0JBU0UgKyAweDJDMDApDQorI2RlZmluZSBTUEkxX0JBU0UgICAgICAgICAgICAgKEFQQjJQRVJJUEhfQkFTRSArIDB4MzAwMCkNCisjZGVmaW5lIFNZU0NGR19CQVNFICAgICAgICAgICAoQVBCMlBFUklQSF9CQVNFICsgMHgzODAwKQ0KKyNkZWZpbmUgRVhUSV9CQVNFICAgICAgICAgICAgIChBUEIyUEVSSVBIX0JBU0UgKyAweDNDMDApDQorI2RlZmluZSBUSU05X0JBU0UgICAgICAgICAgICAgKEFQQjJQRVJJUEhfQkFTRSArIDB4NDAwMCkNCisjZGVmaW5lIFRJTTEwX0JBU0UgICAgICAgICAgICAoQVBCMlBFUklQSF9CQVNFICsgMHg0NDAwKQ0KKyNkZWZpbmUgVElNMTFfQkFTRSAgICAgICAgICAgIChBUEIyUEVSSVBIX0JBU0UgKyAweDQ4MDApDQorDQorLyohPCBBSEIxIHBlcmlwaGVyYWxzICovDQorI2RlZmluZSBHUElPQV9CQVNFICAgICAgICAgICAgKEFIQjFQRVJJUEhfQkFTRSArIDB4MDAwMCkNCisjZGVmaW5lIEdQSU9CX0JBU0UgICAgICAgICAgICAoQUhCMVBFUklQSF9CQVNFICsgMHgwNDAwKQ0KKyNkZWZpbmUgR1BJT0NfQkFTRSAgICAgICAgICAgIChBSEIxUEVSSVBIX0JBU0UgKyAweDA4MDApDQorI2RlZmluZSBHUElPRF9CQVNFICAgICAgICAgICAgKEFIQjFQRVJJUEhfQkFTRSArIDB4MEMwMCkNCisjZGVmaW5lIEdQSU9FX0JBU0UgICAgICAgICAgICAoQUhCMVBFUklQSF9CQVNFICsgMHgxMDAwKQ0KKyNkZWZpbmUgR1BJT0ZfQkFTRSAgICAgICAgICAgIChBSEIxUEVSSVBIX0JBU0UgKyAweDE0MDApDQorI2RlZmluZSBHUElPR19CQVNFICAgICAgICAgICAgKEFIQjFQRVJJUEhfQkFTRSArIDB4MTgwMCkNCisjZGVmaW5lIEdQSU9IX0JBU0UgICAgICAgICAgICAoQUhCMVBFUklQSF9CQVNFICsgMHgxQzAwKQ0KKyNkZWZpbmUgR1BJT0lfQkFTRSAgICAgICAgICAgIChBSEIxUEVSSVBIX0JBU0UgKyAweDIwMDApDQorI2RlZmluZSBDUkNfQkFTRSAgICAgICAgICAgICAgKEFIQjFQRVJJUEhfQkFTRSArIDB4MzAwMCkNCisjZGVmaW5lIFJDQ19CQVNFICAgICAgICAgICAgICAoQUhCMVBFUklQSF9CQVNFICsgMHgzODAwKQ0KKyNkZWZpbmUgRkxBU0hfUl9CQVNFICAgICAgICAgIChBSEIxUEVSSVBIX0JBU0UgKyAweDNDMDApIA0KKyNkZWZpbmUgQktQU1JBTV9CQVNFICAgICAgICAgIChBSEIxUEVSSVBIX0JBU0UgKyAweDQwMDApDQorI2RlZmluZSBETUExX0JBU0UgICAgICAgICAgICAgKEFIQjFQRVJJUEhfQkFTRSArIDB4NjAwMCkNCisjZGVmaW5lIERNQTFfU3RyZWFtMF9CQVNFICAgICAoRE1BMV9CQVNFICsgMHgwMTApDQorI2RlZmluZSBETUExX1N0cmVhbTFfQkFTRSAgICAgKERNQTFfQkFTRSArIDB4MDI4KQ0KKyNkZWZpbmUgRE1BMV9TdHJlYW0yX0JBU0UgICAgIChETUExX0JBU0UgKyAweDA0MCkNCisjZGVmaW5lIERNQTFfU3RyZWFtM19CQVNFICAgICAoRE1BMV9CQVNFICsgMHgwNTgpDQorI2RlZmluZSBETUExX1N0cmVhbTRfQkFTRSAgICAgKERNQTFfQkFTRSArIDB4MDcwKQ0KKyNkZWZpbmUgRE1BMV9TdHJlYW01X0JBU0UgICAgIChETUExX0JBU0UgKyAweDA4OCkNCisjZGVmaW5lIERNQTFfU3RyZWFtNl9CQVNFICAgICAoRE1BMV9CQVNFICsgMHgwQTApDQorI2RlZmluZSBETUExX1N0cmVhbTdfQkFTRSAgICAgKERNQTFfQkFTRSArIDB4MEI4KQ0KKyNkZWZpbmUgRE1BMl9CQVNFICAgICAgICAgICAgIChBSEIxUEVSSVBIX0JBU0UgKyAweDY0MDApDQorI2RlZmluZSBETUEyX1N0cmVhbTBfQkFTRSAgICAgKERNQTJfQkFTRSArIDB4MDEwKQ0KKyNkZWZpbmUgRE1BMl9TdHJlYW0xX0JBU0UgICAgIChETUEyX0JBU0UgKyAweDAyOCkNCisjZGVmaW5lIERNQTJfU3RyZWFtMl9CQVNFICAgICAoRE1BMl9CQVNFICsgMHgwNDApDQorI2RlZmluZSBETUEyX1N0cmVhbTNfQkFTRSAgICAgKERNQTJfQkFTRSArIDB4MDU4KQ0KKyNkZWZpbmUgRE1BMl9TdHJlYW00X0JBU0UgICAgIChETUEyX0JBU0UgKyAweDA3MCkNCisjZGVmaW5lIERNQTJfU3RyZWFtNV9CQVNFICAgICAoRE1BMl9CQVNFICsgMHgwODgpDQorI2RlZmluZSBETUEyX1N0cmVhbTZfQkFTRSAgICAgKERNQTJfQkFTRSArIDB4MEEwKQ0KKyNkZWZpbmUgRE1BMl9TdHJlYW03X0JBU0UgICAgIChETUEyX0JBU0UgKyAweDBCOCkNCisjZGVmaW5lIEVUSF9CQVNFICAgICAgICAgICAgICAoQUhCMVBFUklQSF9CQVNFICsgMHg4MDAwKQ0KKyNkZWZpbmUgRVRIX01BQ19CQVNFICAgICAgICAgIChFVEhfQkFTRSkNCisjZGVmaW5lIEVUSF9NTUNfQkFTRSAgICAgICAgICAoRVRIX0JBU0UgKyAweDAxMDApDQorI2RlZmluZSBFVEhfUFRQX0JBU0UgICAgICAgICAgKEVUSF9CQVNFICsgMHgwNzAwKQ0KKyNkZWZpbmUgRVRIX0RNQV9CQVNFICAgICAgICAgIChFVEhfQkFTRSArIDB4MTAwMCkNCisNCisvKiE8IEFIQjIgcGVyaXBoZXJhbHMgKi8NCisjZGVmaW5lIERDTUlfQkFTRSAgICAgICAgICAgICAoQUhCMlBFUklQSF9CQVNFICsgMHg1MDAwMCkNCisjZGVmaW5lIENSWVBfQkFTRSAgICAgICAgICAgICAoQUhCMlBFUklQSF9CQVNFICsgMHg2MDAwMCkNCisjZGVmaW5lIEhBU0hfQkFTRSAgICAgICAgICAgICAoQUhCMlBFUklQSF9CQVNFICsgMHg2MDQwMCkNCisjZGVmaW5lIFJOR19CQVNFICAgICAgICAgICAgICAoQUhCMlBFUklQSF9CQVNFICsgMHg2MDgwMCkNCisNCisvKiE8IEZTTUMgQmFua3ggcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyAqLw0KKyNkZWZpbmUgRlNNQ19CYW5rMV9SX0JBU0UgICAgIChGU01DX1JfQkFTRSArIDB4MDAwMCkNCisjZGVmaW5lIEZTTUNfQmFuazFFX1JfQkFTRSAgICAoRlNNQ19SX0JBU0UgKyAweDAxMDQpDQorI2RlZmluZSBGU01DX0JhbmsyX1JfQkFTRSAgICAgKEZTTUNfUl9CQVNFICsgMHgwMDYwKQ0KKyNkZWZpbmUgRlNNQ19CYW5rM19SX0JBU0UgICAgIChGU01DX1JfQkFTRSArIDB4MDA4MCkNCisjZGVmaW5lIEZTTUNfQmFuazRfUl9CQVNFICAgICAoRlNNQ19SX0JBU0UgKyAweDAwQTApDQorDQorLyogRGVidWcgTUNVIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgKi8NCisjZGVmaW5lIERCR01DVV9CQVNFICAgICAgICAgICAoKHVpbnQzMl90ICkweEUwMDQyMDAwKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisgIA0KKy8qKiBAYWRkdG9ncm91cCBQZXJpcGhlcmFsX2RlY2xhcmF0aW9uDQorICAqIEB7DQorICAqLyAgDQorI2RlZmluZSBUSU0yICAgICAgICAgICAgICAgICgoVElNX1R5cGVEZWYgKikgVElNMl9CQVNFKQ0KKyNkZWZpbmUgVElNMyAgICAgICAgICAgICAgICAoKFRJTV9UeXBlRGVmICopIFRJTTNfQkFTRSkNCisjZGVmaW5lIFRJTTQgICAgICAgICAgICAgICAgKChUSU1fVHlwZURlZiAqKSBUSU00X0JBU0UpDQorI2RlZmluZSBUSU01ICAgICAgICAgICAgICAgICgoVElNX1R5cGVEZWYgKikgVElNNV9CQVNFKQ0KKyNkZWZpbmUgVElNNiAgICAgICAgICAgICAgICAoKFRJTV9UeXBlRGVmICopIFRJTTZfQkFTRSkNCisjZGVmaW5lIFRJTTcgICAgICAgICAgICAgICAgKChUSU1fVHlwZURlZiAqKSBUSU03X0JBU0UpDQorI2RlZmluZSBUSU0xMiAgICAgICAgICAgICAgICgoVElNX1R5cGVEZWYgKikgVElNMTJfQkFTRSkNCisjZGVmaW5lIFRJTTEzICAgICAgICAgICAgICAgKChUSU1fVHlwZURlZiAqKSBUSU0xM19CQVNFKQ0KKyNkZWZpbmUgVElNMTQgICAgICAgICAgICAgICAoKFRJTV9UeXBlRGVmICopIFRJTTE0X0JBU0UpDQorI2RlZmluZSBSVEMgICAgICAgICAgICAgICAgICgoUlRDX1R5cGVEZWYgKikgUlRDX0JBU0UpDQorI2RlZmluZSBXV0RHICAgICAgICAgICAgICAgICgoV1dER19UeXBlRGVmICopIFdXREdfQkFTRSkNCisjZGVmaW5lIElXREcgICAgICAgICAgICAgICAgKChJV0RHX1R5cGVEZWYgKikgSVdER19CQVNFKQ0KKyNkZWZpbmUgU1BJMiAgICAgICAgICAgICAgICAoKFNQSV9UeXBlRGVmICopIFNQSTJfQkFTRSkNCisjZGVmaW5lIFNQSTMgICAgICAgICAgICAgICAgKChTUElfVHlwZURlZiAqKSBTUEkzX0JBU0UpDQorI2RlZmluZSBVU0FSVDIgICAgICAgICAgICAgICgoVVNBUlRfVHlwZURlZiAqKSBVU0FSVDJfQkFTRSkNCisjZGVmaW5lIFVTQVJUMyAgICAgICAgICAgICAgKChVU0FSVF9UeXBlRGVmICopIFVTQVJUM19CQVNFKQ0KKyNkZWZpbmUgVUFSVDQgICAgICAgICAgICAgICAoKFVTQVJUX1R5cGVEZWYgKikgVUFSVDRfQkFTRSkNCisjZGVmaW5lIFVBUlQ1ICAgICAgICAgICAgICAgKChVU0FSVF9UeXBlRGVmICopIFVBUlQ1X0JBU0UpDQorI2RlZmluZSBJMkMxICAgICAgICAgICAgICAgICgoSTJDX1R5cGVEZWYgKikgSTJDMV9CQVNFKQ0KKyNkZWZpbmUgSTJDMiAgICAgICAgICAgICAgICAoKEkyQ19UeXBlRGVmICopIEkyQzJfQkFTRSkNCisjZGVmaW5lIEkyQzMgICAgICAgICAgICAgICAgKChJMkNfVHlwZURlZiAqKSBJMkMzX0JBU0UpDQorI2RlZmluZSBDQU4xICAgICAgICAgICAgICAgICgoQ0FOX1R5cGVEZWYgKikgQ0FOMV9CQVNFKQ0KKyNkZWZpbmUgQ0FOMiAgICAgICAgICAgICAgICAoKENBTl9UeXBlRGVmICopIENBTjJfQkFTRSkNCisjZGVmaW5lIFBXUiAgICAgICAgICAgICAgICAgKChQV1JfVHlwZURlZiAqKSBQV1JfQkFTRSkNCisjZGVmaW5lIERBQyAgICAgICAgICAgICAgICAgKChEQUNfVHlwZURlZiAqKSBEQUNfQkFTRSkNCisjZGVmaW5lIFRJTTEgICAgICAgICAgICAgICAgKChUSU1fVHlwZURlZiAqKSBUSU0xX0JBU0UpDQorI2RlZmluZSBUSU04ICAgICAgICAgICAgICAgICgoVElNX1R5cGVEZWYgKikgVElNOF9CQVNFKQ0KKyNkZWZpbmUgVVNBUlQxICAgICAgICAgICAgICAoKFVTQVJUX1R5cGVEZWYgKikgVVNBUlQxX0JBU0UpDQorI2RlZmluZSBVU0FSVDYgICAgICAgICAgICAgICgoVVNBUlRfVHlwZURlZiAqKSBVU0FSVDZfQkFTRSkNCisjZGVmaW5lIEFEQyAgICAgICAgICAgICAgICAgKChBRENfQ29tbW9uX1R5cGVEZWYgKikgQURDX0JBU0UpDQorI2RlZmluZSBBREMxICAgICAgICAgICAgICAgICgoQURDX1R5cGVEZWYgKikgQURDMV9CQVNFKQ0KKyNkZWZpbmUgQURDMiAgICAgICAgICAgICAgICAoKEFEQ19UeXBlRGVmICopIEFEQzJfQkFTRSkNCisjZGVmaW5lIEFEQzMgICAgICAgICAgICAgICAgKChBRENfVHlwZURlZiAqKSBBREMzX0JBU0UpDQorI2RlZmluZSBTRElPICAgICAgICAgICAgICAgICgoU0RJT19UeXBlRGVmICopIFNESU9fQkFTRSkNCisjZGVmaW5lIFNQSTEgICAgICAgICAgICAgICAgKChTUElfVHlwZURlZiAqKSBTUEkxX0JBU0UpDQorI2RlZmluZSBTWVNDRkcgICAgICAgICAgICAgICgoU1lTQ0ZHX1R5cGVEZWYgKikgU1lTQ0ZHX0JBU0UpDQorI2RlZmluZSBFWFRJICAgICAgICAgICAgICAgICgoRVhUSV9UeXBlRGVmICopIEVYVElfQkFTRSkNCisjZGVmaW5lIFRJTTkgICAgICAgICAgICAgICAgKChUSU1fVHlwZURlZiAqKSBUSU05X0JBU0UpDQorI2RlZmluZSBUSU0xMCAgICAgICAgICAgICAgICgoVElNX1R5cGVEZWYgKikgVElNMTBfQkFTRSkNCisjZGVmaW5lIFRJTTExICAgICAgICAgICAgICAgKChUSU1fVHlwZURlZiAqKSBUSU0xMV9CQVNFKQ0KKyNkZWZpbmUgR1BJT0EgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPQV9CQVNFKQ0KKyNkZWZpbmUgR1BJT0IgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPQl9CQVNFKQ0KKyNkZWZpbmUgR1BJT0MgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPQ19CQVNFKQ0KKyNkZWZpbmUgR1BJT0QgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPRF9CQVNFKQ0KKyNkZWZpbmUgR1BJT0UgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPRV9CQVNFKQ0KKyNkZWZpbmUgR1BJT0YgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPRl9CQVNFKQ0KKyNkZWZpbmUgR1BJT0cgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPR19CQVNFKQ0KKyNkZWZpbmUgR1BJT0ggICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPSF9CQVNFKQ0KKyNkZWZpbmUgR1BJT0kgICAgICAgICAgICAgICAoKEdQSU9fVHlwZURlZiAqKSBHUElPSV9CQVNFKQ0KKyNkZWZpbmUgQ1JDICAgICAgICAgICAgICAgICAoKENSQ19UeXBlRGVmICopIENSQ19CQVNFKQ0KKyNkZWZpbmUgUkNDICAgICAgICAgICAgICAgICAoKFJDQ19UeXBlRGVmICopIFJDQ19CQVNFKQ0KKyNkZWZpbmUgRkxBU0ggICAgICAgICAgICAgICAoKEZMQVNIX1R5cGVEZWYgKikgRkxBU0hfUl9CQVNFKQ0KKyNkZWZpbmUgRE1BMSAgICAgICAgICAgICAgICAoKERNQV9UeXBlRGVmICopIERNQTFfQkFTRSkNCisjZGVmaW5lIERNQTFfU3RyZWFtMCAgICAgICAgKChETUFfU3RyZWFtX1R5cGVEZWYgKikgRE1BMV9TdHJlYW0wX0JBU0UpDQorI2RlZmluZSBETUExX1N0cmVhbTEgICAgICAgICgoRE1BX1N0cmVhbV9UeXBlRGVmICopIERNQTFfU3RyZWFtMV9CQVNFKQ0KKyNkZWZpbmUgRE1BMV9TdHJlYW0yICAgICAgICAoKERNQV9TdHJlYW1fVHlwZURlZiAqKSBETUExX1N0cmVhbTJfQkFTRSkNCisjZGVmaW5lIERNQTFfU3RyZWFtMyAgICAgICAgKChETUFfU3RyZWFtX1R5cGVEZWYgKikgRE1BMV9TdHJlYW0zX0JBU0UpDQorI2RlZmluZSBETUExX1N0cmVhbTQgICAgICAgICgoRE1BX1N0cmVhbV9UeXBlRGVmICopIERNQTFfU3RyZWFtNF9CQVNFKQ0KKyNkZWZpbmUgRE1BMV9TdHJlYW01ICAgICAgICAoKERNQV9TdHJlYW1fVHlwZURlZiAqKSBETUExX1N0cmVhbTVfQkFTRSkNCisjZGVmaW5lIERNQTFfU3RyZWFtNiAgICAgICAgKChETUFfU3RyZWFtX1R5cGVEZWYgKikgRE1BMV9TdHJlYW02X0JBU0UpDQorI2RlZmluZSBETUExX1N0cmVhbTcgICAgICAgICgoRE1BX1N0cmVhbV9UeXBlRGVmICopIERNQTFfU3RyZWFtN19CQVNFKQ0KKyNkZWZpbmUgRE1BMiAgICAgICAgICAgICAgICAoKERNQV9UeXBlRGVmICopIERNQTJfQkFTRSkNCisjZGVmaW5lIERNQTJfU3RyZWFtMCAgICAgICAgKChETUFfU3RyZWFtX1R5cGVEZWYgKikgRE1BMl9TdHJlYW0wX0JBU0UpDQorI2RlZmluZSBETUEyX1N0cmVhbTEgICAgICAgICgoRE1BX1N0cmVhbV9UeXBlRGVmICopIERNQTJfU3RyZWFtMV9CQVNFKQ0KKyNkZWZpbmUgRE1BMl9TdHJlYW0yICAgICAgICAoKERNQV9TdHJlYW1fVHlwZURlZiAqKSBETUEyX1N0cmVhbTJfQkFTRSkNCisjZGVmaW5lIERNQTJfU3RyZWFtMyAgICAgICAgKChETUFfU3RyZWFtX1R5cGVEZWYgKikgRE1BMl9TdHJlYW0zX0JBU0UpDQorI2RlZmluZSBETUEyX1N0cmVhbTQgICAgICAgICgoRE1BX1N0cmVhbV9UeXBlRGVmICopIERNQTJfU3RyZWFtNF9CQVNFKQ0KKyNkZWZpbmUgRE1BMl9TdHJlYW01ICAgICAgICAoKERNQV9TdHJlYW1fVHlwZURlZiAqKSBETUEyX1N0cmVhbTVfQkFTRSkNCisjZGVmaW5lIERNQTJfU3RyZWFtNiAgICAgICAgKChETUFfU3RyZWFtX1R5cGVEZWYgKikgRE1BMl9TdHJlYW02X0JBU0UpDQorI2RlZmluZSBETUEyX1N0cmVhbTcgICAgICAgICgoRE1BX1N0cmVhbV9UeXBlRGVmICopIERNQTJfU3RyZWFtN19CQVNFKQ0KKyNkZWZpbmUgRVRIICAgICAgICAgICAgICAgICAoKEVUSF9UeXBlRGVmICopIEVUSF9CQVNFKSAgDQorI2RlZmluZSBEQ01JICAgICAgICAgICAgICAgICgoRENNSV9UeXBlRGVmICopIERDTUlfQkFTRSkNCisjZGVmaW5lIENSWVAgICAgICAgICAgICAgICAgKChDUllQX1R5cGVEZWYgKikgQ1JZUF9CQVNFKQ0KKyNkZWZpbmUgSEFTSCAgICAgICAgICAgICAgICAoKEhBU0hfVHlwZURlZiAqKSBIQVNIX0JBU0UpDQorI2RlZmluZSBSTkcgICAgICAgICAgICAgICAgICgoUk5HX1R5cGVEZWYgKikgUk5HX0JBU0UpDQorI2RlZmluZSBGU01DX0JhbmsxICAgICAgICAgICgoRlNNQ19CYW5rMV9UeXBlRGVmICopIEZTTUNfQmFuazFfUl9CQVNFKQ0KKyNkZWZpbmUgRlNNQ19CYW5rMUUgICAgICAgICAoKEZTTUNfQmFuazFFX1R5cGVEZWYgKikgRlNNQ19CYW5rMUVfUl9CQVNFKQ0KKyNkZWZpbmUgRlNNQ19CYW5rMiAgICAgICAgICAoKEZTTUNfQmFuazJfVHlwZURlZiAqKSBGU01DX0JhbmsyX1JfQkFTRSkNCisjZGVmaW5lIEZTTUNfQmFuazMgICAgICAgICAgKChGU01DX0JhbmszX1R5cGVEZWYgKikgRlNNQ19CYW5rM19SX0JBU0UpDQorI2RlZmluZSBGU01DX0Jhbms0ICAgICAgICAgICgoRlNNQ19CYW5rNF9UeXBlRGVmICopIEZTTUNfQmFuazRfUl9CQVNFKQ0KKyNkZWZpbmUgREJHTUNVICAgICAgICAgICAgICAoKERCR01DVV9UeXBlRGVmICopIERCR01DVV9CQVNFKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfY29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKyAgDQorICAvKiogQGFkZHRvZ3JvdXAgUGVyaXBoZXJhbF9SZWdpc3RlcnNfQml0c19EZWZpbml0aW9uDQorICAqIEB7DQorICAqLw0KKyAgICANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmlwaGVyYWwgUmVnaXN0ZXJzX0JpdHNfRGVmaW5pdGlvbiAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICBBbmFsb2cgdG8gRGlnaXRhbCBDb252ZXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfU1JfQVdEICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgICAgICAgICAgICAgICAvKiE8QW5hbG9nIHdhdGNoZG9nIGZsYWcgKi8NCisjZGVmaW5lICBBRENfU1JfRU9DICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgICAgICAgICAgICAgICAvKiE8RW5kIG9mIGNvbnZlcnNpb24gKi8NCisjZGVmaW5lICBBRENfU1JfSkVPQyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgICAgICAgICAgICAgICAvKiE8SW5qZWN0ZWQgY2hhbm5lbCBlbmQgb2YgY29udmVyc2lvbiAqLw0KKyNkZWZpbmUgIEFEQ19TUl9KU1RSVCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KSAgICAgICAgICAgICAgIC8qITxJbmplY3RlZCBjaGFubmVsIFN0YXJ0IGZsYWcgKi8NCisjZGVmaW5lICBBRENfU1JfU1RSVCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxMCkgICAgICAgICAgICAgICAvKiE8UmVndWxhciBjaGFubmVsIFN0YXJ0IGZsYWcgKi8NCisjZGVmaW5lICBBRENfU1JfT1ZSICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgyMCkgICAgICAgICAgICAgICAvKiE8T3ZlcnJ1biBmbGFnICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfQ1IxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRENIICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMUYpICAgICAgICAvKiE8QVdEQ0hbNDowXSBiaXRzIChBbmFsb2cgd2F0Y2hkb2cgY2hhbm5lbCBzZWxlY3QgYml0cykgKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRENIXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRENIXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRENIXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRENIXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRENIXzQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBBRENfQ1IxX0VPQ0lFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8SW50ZXJydXB0IGVuYWJsZSBmb3IgRU9DICovDQorI2RlZmluZSAgQURDX0NSMV9BV0RJRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEFBbmFsb2cgV2F0Y2hkb2cgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfSkVPQ0lFICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxJbnRlcnJ1cHQgZW5hYmxlIGZvciBpbmplY3RlZCBjaGFubmVscyAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxTY2FuIG1vZGUgKi8NCisjZGVmaW5lICBBRENfQ1IxX0FXRFNHTCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RW5hYmxlIHRoZSB3YXRjaGRvZyBvbiBhIHNpbmdsZSBjaGFubmVsIGluIHNjYW4gbW9kZSAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfSkFVVE8gICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxBdXRvbWF0aWMgaW5qZWN0ZWQgZ3JvdXAgY29udmVyc2lvbiAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfRElTQ0VOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxEaXNjb250aW51b3VzIG1vZGUgb24gcmVndWxhciBjaGFubmVscyAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfSkRJU0NFTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxEaXNjb250aW51b3VzIG1vZGUgb24gaW5qZWN0ZWQgY2hhbm5lbHMgKi8NCisjZGVmaW5lICBBRENfQ1IxX0RJU0NOVU0gICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEUwMDApICAgICAgICAvKiE8RElTQ05VTVsyOjBdIGJpdHMgKERpc2NvbnRpbnVvdXMgbW9kZSBjaGFubmVsIGNvdW50KSAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfRElTQ05VTV8wICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfRElTQ05VTV8xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfRElTQ05VTV8yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfSkFXREVOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxBbmFsb2cgd2F0Y2hkb2cgZW5hYmxlIG9uIGluamVjdGVkIGNoYW5uZWxzICovDQorI2RlZmluZSAgQURDX0NSMV9BV0RFTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEFuYWxvZyB3YXRjaGRvZyBlbmFibGUgb24gcmVndWxhciBjaGFubmVscyAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfUkVTICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMzAwMDAwMCkgICAgICAgIC8qITxSRVNbMjowXSBiaXRzIChSZXNvbHV0aW9uKSAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfUkVTXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfUkVTXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19DUjFfT1ZSSUUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgICAvKiE8b3ZlcnJ1biBpbnRlcnJ1cHQgZW5hYmxlICovDQorICANCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19DUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEFEQ19DUjJfQURPTiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxBL0QgQ29udmVydGVyIE9OIC8gT0ZGICovDQorI2RlZmluZSAgQURDX0NSMl9DT05UICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPENvbnRpbnVvdXMgQ29udmVyc2lvbiAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxEaXJlY3QgTWVtb3J5IGFjY2VzcyBtb2RlICovDQorI2RlZmluZSAgQURDX0NSMl9ERFMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPERNQSBkaXNhYmxlIHNlbGVjdGlvbiAoU2luZ2xlIEFEQykgKi8NCisjZGVmaW5lICBBRENfQ1IyX0VPQ1MgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RW5kIG9mIGNvbnZlcnNpb24gc2VsZWN0aW9uICovDQorI2RlZmluZSAgQURDX0NSMl9BTElHTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPERhdGEgQWxpZ25tZW50ICovDQorI2RlZmluZSAgQURDX0NSMl9KRVhUU0VMICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEYwMDAwKSAgICAgICAgLyohPEpFWFRTRUxbMzowXSBiaXRzIChFeHRlcm5hbCBldmVudCBzZWxlY3QgZm9yIGluamVjdGVkIGdyb3VwKSAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVFNFTF8wICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVFNFTF8xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVFNFTF8yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVFNFTF8zICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVEVOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDMwMDAwMCkgICAgICAgIC8qITxKRVhURU5bMTowXSBiaXRzIChFeHRlcm5hbCBUcmlnZ2VyIENvbnZlcnNpb24gbW9kZSBmb3IgaW5qZWN0ZWQgY2hhbm5lbHNwKSAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVEVOXzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSkVYVEVOXzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19DUjJfSlNXU1RBUlQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxTdGFydCBDb252ZXJzaW9uIG9mIGluamVjdGVkIGNoYW5uZWxzICovDQorI2RlZmluZSAgQURDX0NSMl9FWFRTRUwgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKSAgICAgICAgLyohPEVYVFNFTFszOjBdIGJpdHMgKEV4dGVybmFsIEV2ZW50IFNlbGVjdCBmb3IgcmVndWxhciBncm91cCkgKi8NCisjZGVmaW5lICBBRENfQ1IyX0VYVFNFTF8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfQ1IyX0VYVFNFTF8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfQ1IyX0VYVFNFTF8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfQ1IyX0VYVFNFTF8zICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBBRENfQ1IyX0VYVEVOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzAwMDAwMDApICAgICAgICAvKiE8RVhURU5bMTowXSBiaXRzIChFeHRlcm5hbCBUcmlnZ2VyIENvbnZlcnNpb24gbW9kZSBmb3IgcmVndWxhciBjaGFubmVsc3ApICovDQorI2RlZmluZSAgQURDX0NSMl9FWFRFTl8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX0NSMl9FWFRFTl8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX0NSMl9TV1NUQVJUICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPFN0YXJ0IENvbnZlcnNpb24gb2YgcmVndWxhciBjaGFubmVscyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfU01QUjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEwICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA3KSAgICAgICAgLyohPFNNUDEwWzI6MF0gYml0cyAoQ2hhbm5lbCAxMCBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEwXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEwXzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEwXzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDExICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDM4KSAgICAgICAgLyohPFNNUDExWzI6MF0gYml0cyAoQ2hhbm5lbCAxMSBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDExXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDExXzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDExXzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMUMwKSAgICAgICAgLyohPFNNUDEyWzI6MF0gYml0cyAoQ2hhbm5lbCAxMiBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEyXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEyXzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEyXzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEzICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwRTAwKSAgICAgICAgLyohPFNNUDEzWzI6MF0gYml0cyAoQ2hhbm5lbCAxMyBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEzXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEzXzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDEzXzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE0ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA3MDAwKSAgICAgICAgLyohPFNNUDE0WzI6MF0gYml0cyAoQ2hhbm5lbCAxNCBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE0XzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE0XzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE0XzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE1ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDM4MDAwKSAgICAgICAgLyohPFNNUDE1WzI6MF0gYml0cyAoQ2hhbm5lbCAxNSBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE1XzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE1XzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE1XzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE2ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMUMwMDAwKSAgICAgICAgLyohPFNNUDE2WzI6MF0gYml0cyAoQ2hhbm5lbCAxNiBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE2XzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE2XzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE2XzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE3ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRTAwMDAwKSAgICAgICAgLyohPFNNUDE3WzI6MF0gYml0cyAoQ2hhbm5lbCAxNyBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE3XzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE3XzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE3XzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE4ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA3MDAwMDAwKSAgICAgICAgLyohPFNNUDE4WzI6MF0gYml0cyAoQ2hhbm5lbCAxOCBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE4XzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE4XzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIxX1NNUDE4XzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19TTVBSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDcpICAgICAgICAvKiE8U01QMFsyOjBdIGJpdHMgKENoYW5uZWwgMCBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDBfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDBfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDBfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDM4KSAgICAgICAgLyohPFNNUDFbMjowXSBiaXRzIChDaGFubmVsIDEgU2FtcGxlIHRpbWUgc2VsZWN0aW9uKSAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVAxXzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVAxXzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVAxXzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVAyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDFDMCkgICAgICAgIC8qITxTTVAyWzI6MF0gYml0cyAoQ2hhbm5lbCAyIFNhbXBsZSB0aW1lIHNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QMl8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QMl8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QMl8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBFMDApICAgICAgICAvKiE8U01QM1syOjBdIGJpdHMgKENoYW5uZWwgMyBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDNfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDNfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDNfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA3MDAwKSAgICAgICAgLyohPFNNUDRbMjowXSBiaXRzIChDaGFubmVsIDQgU2FtcGxlIHRpbWUgc2VsZWN0aW9uKSAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA0XzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA0XzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA0XzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAzODAwMCkgICAgICAgIC8qITxTTVA1WzI6MF0gYml0cyAoQ2hhbm5lbCA1IFNhbXBsZSB0aW1lIHNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QNV8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QNV8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QNV8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxQzAwMDApICAgICAgICAvKiE8U01QNlsyOjBdIGJpdHMgKENoYW5uZWwgNiBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDZfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDZfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDZfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRTAwMDAwKSAgICAgICAgLyohPFNNUDdbMjowXSBiaXRzIChDaGFubmVsIDcgU2FtcGxlIHRpbWUgc2VsZWN0aW9uKSAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA3XzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA3XzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA3XzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TTVBSMl9TTVA4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNzAwMDAwMCkgICAgICAgIC8qITxTTVA4WzI6MF0gYml0cyAoQ2hhbm5lbCA4IFNhbXBsZSB0aW1lIHNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QOF8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QOF8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QOF8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfU01QUjJfU01QOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzgwMDAwMDApICAgICAgICAvKiE8U01QOVsyOjBdIGJpdHMgKENoYW5uZWwgOSBTYW1wbGUgdGltZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDlfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDlfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NNUFIyX1NNUDlfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19KT0ZSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfSk9GUjFfSk9GRlNFVDEgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEZGRikgICAgICAgICAgICAvKiE8RGF0YSBvZmZzZXQgZm9yIGluamVjdGVkIGNoYW5uZWwgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfSk9GUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX0pPRlIyX0pPRkZTRVQyICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDBGRkYpICAgICAgICAgICAgLyohPERhdGEgb2Zmc2V0IGZvciBpbmplY3RlZCBjaGFubmVsIDIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX0pPRlIzIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEFEQ19KT0ZSM19KT0ZGU0VUMyAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwRkZGKSAgICAgICAgICAgIC8qITxEYXRhIG9mZnNldCBmb3IgaW5qZWN0ZWQgY2hhbm5lbCAzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19KT0ZSNCByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfSk9GUjRfSk9GRlNFVDQgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEZGRikgICAgICAgICAgICAvKiE8RGF0YSBvZmZzZXQgZm9yIGluamVjdGVkIGNoYW5uZWwgNCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX0hUUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX0hUUl9IVCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDBGRkYpICAgICAgICAgICAgLyohPEFuYWxvZyB3YXRjaGRvZyBoaWdoIHRocmVzaG9sZCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX0xUUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX0xUUl9MVCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDBGRkYpICAgICAgICAgICAgLyohPEFuYWxvZyB3YXRjaGRvZyBsb3cgdGhyZXNob2xkICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfU1FSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMUYpICAgICAgICAvKiE8U1ExM1s0OjBdIGJpdHMgKDEzdGggY29udmVyc2lvbiBpbiByZWd1bGFyIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTNfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTNfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTNfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTNfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTNfNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDNFMCkgICAgICAgIC8qITxTUTE0WzQ6MF0gYml0cyAoMTR0aCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjFfU1ExNF8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjFfU1ExNF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjFfU1ExNF8yICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjFfU1ExNF8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjFfU1ExNF80ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjFfU1ExNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA3QzAwKSAgICAgICAgLyohPFNRMTVbNDowXSBiaXRzICgxNXRoIGNvbnZlcnNpb24gaW4gcmVndWxhciBzZXF1ZW5jZSkgKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTE1XzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTE1XzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTE1XzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTE1XzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTE1XzQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBBRENfU1FSMV9TUTE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRjgwMDApICAgICAgICAvKiE8U1ExNls0OjBdIGJpdHMgKDE2dGggY29udmVyc2lvbiBpbiByZWd1bGFyIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTZfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTZfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTZfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTZfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX1NRMTZfNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIxX0wgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEYwMDAwMCkgICAgICAgIC8qITxMWzM6MF0gYml0cyAoUmVndWxhciBjaGFubmVsIHNlcXVlbmNlIGxlbmd0aCkgKi8NCisjZGVmaW5lICBBRENfU1FSMV9MXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfU1FSMV9MXzEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfU1FSMV9MXzIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfU1FSMV9MXzMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19TUVIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxRikgICAgICAgIC8qITxTUTdbNDowXSBiaXRzICg3dGggY29udmVyc2lvbiBpbiByZWd1bGFyIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRN18wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRN18xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRN18yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRN18zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRN180ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDNFMCkgICAgICAgIC8qITxTUThbNDowXSBiaXRzICg4dGggY29udmVyc2lvbiBpbiByZWd1bGFyIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROF8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROF8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROF8yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROF8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROF80ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwN0MwMCkgICAgICAgIC8qITxTUTlbNDowXSBiaXRzICg5dGggY29udmVyc2lvbiBpbiByZWd1bGFyIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROV8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROV8yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NROV80ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBGODAwMCkgICAgICAgIC8qITxTUTEwWzQ6MF0gYml0cyAoMTB0aCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjJfU1ExMF8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjJfU1ExMF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjJfU1ExMF8yICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjJfU1ExMF8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjJfU1ExMF80ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjJfU1ExMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxRjAwMDAwKSAgICAgICAgLyohPFNRMTFbNDowXSBiaXRzICgxMXRoIGNvbnZlcnNpb24gaW4gcmVndWxhciBzZXF1ZW5jZSkgKi8NCisjZGVmaW5lICBBRENfU1FSMl9TUTExXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfU1FSMl9TUTExXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfU1FSMl9TUTExXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfU1FSMl9TUTExXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBBRENfU1FSMl9TUTExXzQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBBRENfU1FSMl9TUTEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4M0UwMDAwMDApICAgICAgICAvKiE8U1ExMls0OjBdIGJpdHMgKDEydGggY29udmVyc2lvbiBpbiByZWd1bGFyIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRMTJfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRMTJfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRMTJfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRMTJfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19TUVIyX1NRMTJfNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX1NRUjMgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX1NRUjNfU1ExICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDFGKSAgICAgICAgLyohPFNRMVs0OjBdIGJpdHMgKDFzdCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjNfU1ExXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjNfU1ExXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjNfU1ExXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjNfU1ExXzMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjNfU1ExXzQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwM0UwKSAgICAgICAgLyohPFNRMls0OjBdIGJpdHMgKDJuZCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EyXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EyXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EyXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EyXzMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EyXzQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA3QzAwKSAgICAgICAgLyohPFNRM1s0OjBdIGJpdHMgKDNyZCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EzXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EzXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EzXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EzXzMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjNfU1EzXzQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEY4MDAwKSAgICAgICAgLyohPFNRNFs0OjBdIGJpdHMgKDR0aCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E0XzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E0XzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E0XzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E0XzMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E0XzQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxRjAwMDAwKSAgICAgICAgLyohPFNRNVs0OjBdIGJpdHMgKDV0aCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E1XzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E1XzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E1XzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E1XzMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E1XzQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDNFMDAwMDAwKSAgICAgICAgLyohPFNRNls0OjBdIGJpdHMgKDZ0aCBjb252ZXJzaW9uIGluIHJlZ3VsYXIgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E2XzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E2XzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E2XzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E2XzMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX1NRUjNfU1E2XzQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfSlNRUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1ExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMUYpICAgICAgICAvKiE8SlNRMVs0OjBdIGJpdHMgKDFzdCBjb252ZXJzaW9uIGluIGluamVjdGVkIHNlcXVlbmNlKSAqLyAgDQorI2RlZmluZSAgQURDX0pTUVJfSlNRMV8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRMV8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRMV8yICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRMV8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRMV80ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwM0UwKSAgICAgICAgLyohPEpTUTJbNDowXSBiaXRzICgybmQgY29udmVyc2lvbiBpbiBpbmplY3RlZCBzZXF1ZW5jZSkgKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1EyXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1EyXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1EyXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1EyXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1EyXzQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBBRENfSlNRUl9KU1EzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDdDMDApICAgICAgICAvKiE8SlNRM1s0OjBdIGJpdHMgKDNyZCBjb252ZXJzaW9uIGluIGluamVjdGVkIHNlcXVlbmNlKSAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pTUTNfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pTUTNfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pTUTNfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pTUTNfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pTUTNfNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pTUTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBGODAwMCkgICAgICAgIC8qITxKU1E0WzQ6MF0gYml0cyAoNHRoIGNvbnZlcnNpb24gaW4gaW5qZWN0ZWQgc2VxdWVuY2UpICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRNF8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRNF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRNF8yICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRNF8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgQURDX0pTUVJfSlNRNF80ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgQURDX0pTUVJfSkwgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMzAwMDAwKSAgICAgICAgLyohPEpMWzE6MF0gYml0cyAoSW5qZWN0ZWQgU2VxdWVuY2UgbGVuZ3RoKSAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pMXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19KU1FSX0pMXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX0pEUjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX0pEUjFfSkRBVEEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEZGRkYpICAgICAgICAgICAgLyohPEluamVjdGVkIGRhdGEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19KRFIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEFEQ19KRFIyX0pEQVRBICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKSAgICAgICAgICAgIC8qITxJbmplY3RlZCBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfSkRSMyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfSkRSM19KREFUQSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8SW5qZWN0ZWQgZGF0YSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX0pEUjQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX0pEUjRfSkRBVEEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEZGRkYpICAgICAgICAgICAgLyohPEluamVjdGVkIGRhdGEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfRFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEFEQ19EUl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkZGRikgICAgICAgIC8qITxSZWd1bGFyIGRhdGEgKi8NCisjZGVmaW5lICBBRENfRFJfQURDMkRBVEEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRjAwMDApICAgICAgICAvKiE8QURDMiBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBBRENfQ1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBBRENfQ1NSX0FXRDEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8QURDMSBBbmFsb2cgd2F0Y2hkb2cgZmxhZyAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfRU9DMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxBREMxIEVuZCBvZiBjb252ZXJzaW9uICovDQorI2RlZmluZSAgQURDX0NTUl9KRU9DMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEFEQzEgSW5qZWN0ZWQgY2hhbm5lbCBlbmQgb2YgY29udmVyc2lvbiAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfSlNUUlQxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxBREMxIEluamVjdGVkIGNoYW5uZWwgU3RhcnQgZmxhZyAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfU1RSVDEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxBREMxIFJlZ3VsYXIgY2hhbm5lbCBTdGFydCBmbGFnICovDQorI2RlZmluZSAgQURDX0NTUl9ET1ZSMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEFEQzEgRE1BIG92ZXJydW4gIGZsYWcgKi8NCisjZGVmaW5lICBBRENfQ1NSX0FXRDIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8QURDMiBBbmFsb2cgd2F0Y2hkb2cgZmxhZyAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfRU9DMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxBREMyIEVuZCBvZiBjb252ZXJzaW9uICovDQorI2RlZmluZSAgQURDX0NTUl9KRU9DMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEFEQzIgSW5qZWN0ZWQgY2hhbm5lbCBlbmQgb2YgY29udmVyc2lvbiAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfSlNUUlQyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxBREMyIEluamVjdGVkIGNoYW5uZWwgU3RhcnQgZmxhZyAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfU1RSVDIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxBREMyIFJlZ3VsYXIgY2hhbm5lbCBTdGFydCBmbGFnICovDQorI2RlZmluZSAgQURDX0NTUl9ET1ZSMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEFEQzIgRE1BIG92ZXJydW4gIGZsYWcgKi8NCisjZGVmaW5lICBBRENfQ1NSX0FXRDMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8QURDMyBBbmFsb2cgd2F0Y2hkb2cgZmxhZyAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfRU9DMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxBREMzIEVuZCBvZiBjb252ZXJzaW9uICovDQorI2RlZmluZSAgQURDX0NTUl9KRU9DMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEFEQzMgSW5qZWN0ZWQgY2hhbm5lbCBlbmQgb2YgY29udmVyc2lvbiAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfSlNUUlQzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxBREMzIEluamVjdGVkIGNoYW5uZWwgU3RhcnQgZmxhZyAqLw0KKyNkZWZpbmUgIEFEQ19DU1JfU1RSVDMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxBREMzIFJlZ3VsYXIgY2hhbm5lbCBTdGFydCBmbGFnICovDQorI2RlZmluZSAgQURDX0NTUl9ET1ZSMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEFEQzMgRE1BIG92ZXJydW4gIGZsYWcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEFEQ19DQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEFEQ19DQ1JfTVVMVEkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxRikgICAgICAgIC8qITxNVUxUSVs0OjBdIGJpdHMgKE11bHRpLUFEQyBtb2RlIHNlbGVjdGlvbikgKi8gIA0KKyNkZWZpbmUgIEFEQ19DQ1JfTVVMVElfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEFEQ19DQ1JfTVVMVElfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEFEQ19DQ1JfTVVMVElfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEFEQ19DQ1JfTVVMVElfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEFEQ19DQ1JfTVVMVElfNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEFEQ19DQ1JfREVMQVkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEYwMCkgICAgICAgIC8qITxERUxBWVszOjBdIGJpdHMgKERlbGF5IGJldHdlZW4gMiBzYW1wbGluZyBwaGFzZXMpICovICANCisjZGVmaW5lICBBRENfQ0NSX0RFTEFZXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfQ0NSX0RFTEFZXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfQ0NSX0RFTEFZXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBBRENfQ0NSX0RFTEFZXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBBRENfQ0NSX0REUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RE1BIGRpc2FibGUgc2VsZWN0aW9uIChNdWx0aS1BREMgbW9kZSkgKi8NCisjZGVmaW5lICBBRENfQ0NSX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEMwMDApICAgICAgICAvKiE8RE1BWzE6MF0gYml0cyAoRGlyZWN0IE1lbW9yeSBBY2Nlc3MgbW9kZSBmb3IgbXVsdGltb2RlKSAqLyAgDQorI2RlZmluZSAgQURDX0NDUl9ETUFfMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgQURDX0NDUl9ETUFfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgQURDX0NDUl9BRENQUkUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDAwKSAgICAgICAgLyohPEFEQ1BSRVsxOjBdIGJpdHMgKEFEQyBwcmVzY2FsZXIpICovICANCisjZGVmaW5lICBBRENfQ0NSX0FEQ1BSRV8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBBRENfQ0NSX0FEQ1BSRV8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBBRENfQ0NSX1ZCQVRFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8VkJBVCBFbmFibGUgKi8NCisjZGVmaW5lICBBRENfQ0NSX1RTVlJFRkUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8VGVtcGVyYXR1cmUgU2Vuc29yIGFuZCBWUkVGSU5UIEVuYWJsZSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQURDX0NEUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQURDX0NEUl9EQVRBMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGRkYpICAgICAgICAgLyohPDFzdCBkYXRhIG9mIGEgcGFpciBvZiByZWd1bGFyIGNvbnZlcnNpb25zICovDQorI2RlZmluZSAgQURDX0NEUl9EQVRBMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRjAwMDApICAgICAgICAgLyohPDJuZCBkYXRhIG9mIGEgcGFpciBvZiByZWd1bGFyIGNvbnZlcnNpb25zICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qITxDQU4gY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyAqLw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX01DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX01DUl9JTlJRICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPEluaXRpYWxpemF0aW9uIFJlcXVlc3QgKi8NCisjZGVmaW5lICBDQU5fTUNSX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8U2xlZXAgTW9kZSBSZXF1ZXN0ICovDQorI2RlZmluZSAgQ0FOX01DUl9UWEZQICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPFRyYW5zbWl0IEZJRk8gUHJpb3JpdHkgKi8NCisjZGVmaW5lICBDQU5fTUNSX1JGTE0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8UmVjZWl2ZSBGSUZPIExvY2tlZCBNb2RlICovDQorI2RlZmluZSAgQ0FOX01DUl9OQVJUICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPE5vIEF1dG9tYXRpYyBSZXRyYW5zbWlzc2lvbiAqLw0KKyNkZWZpbmUgIENBTl9NQ1JfQVdVTSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxBdXRvbWF0aWMgV2FrZXVwIE1vZGUgKi8NCisjZGVmaW5lICBDQU5fTUNSX0FCT00gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8QXV0b21hdGljIEJ1cy1PZmYgTWFuYWdlbWVudCAqLw0KKyNkZWZpbmUgIENBTl9NQ1JfVFRDTSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxUaW1lIFRyaWdnZXJlZCBDb21tdW5pY2F0aW9uIE1vZGUgKi8NCisjZGVmaW5lICBDQU5fTUNSX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4ODAwMCkgICAgICAgICAgICAvKiE8YnhDQU4gc29mdHdhcmUgbWFzdGVyIHJlc2V0ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fTVNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fTVNSX0lOQUsgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8SW5pdGlhbGl6YXRpb24gQWNrbm93bGVkZ2UgKi8NCisjZGVmaW5lICBDQU5fTVNSX1NMQUsgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8U2xlZXAgQWNrbm93bGVkZ2UgKi8NCisjZGVmaW5lICBDQU5fTVNSX0VSUkkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8RXJyb3IgSW50ZXJydXB0ICovDQorI2RlZmluZSAgQ0FOX01TUl9XS1VJICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPFdha2V1cCBJbnRlcnJ1cHQgKi8NCisjZGVmaW5lICBDQU5fTVNSX1NMQUtJICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8U2xlZXAgQWNrbm93bGVkZ2UgSW50ZXJydXB0ICovDQorI2RlZmluZSAgQ0FOX01TUl9UWE0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPFRyYW5zbWl0IE1vZGUgKi8NCisjZGVmaW5lICBDQU5fTVNSX1JYTSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8UmVjZWl2ZSBNb2RlICovDQorI2RlZmluZSAgQ0FOX01TUl9TQU1QICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApICAgICAgICAgICAgLyohPExhc3QgU2FtcGxlIFBvaW50ICovDQorI2RlZmluZSAgQ0FOX01TUl9SWCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPENBTiBSeCBTaWduYWwgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9UU1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9UU1JfUlFDUDAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxSZXF1ZXN0IENvbXBsZXRlZCBNYWlsYm94MCAqLw0KKyNkZWZpbmUgIENBTl9UU1JfVFhPSzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxUcmFuc21pc3Npb24gT0sgb2YgTWFpbGJveDAgKi8NCisjZGVmaW5lICBDQU5fVFNSX0FMU1QwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8QXJiaXRyYXRpb24gTG9zdCBmb3IgTWFpbGJveDAgKi8NCisjZGVmaW5lICBDQU5fVFNSX1RFUlIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8VHJhbnNtaXNzaW9uIEVycm9yIG9mIE1haWxib3gwICovDQorI2RlZmluZSAgQ0FOX1RTUl9BQlJRMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEFib3J0IFJlcXVlc3QgZm9yIE1haWxib3gwICovDQorI2RlZmluZSAgQ0FOX1RTUl9SUUNQMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPFJlcXVlc3QgQ29tcGxldGVkIE1haWxib3gxICovDQorI2RlZmluZSAgQ0FOX1RTUl9UWE9LMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPFRyYW5zbWlzc2lvbiBPSyBvZiBNYWlsYm94MSAqLw0KKyNkZWZpbmUgIENBTl9UU1JfQUxTVDEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxBcmJpdHJhdGlvbiBMb3N0IGZvciBNYWlsYm94MSAqLw0KKyNkZWZpbmUgIENBTl9UU1JfVEVSUjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxUcmFuc21pc3Npb24gRXJyb3Igb2YgTWFpbGJveDEgKi8NCisjZGVmaW5lICBDQU5fVFNSX0FCUlExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8QWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveCAxICovDQorI2RlZmluZSAgQ0FOX1RTUl9SUUNQMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPFJlcXVlc3QgQ29tcGxldGVkIE1haWxib3gyICovDQorI2RlZmluZSAgQ0FOX1RTUl9UWE9LMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPFRyYW5zbWlzc2lvbiBPSyBvZiBNYWlsYm94IDIgKi8NCisjZGVmaW5lICBDQU5fVFNSX0FMU1QyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8QXJiaXRyYXRpb24gTG9zdCBmb3IgbWFpbGJveCAyICovDQorI2RlZmluZSAgQ0FOX1RTUl9URVJSMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPFRyYW5zbWlzc2lvbiBFcnJvciBvZiBNYWlsYm94IDIgKi8NCisjZGVmaW5lICBDQU5fVFNSX0FCUlEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8QWJvcnQgUmVxdWVzdCBmb3IgTWFpbGJveCAyICovDQorI2RlZmluZSAgQ0FOX1RTUl9DT0RFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAzMDAwMDAwKSAgICAgICAgLyohPE1haWxib3ggQ29kZSAqLw0KKw0KKyNkZWZpbmUgIENBTl9UU1JfVE1FICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxQzAwMDAwMCkgICAgICAgIC8qITxUTUVbMjowXSBiaXRzICovDQorI2RlZmluZSAgQ0FOX1RTUl9UTUUwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPFRyYW5zbWl0IE1haWxib3ggMCBFbXB0eSAqLw0KKyNkZWZpbmUgIENBTl9UU1JfVE1FMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxUcmFuc21pdCBNYWlsYm94IDEgRW1wdHkgKi8NCisjZGVmaW5lICBDQU5fVFNSX1RNRTIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8VHJhbnNtaXQgTWFpbGJveCAyIEVtcHR5ICovDQorDQorI2RlZmluZSAgQ0FOX1RTUl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEUwMDAwMDAwKSAgICAgICAgLyohPExPV1syOjBdIGJpdHMgKi8NCisjZGVmaW5lICBDQU5fVFNSX0xPVzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8TG93ZXN0IFByaW9yaXR5IEZsYWcgZm9yIE1haWxib3ggMCAqLw0KKyNkZWZpbmUgIENBTl9UU1JfTE9XMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxMb3dlc3QgUHJpb3JpdHkgRmxhZyBmb3IgTWFpbGJveCAxICovDQorI2RlZmluZSAgQ0FOX1RTUl9MT1cyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPExvd2VzdCBQcmlvcml0eSBGbGFnIGZvciBNYWlsYm94IDIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9SRjBSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9SRjBSX0ZNUDAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAzKSAgICAgICAgICAgICAgIC8qITxGSUZPIDAgTWVzc2FnZSBQZW5kaW5nICovDQorI2RlZmluZSAgQ0FOX1JGMFJfRlVMTDAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpICAgICAgICAgICAgICAgLyohPEZJRk8gMCBGdWxsICovDQorI2RlZmluZSAgQ0FOX1JGMFJfRk9WUjAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MTApICAgICAgICAgICAgICAgLyohPEZJRk8gMCBPdmVycnVuICovDQorI2RlZmluZSAgQ0FOX1JGMFJfUkZPTTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgICAgICAgICAgICAgLyohPFJlbGVhc2UgRklGTyAwIE91dHB1dCBNYWlsYm94ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fUkYxUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fUkYxUl9GTVAxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgICAgICAgICAgICAgICAvKiE8RklGTyAxIE1lc3NhZ2UgUGVuZGluZyAqLw0KKyNkZWZpbmUgIENBTl9SRjFSX0ZVTEwxICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KSAgICAgICAgICAgICAgIC8qITxGSUZPIDEgRnVsbCAqLw0KKyNkZWZpbmUgIENBTl9SRjFSX0ZPVlIxICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDEwKSAgICAgICAgICAgICAgIC8qITxGSUZPIDEgT3ZlcnJ1biAqLw0KKyNkZWZpbmUgIENBTl9SRjFSX1JGT00xICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDIwKSAgICAgICAgICAgICAgIC8qITxSZWxlYXNlIEZJRk8gMSBPdXRwdXQgTWFpbGJveCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9JRVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0lFUl9UTUVJRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPFRyYW5zbWl0IE1haWxib3ggRW1wdHkgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIENBTl9JRVJfRk1QSUUwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGSUZPIE1lc3NhZ2UgUGVuZGluZyBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgQ0FOX0lFUl9GRklFMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZJRk8gRnVsbCBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgQ0FOX0lFUl9GT1ZJRTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZJRk8gT3ZlcnJ1biBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgQ0FOX0lFUl9GTVBJRTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZJRk8gTWVzc2FnZSBQZW5kaW5nIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBDQU5fSUVSX0ZGSUUxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RklGTyBGdWxsIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBDQU5fSUVSX0ZPVklFMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RklGTyBPdmVycnVuIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBDQU5fSUVSX0VXR0lFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RXJyb3IgV2FybmluZyBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgQ0FOX0lFUl9FUFZJRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEVycm9yIFBhc3NpdmUgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIENBTl9JRVJfQk9GSUUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCdXMtT2ZmIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBDQU5fSUVSX0xFQ0lFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8TGFzdCBFcnJvciBDb2RlIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBDQU5fSUVSX0VSUklFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIENBTl9JRVJfV0tVSUUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxXYWtldXAgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIENBTl9JRVJfU0xLSUUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxTbGVlcCBJbnRlcnJ1cHQgRW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0VTUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRVNSX0VXR0YgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RXJyb3IgV2FybmluZyBGbGFnICovDQorI2RlZmluZSAgQ0FOX0VTUl9FUFZGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEVycm9yIFBhc3NpdmUgRmxhZyAqLw0KKyNkZWZpbmUgIENBTl9FU1JfQk9GRiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCdXMtT2ZmIEZsYWcgKi8NCisNCisjZGVmaW5lICBDQU5fRVNSX0xFQyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNzApICAgICAgICAvKiE8TEVDWzI6MF0gYml0cyAoTGFzdCBFcnJvciBDb2RlKSAqLw0KKyNkZWZpbmUgIENBTl9FU1JfTEVDXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9FU1JfTEVDXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9FU1JfTEVDXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKyNkZWZpbmUgIENBTl9FU1JfVEVDICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEZGMDAwMCkgICAgICAgIC8qITxMZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSA5LWJpdCBUcmFuc21pdCBFcnJvciBDb3VudGVyICovDQorI2RlZmluZSAgQ0FOX0VTUl9SRUMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPFJlY2VpdmUgRXJyb3IgQ291bnRlciAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0JUUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0JUUl9CUlAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwM0ZGKSAgICAgICAgLyohPEJhdWQgUmF0ZSBQcmVzY2FsZXIgKi8NCisjZGVmaW5lICBDQU5fQlRSX1RTMSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRjAwMDApICAgICAgICAvKiE8VGltZSBTZWdtZW50IDEgKi8NCisjZGVmaW5lICBDQU5fQlRSX1RTMiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA3MDAwMDApICAgICAgICAvKiE8VGltZSBTZWdtZW50IDIgKi8NCisjZGVmaW5lICBDQU5fQlRSX1NKVyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDMwMDAwMDApICAgICAgICAvKiE8UmVzeW5jaHJvbml6YXRpb24gSnVtcCBXaWR0aCAqLw0KKyNkZWZpbmUgIENBTl9CVFJfTEJLTSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxMb29wIEJhY2sgTW9kZSAoRGVidWcpICovDQorI2RlZmluZSAgQ0FOX0JUUl9TSUxNICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPFNpbGVudCBNb2RlICovDQorDQorLyohPE1haWxib3ggcmVnaXN0ZXJzICovDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9USTBSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fVEkwUl9UWFJRICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8VHJhbnNtaXQgTWFpbGJveCBSZXF1ZXN0ICovDQorI2RlZmluZSAgQ0FOX1RJMFJfUlRSICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPFJlbW90ZSBUcmFuc21pc3Npb24gUmVxdWVzdCAqLw0KKyNkZWZpbmUgIENBTl9USTBSX0lERSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxJZGVudGlmaWVyIEV4dGVuc2lvbiAqLw0KKyNkZWZpbmUgIENBTl9USTBSX0VYSUQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDFGRkZGOCkgICAgICAgIC8qITxFeHRlbmRlZCBJZGVudGlmaWVyICovDQorI2RlZmluZSAgQ0FOX1RJMFJfU1RJRCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRTAwMDAwKSAgICAgICAgLyohPFN0YW5kYXJkIElkZW50aWZpZXIgb3IgRXh0ZW5kZWQgSWRlbnRpZmllciAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fVERUMFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX1REVDBSX0RMQyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKSAgICAgICAgLyohPERhdGEgTGVuZ3RoIENvZGUgKi8NCisjZGVmaW5lICBDQU5fVERUMFJfVEdUICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8VHJhbnNtaXQgR2xvYmFsIFRpbWUgKi8NCisjZGVmaW5lICBDQU5fVERUMFJfVElNRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRjAwMDApICAgICAgICAvKiE8TWVzc2FnZSBUaW1lIFN0YW1wICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9UREwwUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fVERMMFJfREFUQTAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRkYpICAgICAgICAvKiE8RGF0YSBieXRlIDAgKi8NCisjZGVmaW5lICBDQU5fVERMMFJfREFUQTEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8RGF0YSBieXRlIDEgKi8NCisjZGVmaW5lICBDQU5fVERMMFJfREFUQTIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRjAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDIgKi8NCisjZGVmaW5lICBDQU5fVERMMFJfREFUQTMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwMDAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDMgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX1RESDBSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9UREgwUl9EQVRBNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGRikgICAgICAgIC8qITxEYXRhIGJ5dGUgNCAqLw0KKyNkZWZpbmUgIENBTl9UREgwUl9EQVRBNSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgNSAqLw0KKyNkZWZpbmUgIENBTl9UREgwUl9EQVRBNiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEZGMDAwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgNiAqLw0KKyNkZWZpbmUgIENBTl9UREgwUl9EQVRBNyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRjAwMDAwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgNyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX1RJMVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX1RJMVJfVFhSUSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPFRyYW5zbWl0IE1haWxib3ggUmVxdWVzdCAqLw0KKyNkZWZpbmUgIENBTl9USTFSX1JUUiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QgKi8NCisjZGVmaW5lICBDQU5fVEkxUl9JREUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8SWRlbnRpZmllciBFeHRlbnNpb24gKi8NCisjZGVmaW5lICBDQU5fVEkxUl9FWElEICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxRkZGRjgpICAgICAgICAvKiE8RXh0ZW5kZWQgSWRlbnRpZmllciAqLw0KKyNkZWZpbmUgIENBTl9USTFSX1NUSUQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkUwMDAwMCkgICAgICAgIC8qITxTdGFuZGFyZCBJZGVudGlmaWVyIG9yIEV4dGVuZGVkIElkZW50aWZpZXIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9URFQxUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9URFQxUl9ETEMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikgICAgICAgIC8qITxEYXRhIExlbmd0aCBDb2RlICovDQorI2RlZmluZSAgQ0FOX1REVDFSX1RHVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPFRyYW5zbWl0IEdsb2JhbCBUaW1lICovDQorI2RlZmluZSAgQ0FOX1REVDFSX1RJTUUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkYwMDAwKSAgICAgICAgLyohPE1lc3NhZ2UgVGltZSBTdGFtcCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX1RETDFSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX1RETDFSX0RBVEEwICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEZGKSAgICAgICAgLyohPERhdGEgYnl0ZSAwICovDQorI2RlZmluZSAgQ0FOX1RETDFSX0RBVEExICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPERhdGEgYnl0ZSAxICovDQorI2RlZmluZSAgQ0FOX1RETDFSX0RBVEEyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkYwMDAwKSAgICAgICAgLyohPERhdGEgYnl0ZSAyICovDQorI2RlZmluZSAgQ0FOX1RETDFSX0RBVEEzICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPERhdGEgYnl0ZSAzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fVERIMVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fVERIMVJfREFUQTQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRkYpICAgICAgICAvKiE8RGF0YSBieXRlIDQgKi8NCisjZGVmaW5lICBDQU5fVERIMVJfREFUQTUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8RGF0YSBieXRlIDUgKi8NCisjZGVmaW5lICBDQU5fVERIMVJfREFUQTYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRjAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDYgKi8NCisjZGVmaW5lICBDQU5fVERIMVJfREFUQTcgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwMDAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9USTJSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9USTJSX1RYUlEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxUcmFuc21pdCBNYWlsYm94IFJlcXVlc3QgKi8NCisjZGVmaW5lICBDQU5fVEkyUl9SVFIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8UmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQorI2RlZmluZSAgQ0FOX1RJMlJfSURFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPElkZW50aWZpZXIgRXh0ZW5zaW9uICovDQorI2RlZmluZSAgQ0FOX1RJMlJfRVhJRCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMUZGRkY4KSAgICAgICAgLyohPEV4dGVuZGVkIGlkZW50aWZpZXIgKi8NCisjZGVmaW5lICBDQU5fVEkyUl9TVElEICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZFMDAwMDApICAgICAgICAvKiE8U3RhbmRhcmQgSWRlbnRpZmllciBvciBFeHRlbmRlZCBJZGVudGlmaWVyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fVERUMlIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8gIA0KKyNkZWZpbmUgIENBTl9URFQyUl9ETEMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikgICAgICAgIC8qITxEYXRhIExlbmd0aCBDb2RlICovDQorI2RlZmluZSAgQ0FOX1REVDJSX1RHVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPFRyYW5zbWl0IEdsb2JhbCBUaW1lICovDQorI2RlZmluZSAgQ0FOX1REVDJSX1RJTUUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkYwMDAwKSAgICAgICAgLyohPE1lc3NhZ2UgVGltZSBTdGFtcCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX1RETDJSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX1RETDJSX0RBVEEwICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEZGKSAgICAgICAgLyohPERhdGEgYnl0ZSAwICovDQorI2RlZmluZSAgQ0FOX1RETDJSX0RBVEExICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPERhdGEgYnl0ZSAxICovDQorI2RlZmluZSAgQ0FOX1RETDJSX0RBVEEyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkYwMDAwKSAgICAgICAgLyohPERhdGEgYnl0ZSAyICovDQorI2RlZmluZSAgQ0FOX1RETDJSX0RBVEEzICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPERhdGEgYnl0ZSAzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fVERIMlIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fVERIMlJfREFUQTQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRkYpICAgICAgICAvKiE8RGF0YSBieXRlIDQgKi8NCisjZGVmaW5lICBDQU5fVERIMlJfREFUQTUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8RGF0YSBieXRlIDUgKi8NCisjZGVmaW5lICBDQU5fVERIMlJfREFUQTYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRjAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDYgKi8NCisjZGVmaW5lICBDQU5fVERIMlJfREFUQTcgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwMDAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9SSTBSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9SSTBSX1JUUiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxSZW1vdGUgVHJhbnNtaXNzaW9uIFJlcXVlc3QgKi8NCisjZGVmaW5lICBDQU5fUkkwUl9JREUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8SWRlbnRpZmllciBFeHRlbnNpb24gKi8NCisjZGVmaW5lICBDQU5fUkkwUl9FWElEICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxRkZGRjgpICAgICAgICAvKiE8RXh0ZW5kZWQgSWRlbnRpZmllciAqLw0KKyNkZWZpbmUgIENBTl9SSTBSX1NUSUQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkUwMDAwMCkgICAgICAgIC8qITxTdGFuZGFyZCBJZGVudGlmaWVyIG9yIEV4dGVuZGVkIElkZW50aWZpZXIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9SRFQwUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9SRFQwUl9ETEMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikgICAgICAgIC8qITxEYXRhIExlbmd0aCBDb2RlICovDQorI2RlZmluZSAgQ0FOX1JEVDBSX0ZNSSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPEZpbHRlciBNYXRjaCBJbmRleCAqLw0KKyNkZWZpbmUgIENBTl9SRFQwUl9USU1FICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGMDAwMCkgICAgICAgIC8qITxNZXNzYWdlIFRpbWUgU3RhbXAgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9SREwwUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9SREwwUl9EQVRBMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGRikgICAgICAgIC8qITxEYXRhIGJ5dGUgMCAqLw0KKyNkZWZpbmUgIENBTl9SREwwUl9EQVRBMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgMSAqLw0KKyNkZWZpbmUgIENBTl9SREwwUl9EQVRBMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEZGMDAwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgMiAqLw0KKyNkZWZpbmUgIENBTl9SREwwUl9EQVRBMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRjAwMDAwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgMyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX1JESDBSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX1JESDBSX0RBVEE0ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEZGKSAgICAgICAgLyohPERhdGEgYnl0ZSA0ICovDQorI2RlZmluZSAgQ0FOX1JESDBSX0RBVEE1ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPERhdGEgYnl0ZSA1ICovDQorI2RlZmluZSAgQ0FOX1JESDBSX0RBVEE2ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkYwMDAwKSAgICAgICAgLyohPERhdGEgYnl0ZSA2ICovDQorI2RlZmluZSAgQ0FOX1JESDBSX0RBVEE3ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPERhdGEgYnl0ZSA3ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fUkkxUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fUkkxUl9SVFIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8UmVtb3RlIFRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovDQorI2RlZmluZSAgQ0FOX1JJMVJfSURFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPElkZW50aWZpZXIgRXh0ZW5zaW9uICovDQorI2RlZmluZSAgQ0FOX1JJMVJfRVhJRCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMUZGRkY4KSAgICAgICAgLyohPEV4dGVuZGVkIGlkZW50aWZpZXIgKi8NCisjZGVmaW5lICBDQU5fUkkxUl9TVElEICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZFMDAwMDApICAgICAgICAvKiE8U3RhbmRhcmQgSWRlbnRpZmllciBvciBFeHRlbmRlZCBJZGVudGlmaWVyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fUkRUMVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fUkRUMVJfRExDICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEYpICAgICAgICAvKiE8RGF0YSBMZW5ndGggQ29kZSAqLw0KKyNkZWZpbmUgIENBTl9SRFQxUl9GTUkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxGaWx0ZXIgTWF0Y2ggSW5kZXggKi8NCisjZGVmaW5lICBDQU5fUkRUMVJfVElNRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRjAwMDApICAgICAgICAvKiE8TWVzc2FnZSBUaW1lIFN0YW1wICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fUkRMMVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fUkRMMVJfREFUQTAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRkYpICAgICAgICAvKiE8RGF0YSBieXRlIDAgKi8NCisjZGVmaW5lICBDQU5fUkRMMVJfREFUQTEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8RGF0YSBieXRlIDEgKi8NCisjZGVmaW5lICBDQU5fUkRMMVJfREFUQTIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRjAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDIgKi8NCisjZGVmaW5lICBDQU5fUkRMMVJfREFUQTMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwMDAwMDApICAgICAgICAvKiE8RGF0YSBieXRlIDMgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9SREgxUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9SREgxUl9EQVRBNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGRikgICAgICAgIC8qITxEYXRhIGJ5dGUgNCAqLw0KKyNkZWZpbmUgIENBTl9SREgxUl9EQVRBNSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgNSAqLw0KKyNkZWZpbmUgIENBTl9SREgxUl9EQVRBNiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEZGMDAwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgNiAqLw0KKyNkZWZpbmUgIENBTl9SREgxUl9EQVRBNyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRjAwMDAwMCkgICAgICAgIC8qITxEYXRhIGJ5dGUgNyAqLw0KKw0KKy8qITxDQU4gZmlsdGVyIHJlZ2lzdGVycyAqLw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0ZNUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0ZNUl9GSU5JVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAgICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GTTFSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GTTFSX0ZCTSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgzRkZGKSAgICAgICAgICAgIC8qITxGaWx0ZXIgTW9kZSAqLw0KKyNkZWZpbmUgIENBTl9GTTFSX0ZCTTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxGaWx0ZXIgSW5pdCBNb2RlIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRk0xUl9GQk0yICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8RmlsdGVyIEluaXQgTW9kZSBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GTTFSX0ZCTTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxGaWx0ZXIgSW5pdCBNb2RlIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRk0xUl9GQk01ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8RmlsdGVyIEluaXQgTW9kZSBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GTTFSX0ZCTTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgSW5pdCBNb2RlIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRk0xUl9GQk04ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIEluaXQgTW9kZSBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GTTFSX0ZCTTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgSW5pdCBNb2RlIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNMTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNMTIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0ZNMVJfRkJNMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApICAgICAgICAgICAgLyohPEZpbHRlciBJbml0IE1vZGUgYml0IDEzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRlMxUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4M0ZGRikgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0M0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0M1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0M2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0M3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0M4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDggKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0M5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MxMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0ZTMVJfRlNDMTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPEZpbHRlciBTY2FsZSBDb25maWd1cmF0aW9uIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GUzFSX0ZTQzEyICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgU2NhbGUgQ29uZmlndXJhdGlvbiBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRlMxUl9GU0MxMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIFNjYWxlIENvbmZpZ3VyYXRpb24gYml0IDEzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GRkExUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRkZBMVJfRkZBICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4M0ZGRikgICAgICAgICAgICAvKiE8RmlsdGVyIEZJRk8gQXNzaWdubWVudCAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkEwICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgMCAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkExICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgMSAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkEyICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgMiAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkEzICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgMyAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgNCAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgNSAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkE2ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgNiAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkE3ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgNyAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkE4ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgOCAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkE5ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgOSAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkExMCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgMTAgKi8NCisjZGVmaW5lICBDQU5fRkZBMVJfRkZBMTEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIEZJRk8gQXNzaWdubWVudCBmb3IgRmlsdGVyIDExICovDQorI2RlZmluZSAgQ0FOX0ZGQTFSX0ZGQTEyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEZpbHRlciBGSUZPIEFzc2lnbm1lbnQgZm9yIEZpbHRlciAxMiAqLw0KKyNkZWZpbmUgIENBTl9GRkExUl9GRkExMyAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgRklGTyBBc3NpZ25tZW50IGZvciBGaWx0ZXIgMTMgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GQTFSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GQTFSX0ZBQ1QgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgzRkZGKSAgICAgICAgICAgIC8qITxGaWx0ZXIgQWN0aXZlICovDQorI2RlZmluZSAgQ0FOX0ZBMVJfRkFDVDAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPEZpbHRlciAwIEFjdGl2ZSAqLw0KKyNkZWZpbmUgIENBTl9GQTFSX0ZBQ1QxICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxGaWx0ZXIgMSBBY3RpdmUgKi8NCisjZGVmaW5lICBDQU5fRkExUl9GQUNUMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8RmlsdGVyIDIgQWN0aXZlICovDQorI2RlZmluZSAgQ0FOX0ZBMVJfRkFDVDMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPEZpbHRlciAzIEFjdGl2ZSAqLw0KKyNkZWZpbmUgIENBTl9GQTFSX0ZBQ1Q0ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgNCBBY3RpdmUgKi8NCisjZGVmaW5lICBDQU5fRkExUl9GQUNUNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8RmlsdGVyIDUgQWN0aXZlICovDQorI2RlZmluZSAgQ0FOX0ZBMVJfRkFDVDYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPEZpbHRlciA2IEFjdGl2ZSAqLw0KKyNkZWZpbmUgIENBTl9GQTFSX0ZBQ1Q3ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgNyBBY3RpdmUgKi8NCisjZGVmaW5lICBDQU5fRkExUl9GQUNUOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIDggQWN0aXZlICovDQorI2RlZmluZSAgQ0FOX0ZBMVJfRkFDVDkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPEZpbHRlciA5IEFjdGl2ZSAqLw0KKyNkZWZpbmUgIENBTl9GQTFSX0ZBQ1QxMCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgMTAgQWN0aXZlICovDQorI2RlZmluZSAgQ0FOX0ZBMVJfRkFDVDExICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPEZpbHRlciAxMSBBY3RpdmUgKi8NCisjZGVmaW5lICBDQU5fRkExUl9GQUNUMTIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8RmlsdGVyIDEyIEFjdGl2ZSAqLw0KKyNkZWZpbmUgIENBTl9GQTFSX0ZBQ1QxMyAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxGaWx0ZXIgMTMgQWN0aXZlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjBSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjBSMV9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GMFIxX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0YwUjFfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GMVIxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjcgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjEwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIxNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIxOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjE5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIyMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIyNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIyNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GMVIxX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0YxUjFfRkIzMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjFSMV9GQjMxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0YyUjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0YyUjFfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjJSMV9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GMlIxX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjNSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjNSMV9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GM1IxX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0YzUjFfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GNFIxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjcgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjEwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIxNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIxOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjE5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIyMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIyNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIyNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GNFIxX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0Y0UjFfRkIzMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjRSMV9GQjMxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0Y1UjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0Y1UjFfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjVSMV9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GNVIxX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjZSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjZSMV9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GNlIxX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0Y2UjFfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GN1IxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjcgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjEwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIxNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIxOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjE5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIyMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIyNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIyNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GN1IxX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0Y3UjFfRkIzMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjdSMV9GQjMxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0Y4UjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0Y4UjFfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjhSMV9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GOFIxX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjlSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjlSMV9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GOVIxX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0Y5UjFfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GMTBSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIxMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIxMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIxNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjE3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMTggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIxOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjIwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIyMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjIzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIyNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjI2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIyOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMV9GQjI5ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0YxMFIxX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjEwUjFfRkIzMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0YxMVIxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjEwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIxMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjEzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIxNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjE2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIxOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjE5ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIyMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjIyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIyNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjI1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIyNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjI4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0YxMVIxX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjExUjFfRkIzMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMV9GQjMxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjEyUjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIxMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjEyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIxNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIxNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjE4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIyMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjIxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIyMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjI0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIyNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjI3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMjggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjEyUjFfRkIyOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMV9GQjMwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0YxMlIxX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GMTNSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIxMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIxMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIxNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjE3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMTggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIxOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjIwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIyMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjIzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIyNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjI2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIyOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMV9GQjI5ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0YxM1IxX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjEzUjFfRkIzMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0YwUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0YwUjJfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjBSMl9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GMFIyX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjFSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjFSMl9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GMVIyX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0YxUjJfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GMlIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjcgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjEwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIxNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIxOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjE5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIyMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIyNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIyNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GMlIyX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0YyUjJfRkIzMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjJSMl9GQjMxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0YzUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0YzUjJfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjNSMl9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GM1IyX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjRSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjRSMl9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GNFIyX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0Y0UjJfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GNVIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjcgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjEwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIxNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIxOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjE5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIyMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIyNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIyNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GNVIyX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0Y1UjJfRkIzMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjVSMl9GQjMxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0Y2UjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0Y2UjJfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjZSMl9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GNlIyX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjdSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkI0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkI3ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIxMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjExICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIxMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjE0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIxNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjE3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIxOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIyMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIyNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIyOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjdSMl9GQjI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GN1IyX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0Y3UjJfRkIzMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GOFIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjcgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjEwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIxMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjEzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIxNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjE2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIxOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjE5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIyMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIyNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIyNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GOFIyX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0Y4UjJfRkIzMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjhSMl9GQjMxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0Y5UjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIyMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIyMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIyNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0Y5UjJfRkIyOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjlSMl9GQjMwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GOVIyX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjEwUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIxMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjEyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIxNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIxNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjE4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIyMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjIxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIyMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjI0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIyNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjI3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMjggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjEwUjJfRkIyOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GMTBSMl9GQjMwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0YxMFIyX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENBTl9GMTFSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxGaWx0ZXIgYml0IDAgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RmlsdGVyIGJpdCAxICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEZpbHRlciBiaXQgMiAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8RmlsdGVyIGJpdCA0ICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNSAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDYgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8RmlsdGVyIGJpdCA3ICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDkgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIxMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDExICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMTIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTIgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIxMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMyAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE0ICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMTUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTUgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIxNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNiAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjE3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE3ICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMTggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTggKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIxOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOSAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjIwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIwICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMjEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjEgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIyMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMiAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjIzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIzICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMjQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjQgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIyNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNSAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjI2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI2ICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMjcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjcgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIyOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOCAqLw0KKyNkZWZpbmUgIENBTl9GMTFSMl9GQjI5ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI5ICovDQorI2RlZmluZSAgQ0FOX0YxMVIyX0ZCMzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzAgKi8NCisjZGVmaW5lICBDQU5fRjExUjJfRkIzMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgQ0FOX0YxMlIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEZpbHRlciBiaXQgMCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxGaWx0ZXIgYml0IDEgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8RmlsdGVyIGJpdCAyICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEZpbHRlciBiaXQgMyAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDQgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkI1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8RmlsdGVyIGJpdCA1ICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNiAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDcgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkI4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA4ICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgOSAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjEwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEwICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTEgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIxMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMiAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjEzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEzICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMTQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTQgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIxNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNSAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjE2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE2ICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMTcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTcgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIxOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxOCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjE5ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE5ICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMjAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjAgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIyMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMSAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjIyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIyICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMjMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjMgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIyNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjI1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI1ICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMjYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjYgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIyNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNyAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjI4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI4ICovDQorI2RlZmluZSAgQ0FOX0YxMlIyX0ZCMjkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjkgKi8NCisjZGVmaW5lICBDQU5fRjEyUjJfRkIzMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAzMCAqLw0KKyNkZWZpbmUgIENBTl9GMTJSMl9GQjMxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDQU5fRjEzUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8RmlsdGVyIGJpdCAwICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEZpbHRlciBiaXQgMSAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8RmlsdGVyIGJpdCAzICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNCAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDUgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA2ICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEZpbHRlciBiaXQgNyAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDggKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCA5ICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTAgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIxMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxMSAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjEyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDEyICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTMgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIxNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNCAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE1ICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMTYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTYgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIxNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAxNyAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjE4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDE4ICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMTkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMTkgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIyMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMCAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjIxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDIxICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMjIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjIgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIyMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyMyAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjI0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI0ICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMjUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjUgKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIyNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyNiAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjI3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDI3ICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMjggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMjggKi8NCisjZGVmaW5lICBDQU5fRjEzUjJfRkIyOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8RmlsdGVyIGJpdCAyOSAqLw0KKyNkZWZpbmUgIENBTl9GMTNSMl9GQjMwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxGaWx0ZXIgYml0IDMwICovDQorI2RlZmluZSAgQ0FOX0YxM1IyX0ZCMzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEZpbHRlciBiaXQgMzEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgIENSQyBjYWxjdWxhdGlvbiB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDUkNfRFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDUkNfRFJfRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpIC8qITwgRGF0YSByZWdpc3RlciBiaXRzICovDQorDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBDUkNfSURSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBDUkNfSURSX0lEUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHhGRikgICAgICAgIC8qITwgR2VuZXJhbC1wdXJwb3NlIDgtYml0IGRhdGEgcmVnaXN0ZXIgYml0cyAqLw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIENSQ19DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgQ1JDX0NSX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAgICAgICAvKiE8IFJFU0VUIGJpdCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcnlwdG8gUHJvY2Vzc29yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqKiBCaXRzIGRlZmluaXRpb24gZm9yIENSWVBfQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgQ1JZUF9DUl9BTEdPRElSICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisNCisjZGVmaW5lIENSWVBfQ1JfQUxHT01PREUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzgpDQorI2RlZmluZSBDUllQX0NSX0FMR09NT0RFXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgQ1JZUF9DUl9BTEdPTU9ERV8xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIENSWVBfQ1JfQUxHT01PREVfMiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBDUllQX0NSX0FMR09NT0RFX1RERVNfRUNCICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgQ1JZUF9DUl9BTEdPTU9ERV9UREVTX0NCQyAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIENSWVBfQ1JfQUxHT01PREVfREVTX0VDQiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBDUllQX0NSX0FMR09NT0RFX0RFU19DQkMgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDE4KQ0KKyNkZWZpbmUgQ1JZUF9DUl9BTEdPTU9ERV9BRVNfRUNCICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIENSWVBfQ1JfQUxHT01PREVfQUVTX0NCQyAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjgpDQorI2RlZmluZSBDUllQX0NSX0FMR09NT0RFX0FFU19DVFIgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKQ0KKyNkZWZpbmUgQ1JZUF9DUl9BTEdPTU9ERV9BRVNfS0VZICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAzOCkNCisNCisjZGVmaW5lIENSWVBfQ1JfREFUQVRZUEUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQzApDQorI2RlZmluZSBDUllQX0NSX0RBVEFUWVBFXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgQ1JZUF9DUl9EQVRBVFlQRV8xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIENSWVBfQ1JfS0VZU0laRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAzMDApDQorI2RlZmluZSBDUllQX0NSX0tFWVNJWkVfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgQ1JZUF9DUl9LRVlTSVpFXzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIENSWVBfQ1JfRkZMVVNIICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBDUllQX0NSX0NSWVBFTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKy8qKioqKioqKioqKioqKioqKiogQml0cyBkZWZpbml0aW9uIGZvciBDUllQX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBDUllQX1NSX0lGRU0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgQ1JZUF9TUl9JRk5GICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIENSWVBfU1JfT0ZORSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBDUllQX1NSX09GRlUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgQ1JZUF9TUl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisvKioqKioqKioqKioqKioqKioqIEJpdHMgZGVmaW5pdGlvbiBmb3IgQ1JZUF9ETUFDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgQ1JZUF9ETUFDUl9ESUVOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIENSWVBfRE1BQ1JfRE9FTiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorLyoqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIENSWVBfSU1TQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIENSWVBfSU1TQ1JfSU5JTSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBDUllQX0lNU0NSX09VVElNICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKy8qKioqKioqKioqKioqKioqKiogQml0cyBkZWZpbml0aW9uIGZvciBDUllQX1JJU1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBDUllQX1JJU1JfT1VUUklTICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgQ1JZUF9SSVNSX0lOUklTICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisvKioqKioqKioqKioqKioqKioqIEJpdHMgZGVmaW5pdGlvbiBmb3IgQ1JZUF9NSVNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgQ1JZUF9NSVNSX0lOTUlTICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIENSWVBfTUlTUl9PVVRNSVMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgIERpZ2l0YWwgdG8gQW5hbG9nIENvbnZlcnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERBQ19DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgREFDX0NSX0VOMSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPERBQyBjaGFubmVsMSBlbmFibGUgKi8NCisjZGVmaW5lICBEQUNfQ1JfQk9GRjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8REFDIGNoYW5uZWwxIG91dHB1dCBidWZmZXIgZGlzYWJsZSAqLw0KKyNkZWZpbmUgIERBQ19DUl9URU4xICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxEQUMgY2hhbm5lbDEgVHJpZ2dlciBlbmFibGUgKi8NCisNCisjZGVmaW5lICBEQUNfQ1JfVFNFTDEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzgpICAgICAgICAvKiE8VFNFTDFbMjowXSAoREFDIGNoYW5uZWwxIFRyaWdnZXIgc2VsZWN0aW9uKSAqLw0KKyNkZWZpbmUgIERBQ19DUl9UU0VMMV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIERBQ19DUl9UU0VMMV8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIERBQ19DUl9UU0VMMV8yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKyNkZWZpbmUgIERBQ19DUl9XQVZFMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBDMCkgICAgICAgIC8qITxXQVZFMVsxOjBdIChEQUMgY2hhbm5lbDEgbm9pc2UvdHJpYW5nbGUgd2F2ZSBnZW5lcmF0aW9uIGVuYWJsZSkgKi8NCisjZGVmaW5lICBEQUNfQ1JfV0FWRTFfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBEQUNfQ1JfV0FWRTFfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBEQUNfQ1JfTUFNUDEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGMDApICAgICAgICAvKiE8TUFNUDFbMzowXSAoREFDIGNoYW5uZWwxIE1hc2svQW1wbGl0dWRlIHNlbGVjdG9yKSAqLw0KKyNkZWZpbmUgIERBQ19DUl9NQU1QMV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIERBQ19DUl9NQU1QMV8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIERBQ19DUl9NQU1QMV8yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIERBQ19DUl9NQU1QMV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIERBQ19DUl9ETUFFTjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxEQUMgY2hhbm5lbDEgRE1BIGVuYWJsZSAqLw0KKyNkZWZpbmUgIERBQ19DUl9ETUFVRFJJRTEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxEQUMgY2hhbm5lbDEgRE1BIHVuZGVycnVuIGludGVycnVwdCBlbmFibGUgID4qLw0KKw0KKyNkZWZpbmUgIERBQ19DUl9FTjIgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxEQUMgY2hhbm5lbDIgZW5hYmxlICovDQorI2RlZmluZSAgREFDX0NSX0JPRkYyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPERBQyBjaGFubmVsMiBvdXRwdXQgYnVmZmVyIGRpc2FibGUgKi8NCisjZGVmaW5lICBEQUNfQ1JfVEVOMiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8REFDIGNoYW5uZWwyIFRyaWdnZXIgZW5hYmxlICovDQorDQorI2RlZmluZSAgREFDX0NSX1RTRUwyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMzgwMDAwKSAgICAgICAgLyohPFRTRUwyWzI6MF0gKERBQyBjaGFubmVsMiBUcmlnZ2VyIHNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBEQUNfQ1JfVFNFTDJfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBEQUNfQ1JfVFNFTDJfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBEQUNfQ1JfVFNFTDJfMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisNCisjZGVmaW5lICBEQUNfQ1JfV0FWRTIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBDMDAwMDApICAgICAgICAvKiE8V0FWRTJbMTowXSAoREFDIGNoYW5uZWwyIG5vaXNlL3RyaWFuZ2xlIHdhdmUgZ2VuZXJhdGlvbiBlbmFibGUpICovDQorI2RlZmluZSAgREFDX0NSX1dBVkUyXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgREFDX0NSX1dBVkUyXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgREFDX0NSX01BTVAyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKSAgICAgICAgLyohPE1BTVAyWzM6MF0gKERBQyBjaGFubmVsMiBNYXNrL0FtcGxpdHVkZSBzZWxlY3RvcikgKi8NCisjZGVmaW5lICBEQUNfQ1JfTUFNUDJfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBEQUNfQ1JfTUFNUDJfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBEQUNfQ1JfTUFNUDJfMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBEQUNfQ1JfTUFNUDJfMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBEQUNfQ1JfRE1BRU4yICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8REFDIGNoYW5uZWwyIERNQSBlbmFibGVkICovDQorI2RlZmluZSAgREFDX0NSX0RNQVVEUklFMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPERBQyBjaGFubmVsMiBETUEgdW5kZXJydW4gaW50ZXJydXB0IGVuYWJsZSAgPiovDQorDQorLyoqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgREFDX1NXVFJJR1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfU1dUUklHUl9TV1RSSUcxICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgICAgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwxIHNvZnR3YXJlIHRyaWdnZXIgKi8NCisjZGVmaW5lICBEQUNfU1dUUklHUl9TV1RSSUcyICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgICAgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwyIHNvZnR3YXJlIHRyaWdnZXIgKi8NCisNCisvKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBEQUNfREhSMTJSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIERBQ19ESFIxMlIxX0RBQ0MxREhSICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwRkZGKSAgICAgICAgICAgIC8qITxEQUMgY2hhbm5lbDEgMTItYml0IFJpZ2h0IGFsaWduZWQgZGF0YSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERBQ19ESFIxMkwxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgREFDX0RIUjEyTDFfREFDQzFESFIgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEZGRjApICAgICAgICAgICAgLyohPERBQyBjaGFubmVsMSAxMi1iaXQgTGVmdCBhbGlnbmVkIGRhdGEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgREFDX0RIUjhSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIERBQ19ESFI4UjFfREFDQzFESFIgICAgICAgICAgICAgICAgICgodWludDhfdCkweEZGKSAgICAgICAgICAgICAgIC8qITxEQUMgY2hhbm5lbDEgOC1iaXQgUmlnaHQgYWxpZ25lZCBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgREFDX0RIUjEyUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfREhSMTJSMl9EQUNDMkRIUiAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEZGRikgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwyIDEyLWJpdCBSaWdodCBhbGlnbmVkIGRhdGEgKi8NCisNCisvKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBEQUNfREhSMTJMMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIERBQ19ESFIxMkwyX0RBQ0MyREhSICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkYwKSAgICAgICAgICAgIC8qITxEQUMgY2hhbm5lbDIgMTItYml0IExlZnQgYWxpZ25lZCBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERBQ19ESFI4UjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfREhSOFIyX0RBQ0MyREhSICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHhGRikgICAgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwyIDgtYml0IFJpZ2h0IGFsaWduZWQgZGF0YSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERBQ19ESFIxMlJEIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgREFDX0RIUjEyUkRfREFDQzFESFIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwRkZGKSAgICAgICAgLyohPERBQyBjaGFubmVsMSAxMi1iaXQgUmlnaHQgYWxpZ25lZCBkYXRhICovDQorI2RlZmluZSAgREFDX0RIUjEyUkRfREFDQzJESFIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGRkYwMDAwKSAgICAgICAgLyohPERBQyBjaGFubmVsMiAxMi1iaXQgUmlnaHQgYWxpZ25lZCBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgREFDX0RIUjEyTEQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfREhSMTJMRF9EQUNDMURIUiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGRjApICAgICAgICAvKiE8REFDIGNoYW5uZWwxIDEyLWJpdCBMZWZ0IGFsaWduZWQgZGF0YSAqLw0KKyNkZWZpbmUgIERBQ19ESFIxMkxEX0RBQ0MyREhSICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkYwMDAwMCkgICAgICAgIC8qITxEQUMgY2hhbm5lbDIgMTItYml0IExlZnQgYWxpZ25lZCBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERBQ19ESFI4UkQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfREhSOFJEX0RBQ0MxREhSICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBGRikgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwxIDgtYml0IFJpZ2h0IGFsaWduZWQgZGF0YSAqLw0KKyNkZWZpbmUgIERBQ19ESFI4UkRfREFDQzJESFIgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRjAwKSAgICAgICAgICAgIC8qITxEQUMgY2hhbm5lbDIgOC1iaXQgUmlnaHQgYWxpZ25lZCBkYXRhICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBEQUNfRE9SMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfRE9SMV9EQUNDMURPUiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEZGRikgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwxIGRhdGEgb3V0cHV0ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBEQUNfRE9SMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfRE9SMl9EQUNDMkRPUiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEZGRikgICAgICAgICAgICAvKiE8REFDIGNoYW5uZWwyIGRhdGEgb3V0cHV0ICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgREFDX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQUNfU1JfRE1BVURSMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8REFDIGNoYW5uZWwxIERNQSB1bmRlcnJ1biBmbGFnICovDQorI2RlZmluZSAgREFDX1NSX0RNQVVEUjIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPERBQyBjaGFubmVsMiBETUEgdW5kZXJydW4gZmxhZyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnIE1DVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ01JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIERDTUlfQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIERDTUlfQ1JfQ0FQVFVSRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBEQ01JX0NSX0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgRENNSV9DUl9DUk9QICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERDTUlfQ1JfSlBFRyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBEQ01JX0NSX0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgRENNSV9DUl9QQ0tQT0wgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIERDTUlfQ1JfSFNQT0wgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBEQ01JX0NSX1ZTUE9MICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgRENNSV9DUl9GQ1JDXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIERDTUlfQ1JfRkNSQ18xICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBEQ01JX0NSX0VETV8wICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgRENNSV9DUl9FRE1fMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIERDTUlfQ1JfQ1JFICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBEQ01JX0NSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBEQ01JX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBEQ01JX1NSX0hTWU5DICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgRENNSV9TUl9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIERDTUlfU1JfRk5FICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIERDTUlfUklTUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIERDTUlfUklTUl9GUkFNRV9SSVMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBEQ01JX1JJU1JfT1ZGX1JJUyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgRENNSV9SSVNSX0VSUl9SSVMgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERDTUlfUklTUl9WU1lOQ19SSVMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBEQ01JX1JJU1JfTElORV9SSVMgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBEQ01JX0lFUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBEQ01JX0lFUl9GUkFNRV9JRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgRENNSV9JRVJfT1ZGX0lFICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIERDTUlfSUVSX0VSUl9JRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBEQ01JX0lFUl9WU1lOQ19JRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgRENNSV9JRVJfTElORV9JRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgRENNSV9NSVNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgRENNSV9NSVNSX0ZSQU1FX01JUyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIERDTUlfTUlTUl9PVkZfTUlTICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBEQ01JX01JU1JfRVJSX01JUyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRENNSV9NSVNSX1ZTWU5DX01JUyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIERDTUlfTUlTUl9MSU5FX01JUyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIERDTUlfSUNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIERDTUlfSUNSX0ZSQU1FX0lTQyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBEQ01JX0lDUl9PVkZfSVNDICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgRENNSV9JQ1JfRVJSX0lTQyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERDTUlfSUNSX1ZTWU5DX0lTQyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBEQ01JX0lDUl9MSU5FX0lTQyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BIENvbnRyb2xsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgRE1BX1N4Q1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqLyANCisjZGVmaW5lIERNQV9TeENSX0NIU0VMICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEUwMDAwMDApDQorI2RlZmluZSBETUFfU3hDUl9DSFNFTF8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfQ0hTRUxfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIERNQV9TeENSX0NIU0VMXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApIA0KKyNkZWZpbmUgRE1BX1N4Q1JfTUJVUlNUICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTgwMDAwMCkNCisjZGVmaW5lIERNQV9TeENSX01CVVJTVF8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBETUFfU3hDUl9NQlVSU1RfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfUEJVUlNUICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDYwMDAwMCkNCisjZGVmaW5lIERNQV9TeENSX1BCVVJTVF8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBETUFfU3hDUl9QQlVSU1RfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfQUNLICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIERNQV9TeENSX0NUICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICANCisjZGVmaW5lIERNQV9TeENSX0RCTSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBETUFfU3hDUl9QTCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfUExfMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIERNQV9TeENSX1BMXzEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBETUFfU3hDUl9QSU5DT1MgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNjAwMCkNCisjZGVmaW5lIERNQV9TeENSX01TSVpFXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBETUFfU3hDUl9NU0laRV8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfUFNJWkUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTgwMCkNCisjZGVmaW5lIERNQV9TeENSX1BTSVpFXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBETUFfU3hDUl9QU0laRV8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfTUlOQyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIERNQV9TeENSX1BJTkMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBETUFfU3hDUl9DSVJDICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfRElSICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBDMCkNCisjZGVmaW5lIERNQV9TeENSX0RJUl8wICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBETUFfU3hDUl9ESVJfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgRE1BX1N4Q1JfUEZDVFJMICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIERNQV9TeENSX1RDSUUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBETUFfU3hDUl9IVElFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgRE1BX1N4Q1JfVEVJRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERNQV9TeENSX0RNRUlFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBETUFfU3hDUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBETUFfU3hDTkRUUiByZWdpc3RlciAgKioqKioqKioqKioqKiovDQorI2RlZmluZSBETUFfU3hORFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRkZGKQ0KKyNkZWZpbmUgRE1BX1N4TkRUXzAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIERNQV9TeE5EVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBETUFfU3hORFRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRE1BX1N4TkRUXzMgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIERNQV9TeE5EVF80ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBETUFfU3hORFRfNSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgRE1BX1N4TkRUXzYgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIERNQV9TeE5EVF83ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBETUFfU3hORFRfOCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgRE1BX1N4TkRUXzkgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIERNQV9TeE5EVF8xMCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBETUFfU3hORFRfMTEgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgRE1BX1N4TkRUXzEyICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIERNQV9TeE5EVF8xMyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBETUFfU3hORFRfMTQgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgRE1BX1N4TkRUXzE1ICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgRE1BX1N4RkNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLyANCisjZGVmaW5lIERNQV9TeEZDUl9GRUlFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBETUFfU3hGQ1JfRlMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDM4KQ0KKyNkZWZpbmUgRE1BX1N4RkNSX0ZTXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIERNQV9TeEZDUl9GU18xICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBETUFfU3hGQ1JfRlNfMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgRE1BX1N4RkNSX0RNRElTICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERNQV9TeEZDUl9GVEggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDMpDQorI2RlZmluZSBETUFfU3hGQ1JfRlRIXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgRE1BX1N4RkNSX0ZUSF8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgRE1BX0xJU1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqLyANCisjZGVmaW5lIERNQV9MSVNSX1RDSUYzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApDQorI2RlZmluZSBETUFfTElTUl9IVElGMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJU1JfVEVJRjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lIERNQV9MSVNSX0RNRUlGMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApDQorI2RlZmluZSBETUFfTElTUl9GRUlGMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJU1JfVENJRjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lIERNQV9MSVNSX0hUSUYyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSBETUFfTElTUl9URUlGMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJU1JfRE1FSUYyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIERNQV9MSVNSX0ZFSUYyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBETUFfTElTUl9UQ0lGMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgRE1BX0xJU1JfSFRJRjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIERNQV9MSVNSX1RFSUYxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBETUFfTElTUl9ETUVJRjEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgRE1BX0xJU1JfRkVJRjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIERNQV9MSVNSX1RDSUYwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBETUFfTElTUl9IVElGMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgRE1BX0xJU1JfVEVJRjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIERNQV9MSVNSX0RNRUlGMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBETUFfTElTUl9GRUlGMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBETUFfSElTUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovIA0KKyNkZWZpbmUgRE1BX0hJU1JfVENJRjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkNCisjZGVmaW5lIERNQV9ISVNSX0hUSUY3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSBETUFfSElTUl9URUlGNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJU1JfRE1FSUY3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIERNQV9ISVNSX0ZFSUY3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBETUFfSElTUl9UQ0lGNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJU1JfSFRJRjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIERNQV9ISVNSX1RFSUY2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSBETUFfSElTUl9ETUVJRjYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJU1JfRkVJRjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIERNQV9ISVNSX1RDSUY1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBETUFfSElTUl9IVElGNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgRE1BX0hJU1JfVEVJRjUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIERNQV9ISVNSX0RNRUlGNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBETUFfSElTUl9GRUlGNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgRE1BX0hJU1JfVENJRjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIERNQV9ISVNSX0hUSUY0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBETUFfSElTUl9URUlGNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgRE1BX0hJU1JfRE1FSUY0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERNQV9ISVNSX0ZFSUY0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIERNQV9MSUZDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKi8gDQorI2RlZmluZSBETUFfTElGQ1JfQ1RDSUYzICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NIVElGMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIERNQV9MSUZDUl9DVEVJRjMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBETUFfTElGQ1JfQ0RNRUlGMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NGRUlGMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIERNQV9MSUZDUl9DVENJRjIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBETUFfTElGQ1JfQ0hUSUYyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NURUlGMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lIERNQV9MSUZDUl9DRE1FSUYyICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBETUFfTElGQ1JfQ0ZFSUYyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NUQ0lGMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIERNQV9MSUZDUl9DSFRJRjEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBETUFfTElGQ1JfQ1RFSUYxICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NETUVJRjEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIERNQV9MSUZDUl9DRkVJRjEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBETUFfTElGQ1JfQ1RDSUYwICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NIVElGMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIERNQV9MSUZDUl9DVEVJRjAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBETUFfTElGQ1JfQ0RNRUlGMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRE1BX0xJRkNSX0NGRUlGMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgRE1BX0hJRkNSICByZWdpc3RlciAgKioqKioqKioqKioqKioqKi8gDQorI2RlZmluZSBETUFfSElGQ1JfQ1RDSUY3ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NIVElGNyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIERNQV9ISUZDUl9DVEVJRjcgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBETUFfSElGQ1JfQ0RNRUlGNyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NGRUlGNyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIERNQV9ISUZDUl9DVENJRjYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBETUFfSElGQ1JfQ0hUSUY2ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NURUlGNiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lIERNQV9ISUZDUl9DRE1FSUY2ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBETUFfSElGQ1JfQ0ZFSUY2ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NUQ0lGNSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIERNQV9ISUZDUl9DSFRJRjUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBETUFfSElGQ1JfQ1RFSUY1ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NETUVJRjUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIERNQV9ISUZDUl9DRkVJRjUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBETUFfSElGQ1JfQ1RDSUY0ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NIVElGNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIERNQV9ISUZDUl9DVEVJRjQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBETUFfSElGQ1JfQ0RNRUlGNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRE1BX0hJRkNSX0NGRUlGNCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIEludGVycnVwdC9FdmVudCBDb250cm9sbGVyICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBFWFRJX0lNUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBFWFRJX0lNUl9NUjAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8IEludGVycnVwdCBNYXNrIG9uIGxpbmUgMCAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxICovDQorI2RlZmluZSAgRVhUSV9JTVJfTVIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPCBJbnRlcnJ1cHQgTWFzayBvbiBsaW5lIDIgKi8NCisjZGVmaW5lICBFWFRJX0lNUl9NUjMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8IEludGVycnVwdCBNYXNrIG9uIGxpbmUgMyAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSA0ICovDQorI2RlZmluZSAgRVhUSV9JTVJfTVI1ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPCBJbnRlcnJ1cHQgTWFzayBvbiBsaW5lIDUgKi8NCisjZGVmaW5lICBFWFRJX0lNUl9NUjYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8IEludGVycnVwdCBNYXNrIG9uIGxpbmUgNiAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSA3ICovDQorI2RlZmluZSAgRVhUSV9JTVJfTVI4ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPCBJbnRlcnJ1cHQgTWFzayBvbiBsaW5lIDggKi8NCisjZGVmaW5lICBFWFRJX0lNUl9NUjkgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8IEludGVycnVwdCBNYXNrIG9uIGxpbmUgOSAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxMCAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxMSAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxMiAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxMyAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxNCAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxNSAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxNiAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxNyAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxOCAqLw0KKyNkZWZpbmUgIEVYVElfSU1SX01SMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITwgSW50ZXJydXB0IE1hc2sgb24gbGluZSAxOSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRVhUSV9FTVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRVhUSV9FTVJfTVIwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgMCAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDEgKi8NCisjZGVmaW5lICBFWFRJX0VNUl9NUjIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8IEV2ZW50IE1hc2sgb24gbGluZSAyICovDQorI2RlZmluZSAgRVhUSV9FTVJfTVIzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgMyAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDQgKi8NCisjZGVmaW5lICBFWFRJX0VNUl9NUjUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8IEV2ZW50IE1hc2sgb24gbGluZSA1ICovDQorI2RlZmluZSAgRVhUSV9FTVJfTVI2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgNiAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDcgKi8NCisjZGVmaW5lICBFWFRJX0VNUl9NUjggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8IEV2ZW50IE1hc2sgb24gbGluZSA4ICovDQorI2RlZmluZSAgRVhUSV9FTVJfTVI5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgOSAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDEwICovDQorI2RlZmluZSAgRVhUSV9FTVJfTVIxMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgMTEgKi8NCisjZGVmaW5lICBFWFRJX0VNUl9NUjEyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8IEV2ZW50IE1hc2sgb24gbGluZSAxMiAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SMTMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDEzICovDQorI2RlZmluZSAgRVhUSV9FTVJfTVIxNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgMTQgKi8NCisjZGVmaW5lICBFWFRJX0VNUl9NUjE1ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8IEV2ZW50IE1hc2sgb24gbGluZSAxNSAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SMTYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDE2ICovDQorI2RlZmluZSAgRVhUSV9FTVJfTVIxNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPCBFdmVudCBNYXNrIG9uIGxpbmUgMTcgKi8NCisjZGVmaW5lICBFWFRJX0VNUl9NUjE4ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8IEV2ZW50IE1hc2sgb24gbGluZSAxOCAqLw0KKyNkZWZpbmUgIEVYVElfRU1SX01SMTkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITwgRXZlbnQgTWFzayBvbiBsaW5lIDE5ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEVYVElfUlRTUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBFWFRJX1JUU1JfVFIwICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8IFJpc2luZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgMCAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxICovDQorI2RlZmluZSAgRVhUSV9SVFNSX1RSMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPCBSaXNpbmcgdHJpZ2dlciBldmVudCBjb25maWd1cmF0aW9uIGJpdCBvZiBsaW5lIDIgKi8NCisjZGVmaW5lICBFWFRJX1JUU1JfVFIzICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8IFJpc2luZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgMyAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA0ICovDQorI2RlZmluZSAgRVhUSV9SVFNSX1RSNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPCBSaXNpbmcgdHJpZ2dlciBldmVudCBjb25maWd1cmF0aW9uIGJpdCBvZiBsaW5lIDUgKi8NCisjZGVmaW5lICBFWFRJX1JUU1JfVFI2ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8IFJpc2luZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgNiAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA3ICovDQorI2RlZmluZSAgRVhUSV9SVFNSX1RSOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPCBSaXNpbmcgdHJpZ2dlciBldmVudCBjb25maWd1cmF0aW9uIGJpdCBvZiBsaW5lIDggKi8NCisjZGVmaW5lICBFWFRJX1JUU1JfVFI5ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8IFJpc2luZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgOSAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjEwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxMCAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxMSAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjEyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxMiAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjEzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxMyAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxNCAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxNSAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjE2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxNiAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjE3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxNyAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjE4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxOCAqLw0KKyNkZWZpbmUgIEVYVElfUlRTUl9UUjE5ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITwgUmlzaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxOSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBFWFRJX0ZUU1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAwICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAyICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAzICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA0ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA1ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA2ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA3ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA4ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSA5ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxMCAqLw0KKyNkZWZpbmUgIEVYVElfRlRTUl9UUjExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITwgRmFsbGluZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgMTEgKi8NCisjZGVmaW5lICBFWFRJX0ZUU1JfVFIxMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8IEZhbGxpbmcgdHJpZ2dlciBldmVudCBjb25maWd1cmF0aW9uIGJpdCBvZiBsaW5lIDEyICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxMyAqLw0KKyNkZWZpbmUgIEVYVElfRlRTUl9UUjE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITwgRmFsbGluZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgMTQgKi8NCisjZGVmaW5lICBFWFRJX0ZUU1JfVFIxNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8IEZhbGxpbmcgdHJpZ2dlciBldmVudCBjb25maWd1cmF0aW9uIGJpdCBvZiBsaW5lIDE1ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMTYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxNiAqLw0KKyNkZWZpbmUgIEVYVElfRlRTUl9UUjE3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITwgRmFsbGluZyB0cmlnZ2VyIGV2ZW50IGNvbmZpZ3VyYXRpb24gYml0IG9mIGxpbmUgMTcgKi8NCisjZGVmaW5lICBFWFRJX0ZUU1JfVFIxOCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8IEZhbGxpbmcgdHJpZ2dlciBldmVudCBjb25maWd1cmF0aW9uIGJpdCBvZiBsaW5lIDE4ICovDQorI2RlZmluZSAgRVhUSV9GVFNSX1RSMTkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPCBGYWxsaW5nIHRyaWdnZXIgZXZlbnQgY29uZmlndXJhdGlvbiBiaXQgb2YgbGluZSAxOSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBFWFRJX1NXSUVSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAwICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAxICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAyICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjMgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAzICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSA0ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjUgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSA1ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjYgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSA2ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjcgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSA3ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjggICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSA4ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjkgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSA5ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjEwICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAxMCAqLw0KKyNkZWZpbmUgIEVYVElfU1dJRVJfU1dJRVIxMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITwgU29mdHdhcmUgSW50ZXJydXB0IG9uIGxpbmUgMTEgKi8NCisjZGVmaW5lICBFWFRJX1NXSUVSX1NXSUVSMTIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8IFNvZnR3YXJlIEludGVycnVwdCBvbiBsaW5lIDEyICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjEzICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAxMyAqLw0KKyNkZWZpbmUgIEVYVElfU1dJRVJfU1dJRVIxNCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITwgU29mdHdhcmUgSW50ZXJydXB0IG9uIGxpbmUgMTQgKi8NCisjZGVmaW5lICBFWFRJX1NXSUVSX1NXSUVSMTUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8IFNvZnR3YXJlIEludGVycnVwdCBvbiBsaW5lIDE1ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjE2ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAxNiAqLw0KKyNkZWZpbmUgIEVYVElfU1dJRVJfU1dJRVIxNyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITwgU29mdHdhcmUgSW50ZXJydXB0IG9uIGxpbmUgMTcgKi8NCisjZGVmaW5lICBFWFRJX1NXSUVSX1NXSUVSMTggICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8IFNvZnR3YXJlIEludGVycnVwdCBvbiBsaW5lIDE4ICovDQorI2RlZmluZSAgRVhUSV9TV0lFUl9TV0lFUjE5ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPCBTb2Z0d2FyZSBJbnRlcnJ1cHQgb24gbGluZSAxOSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRVhUSV9QUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRVhUSV9QUl9QUjAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAwICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjEgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAxICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjIgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAyICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAzICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjQgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSA0ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSA1ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjYgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSA2ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjcgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSA3ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjggICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSA4ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjkgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSA5ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjEwICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAxMCAqLw0KKyNkZWZpbmUgIEVYVElfUFJfUFIxMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITwgUGVuZGluZyBiaXQgZm9yIGxpbmUgMTEgKi8NCisjZGVmaW5lICBFWFRJX1BSX1BSMTIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8IFBlbmRpbmcgYml0IGZvciBsaW5lIDEyICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjEzICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAxMyAqLw0KKyNkZWZpbmUgIEVYVElfUFJfUFIxNCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITwgUGVuZGluZyBiaXQgZm9yIGxpbmUgMTQgKi8NCisjZGVmaW5lICBFWFRJX1BSX1BSMTUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8IFBlbmRpbmcgYml0IGZvciBsaW5lIDE1ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAxNiAqLw0KKyNkZWZpbmUgIEVYVElfUFJfUFIxNyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITwgUGVuZGluZyBiaXQgZm9yIGxpbmUgMTcgKi8NCisjZGVmaW5lICBFWFRJX1BSX1BSMTggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8IFBlbmRpbmcgYml0IGZvciBsaW5lIDE4ICovDQorI2RlZmluZSAgRVhUSV9QUl9QUjE5ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPCBQZW5kaW5nIGJpdCBmb3IgbGluZSAxOSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBGTEFTSF9BQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgRkxBU0hfQUNSX0xBVEVOQ1kgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNykNCisjZGVmaW5lIEZMQVNIX0FDUl9MQVRFTkNZXzBXUyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBGTEFTSF9BQ1JfTEFURU5DWV8xV1MgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgRkxBU0hfQUNSX0xBVEVOQ1lfMldTICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIEZMQVNIX0FDUl9MQVRFTkNZXzNXUyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDMpDQorI2RlZmluZSBGTEFTSF9BQ1JfTEFURU5DWV80V1MgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRkxBU0hfQUNSX0xBVEVOQ1lfNVdTICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNSkNCisjZGVmaW5lIEZMQVNIX0FDUl9MQVRFTkNZXzZXUyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDYpDQorI2RlZmluZSBGTEFTSF9BQ1JfTEFURU5DWV83V1MgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA3KQ0KKw0KKyNkZWZpbmUgRkxBU0hfQUNSX1BSRlRFTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIEZMQVNIX0FDUl9JQ0VOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBGTEFTSF9BQ1JfRENFTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgRkxBU0hfQUNSX0lDUlNUICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIEZMQVNIX0FDUl9EQ1JTVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBGTEFTSF9BQ1JfQllURTBfQUREUkVTUyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDIzQzAwKQ0KKyNkZWZpbmUgRkxBU0hfQUNSX0JZVEUyX0FERFJFU1MgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAyM0MwMykNCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBGTEFTSF9TUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgRkxBU0hfU1JfRU9QICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEZMQVNIX1NSX1NPUCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBGTEFTSF9TUl9XUlBFUlIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgRkxBU0hfU1JfUEdBRVJSICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIEZMQVNIX1NSX1BHUEVSUiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBGTEFTSF9TUl9QR1NFUlIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgRkxBU0hfU1JfQlNZICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBGTEFTSF9DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgRkxBU0hfQ1JfUEcgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEZMQVNIX0NSX1NFUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBGTEFTSF9DUl9NRVIgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRkxBU0hfQ1JfU05CXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIEZMQVNIX0NSX1NOQl8xICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBGTEFTSF9DUl9TTkJfMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgRkxBU0hfQ1JfU05CXzMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIEZMQVNIX0NSX1BTSVpFXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBGTEFTSF9DUl9QU0laRV8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgRkxBU0hfQ1JfU1RSVCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIEZMQVNIX0NSX0VPUElFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApDQorI2RlZmluZSBGTEFTSF9DUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIEZMQVNIX09QVENSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKiovDQorI2RlZmluZSBGTEFTSF9PUFRDUl9PUFRMT0NLICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfT1BUU1RSVCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIEZMQVNIX09QVENSX0JPUl9MRVZfMCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBGTEFTSF9PUFRDUl9CT1JfTEVWXzEgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfQk9SX0xFViAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwQykNCisjZGVmaW5lIEZMQVNIX09QVENSX1dER19TVyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9uUlNUX1NUT1AgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfblJTVF9TVERCWSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIEZMQVNIX09QVENSX1JEUF8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9SRFBfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfUkRQXzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIEZMQVNIX09QVENSX1JEUF8zICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9SRFBfNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfUkRQXzUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisjZGVmaW5lIEZMQVNIX09QVENSX1JEUF82ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9SRFBfNyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfbldSUF8wICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIEZMQVNIX09QVENSX25XUlBfMSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9uV1JQXzIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfbldSUF8zICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lIEZMQVNIX09QVENSX25XUlBfNCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9uV1JQXzUgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfbldSUF82ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIEZMQVNIX09QVENSX25XUlBfNyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9uV1JQXzggICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKQ0KKyNkZWZpbmUgRkxBU0hfT1BUQ1JfbldSUF85ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lIEZMQVNIX09QVENSX25XUlBfMTAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSBGTEFTSF9PUFRDUl9uV1JQXzExICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgRmxleGlibGUgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19CQ1IxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9NQktFTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxNZW1vcnkgYmFuayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19CQ1IxX01VWEVOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEFkZHJlc3MvZGF0YSBtdWx0aXBsZXhpbmcgZW5hYmxlIGJpdCAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9NVFlQICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwQykgICAgICAgIC8qITxNVFlQWzE6MF0gYml0cyAoTWVtb3J5IHR5cGUpICovDQorI2RlZmluZSAgRlNNQ19CQ1IxX01UWVBfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CQ1IxX01UWVBfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19CQ1IxX01XSUQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgICAgICAgLyohPE1XSURbMTowXSBiaXRzIChNZW1vcnkgZGF0YSBidXMgd2lkdGgpICovDQorI2RlZmluZSAgRlNNQ19CQ1IxX01XSURfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CQ1IxX01XSURfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19CQ1IxX0ZBQ0NFTiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZsYXNoIGFjY2VzcyBlbmFibGUgKi8NCisjZGVmaW5lICBGU01DX0JDUjFfQlVSU1RFTiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8QnVyc3QgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9XQUlUUE9MICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxXYWl0IHNpZ25hbCBwb2xhcml0eSBiaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjFfV1JBUE1PRCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8V3JhcHBlZCBidXJzdCBtb2RlIHN1cHBvcnQgKi8NCisjZGVmaW5lICBGU01DX0JDUjFfV0FJVENGRyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8V2FpdCB0aW1pbmcgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9XUkVOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxXcml0ZSBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19CQ1IxX1dBSVRFTiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPFdhaXQgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9FWFRNT0QgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxFeHRlbmRlZCBtb2RlIGVuYWJsZSAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9BU1lOQ1dBSVQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxBc3luY2hyb25vdXMgd2FpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMV9DQlVSU1RSVyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxXcml0ZSBidXJzdCBlbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19CQ1IyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9NQktFTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxNZW1vcnkgYmFuayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19CQ1IyX01VWEVOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEFkZHJlc3MvZGF0YSBtdWx0aXBsZXhpbmcgZW5hYmxlIGJpdCAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9NVFlQICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwQykgICAgICAgIC8qITxNVFlQWzE6MF0gYml0cyAoTWVtb3J5IHR5cGUpICovDQorI2RlZmluZSAgRlNNQ19CQ1IyX01UWVBfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CQ1IyX01UWVBfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19CQ1IyX01XSUQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgICAgICAgLyohPE1XSURbMTowXSBiaXRzIChNZW1vcnkgZGF0YSBidXMgd2lkdGgpICovDQorI2RlZmluZSAgRlNNQ19CQ1IyX01XSURfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CQ1IyX01XSURfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19CQ1IyX0ZBQ0NFTiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZsYXNoIGFjY2VzcyBlbmFibGUgKi8NCisjZGVmaW5lICBGU01DX0JDUjJfQlVSU1RFTiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8QnVyc3QgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9XQUlUUE9MICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxXYWl0IHNpZ25hbCBwb2xhcml0eSBiaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjJfV1JBUE1PRCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8V3JhcHBlZCBidXJzdCBtb2RlIHN1cHBvcnQgKi8NCisjZGVmaW5lICBGU01DX0JDUjJfV0FJVENGRyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8V2FpdCB0aW1pbmcgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9XUkVOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxXcml0ZSBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19CQ1IyX1dBSVRFTiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPFdhaXQgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9FWFRNT0QgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxFeHRlbmRlZCBtb2RlIGVuYWJsZSAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9BU1lOQ1dBSVQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxBc3luY2hyb25vdXMgd2FpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSMl9DQlVSU1RSVyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxXcml0ZSBidXJzdCBlbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19CQ1IzIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfQkNSM19NQktFTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxNZW1vcnkgYmFuayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX01VWEVOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEFkZHJlc3MvZGF0YSBtdWx0aXBsZXhpbmcgZW5hYmxlIGJpdCAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQkNSM19NVFlQICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwQykgICAgICAgIC8qITxNVFlQWzE6MF0gYml0cyAoTWVtb3J5IHR5cGUpICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX01UWVBfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX01UWVBfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19CQ1IzX01XSUQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgICAgICAgLyohPE1XSURbMTowXSBiaXRzIChNZW1vcnkgZGF0YSBidXMgd2lkdGgpICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX01XSURfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX01XSURfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19CQ1IzX0ZBQ0NFTiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEZsYXNoIGFjY2VzcyBlbmFibGUgKi8NCisjZGVmaW5lICBGU01DX0JDUjNfQlVSU1RFTiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8QnVyc3QgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSM19XQUlUUE9MICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxXYWl0IHNpZ25hbCBwb2xhcml0eSBiaXQuICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX1dSQVBNT0QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPFdyYXBwZWQgYnVyc3QgbW9kZSBzdXBwb3J0ICovDQorI2RlZmluZSAgRlNNQ19CQ1IzX1dBSVRDRkcgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPFdhaXQgdGltaW5nIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lICBGU01DX0JDUjNfV1JFTiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8V3JpdGUgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSM19XQUlURU4gICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxXYWl0IGVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjNfRVhUTU9EICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RXh0ZW5kZWQgbW9kZSBlbmFibGUgKi8NCisjZGVmaW5lICBGU01DX0JDUjNfQVNZTkNXQUlUICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8QXN5bmNocm9ub3VzIHdhaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjNfQ0JVUlNUUlcgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8V3JpdGUgYnVyc3QgZW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEZTTUNfQkNSNCByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBGU01DX0JDUjRfTUJLRU4gICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8TWVtb3J5IGJhbmsgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9NVVhFTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxBZGRyZXNzL2RhdGEgbXVsdGlwbGV4aW5nIGVuYWJsZSBiaXQgKi8NCisNCisjZGVmaW5lICBGU01DX0JDUjRfTVRZUCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEMpICAgICAgICAvKiE8TVRZUFsxOjBdIGJpdHMgKE1lbW9yeSB0eXBlKSAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9NVFlQXzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9NVFlQXzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9NV0lEICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAzMCkgICAgICAgIC8qITxNV0lEWzE6MF0gYml0cyAoTWVtb3J5IGRhdGEgYnVzIHdpZHRoKSAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9NV0lEXzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9NV0lEXzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9GQUNDRU4gICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxGbGFzaCBhY2Nlc3MgZW5hYmxlICovDQorI2RlZmluZSAgRlNNQ19CQ1I0X0JVUlNURU4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJ1cnN0IGVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjRfV0FJVFBPTCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8V2FpdCBzaWduYWwgcG9sYXJpdHkgYml0ICovDQorI2RlZmluZSAgRlNNQ19CQ1I0X1dSQVBNT0QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPFdyYXBwZWQgYnVyc3QgbW9kZSBzdXBwb3J0ICovDQorI2RlZmluZSAgRlNNQ19CQ1I0X1dBSVRDRkcgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPFdhaXQgdGltaW5nIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lICBGU01DX0JDUjRfV1JFTiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8V3JpdGUgZW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIEZTTUNfQkNSNF9XQUlURU4gICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxXYWl0IGVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjRfRVhUTU9EICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8RXh0ZW5kZWQgbW9kZSBlbmFibGUgKi8NCisjZGVmaW5lICBGU01DX0JDUjRfQVNZTkNXQUlUICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8QXN5bmNocm9ub3VzIHdhaXQgKi8NCisjZGVmaW5lICBGU01DX0JDUjRfQ0JVUlNUUlcgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8V3JpdGUgYnVyc3QgZW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEZTTUNfQlRSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BRERTRVQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikgICAgICAgIC8qITxBRERTRVRbMzowXSBiaXRzIChBZGRyZXNzIHNldHVwIHBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BRERTRVRfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BRERTRVRfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BRERTRVRfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BRERTRVRfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BRERITEQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGMCkgICAgICAgIC8qITxBRERITERbMzowXSBiaXRzIChBZGRyZXNzLWhvbGQgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0FEREhMRF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0FEREhMRF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0FEREhMRF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0FEREhMRF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIxX0RBVEFTVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPERBVEFTVCBbNzowXSBiaXRzIChEYXRhLXBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfNCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfNSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfNiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9EQVRBU1RfNyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9CVVNUVVJOICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBGMDAwMCkgICAgICAgIC8qITxCVVNUVVJOWzM6MF0gYml0cyAoQnVzIHR1cm5hcm91bmQgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0JVU1RVUk5fMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0JVU1RVUk5fMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0JVU1RVUk5fMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0JVU1RVUk5fMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIxX0NMS0RJViAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRjAwMDAwKSAgICAgICAgLyohPENMS0RJVlszOjBdIGJpdHMgKENsb2NrIGRpdmlkZSByYXRpbykgKi8NCisjZGVmaW5lICBGU01DX0JUUjFfQ0xLRElWXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjFfQ0xLRElWXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjFfQ0xLRElWXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjFfQ0xLRElWXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjFfREFUTEFUICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEYwMDAwMDApICAgICAgICAvKiE8REFUTEFbMzowXSBiaXRzIChEYXRhIGxhdGVuY3kpICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0RBVExBVF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0RBVExBVF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0RBVExBVF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIxX0RBVExBVF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIxX0FDQ01PRCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKSAgICAgICAgLyohPEFDQ01PRFsxOjBdIGJpdHMgKEFjY2VzcyBtb2RlKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BQ0NNT0RfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMV9BQ0NNT0RfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX0JUUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FERFNFVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKSAgICAgICAgLyohPEFERFNFVFszOjBdIGJpdHMgKEFkZHJlc3Mgc2V0dXAgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FERFNFVF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FERFNFVF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FERFNFVF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FERFNFVF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIyX0FEREhMRCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEYwKSAgICAgICAgLyohPEFEREhMRFszOjBdIGJpdHMgKEFkZHJlc3MtaG9sZCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQURESExEXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQURESExEXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQURESExEXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQURESExEXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjJfREFUQVNUICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8REFUQVNUIFs3OjBdIGJpdHMgKERhdGEtcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF80ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF81ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF82ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0RBVEFTVF83ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIyX0JVU1RVUk4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEYwMDAwKSAgICAgICAgLyohPEJVU1RVUk5bMzowXSBiaXRzIChCdXMgdHVybmFyb3VuZCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQlVTVFVSTl8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQlVTVFVSTl8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQlVTVFVSTl8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfQlVTVFVSTl8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjJfQ0xLRElWICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGMDAwMDApICAgICAgICAvKiE8Q0xLRElWWzM6MF0gYml0cyAoQ2xvY2sgZGl2aWRlIHJhdGlvKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMl9DTEtESVZfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMl9DTEtESVZfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMl9DTEtESVZfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSMl9DTEtESVZfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSMl9EQVRMQVQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwRjAwMDAwMCkgICAgICAgIC8qITxEQVRMQVszOjBdIGJpdHMgKERhdGEgbGF0ZW5jeSkgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfREFUTEFUXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfREFUTEFUXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfREFUTEFUXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjJfREFUTEFUXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjJfQUNDTU9EICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzAwMDAwMDApICAgICAgICAvKiE8QUNDTU9EWzE6MF0gYml0cyAoQWNjZXNzIG1vZGUpICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FDQ01PRF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIyX0FDQ01PRF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX0JUUjMgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FERFNFVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKSAgICAgICAgLyohPEFERFNFVFszOjBdIGJpdHMgKEFkZHJlc3Mgc2V0dXAgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FERFNFVF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FERFNFVF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FERFNFVF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FERFNFVF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIzX0FEREhMRCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEYwKSAgICAgICAgLyohPEFEREhMRFszOjBdIGJpdHMgKEFkZHJlc3MtaG9sZCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQURESExEXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQURESExEXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQURESExEXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQURESExEXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjNfREFUQVNUICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8REFUQVNUIFs3OjBdIGJpdHMgKERhdGEtcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF80ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF81ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF82ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0RBVEFTVF83ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19CVFIzX0JVU1RVUk4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEYwMDAwKSAgICAgICAgLyohPEJVU1RVUk5bMzowXSBiaXRzIChCdXMgdHVybmFyb3VuZCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQlVTVFVSTl8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQlVTVFVSTl8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQlVTVFVSTl8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfQlVTVFVSTl8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjNfQ0xLRElWICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGMDAwMDApICAgICAgICAvKiE8Q0xLRElWWzM6MF0gYml0cyAoQ2xvY2sgZGl2aWRlIHJhdGlvKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSM19DTEtESVZfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSM19DTEtESVZfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSM19DTEtESVZfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSM19DTEtESVZfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSM19EQVRMQVQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwRjAwMDAwMCkgICAgICAgIC8qITxEQVRMQVszOjBdIGJpdHMgKERhdGEgbGF0ZW5jeSkgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfREFUTEFUXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfREFUTEFUXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfREFUTEFUXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjNfREFUTEFUXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjNfQUNDTU9EICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzAwMDAwMDApICAgICAgICAvKiE8QUNDTU9EWzE6MF0gYml0cyAoQWNjZXNzIG1vZGUpICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FDQ01PRF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFIzX0FDQ01PRF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEZTTUNfQlRSNCByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUREU0VUICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEYpICAgICAgICAvKiE8QUREU0VUWzM6MF0gYml0cyAoQWRkcmVzcyBzZXR1cCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUREU0VUXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUREU0VUXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUREU0VUXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUREU0VUXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjRfQURESExEICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRjApICAgICAgICAvKiE8QURESExEWzM6MF0gYml0cyAoQWRkcmVzcy1ob2xkIHBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9BRERITERfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9BRERITERfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9BRERITERfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9BRERITERfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9EQVRBU1QgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxEQVRBU1QgWzc6MF0gYml0cyAoRGF0YS1waGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzYgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfREFUQVNUXzcgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX0JUUjRfQlVTVFVSTiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRjAwMDApICAgICAgICAvKiE8QlVTVFVSTlszOjBdIGJpdHMgKEJ1cyB0dXJuYXJvdW5kIHBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9CVVNUVVJOXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9CVVNUVVJOXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9CVVNUVVJOXzIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9CVVNUVVJOXzMgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9DTEtESVYgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEYwMDAwMCkgICAgICAgIC8qITxDTEtESVZbMzowXSBiaXRzIChDbG9jayBkaXZpZGUgcmF0aW8pICovDQorI2RlZmluZSAgRlNNQ19CVFI0X0NMS0RJVl8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CVFI0X0NMS0RJVl8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CVFI0X0NMS0RJVl8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CVFI0X0NMS0RJVl8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CVFI0X0RBVExBVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKSAgICAgICAgLyohPERBVExBWzM6MF0gYml0cyAoRGF0YSBsYXRlbmN5KSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9EQVRMQVRfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9EQVRMQVRfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9EQVRMQVRfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9EQVRMQVRfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQlRSNF9BQ0NNT0QgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgzMDAwMDAwMCkgICAgICAgIC8qITxBQ0NNT0RbMTowXSBiaXRzIChBY2Nlc3MgbW9kZSkgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUNDTU9EXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JUUjRfQUNDTU9EXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19CV1RSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQUREU0VUICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikgICAgICAgIC8qITxBRERTRVRbMzowXSBiaXRzIChBZGRyZXNzIHNldHVwIHBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQUREU0VUXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQUREU0VUXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQUREU0VUXzIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQUREU0VUXzMgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQURESExEICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGMCkgICAgICAgIC8qITxBRERITERbMzowXSBiaXRzIChBZGRyZXNzLWhvbGQgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9BRERITERfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9BRERITERfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9BRERITERfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9BRERITERfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSMV9EQVRBU1QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPERBVEFTVCBbNzowXSBiaXRzIChEYXRhLXBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzMgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzYgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUQVNUXzcgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQ0xLRElWICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEYwMDAwMCkgICAgICAgIC8qITxDTEtESVZbMzowXSBiaXRzIChDbG9jayBkaXZpZGUgcmF0aW8pICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9DTEtESVZfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9DTEtESVZfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9DTEtESVZfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSMV9DTEtESVZfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSMV9EQVRMQVQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKSAgICAgICAgLyohPERBVExBWzM6MF0gYml0cyAoRGF0YSBsYXRlbmN5KSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUTEFUXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUTEFUXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUTEFUXzIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfREFUTEFUXzMgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQldUUjFfQUNDTU9EICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgzMDAwMDAwMCkgICAgICAgIC8qITxBQ0NNT0RbMTowXSBiaXRzIChBY2Nlc3MgbW9kZSkgKi8NCisjZGVmaW5lICBGU01DX0JXVFIxX0FDQ01PRF8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JXVFIxX0FDQ01PRF8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19CV1RSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUREU0VUICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikgICAgICAgIC8qITxBRERTRVRbMzowXSBiaXRzIChBZGRyZXNzIHNldHVwIHBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUREU0VUXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUREU0VUXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUREU0VUXzIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUREU0VUXzMgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQURESExEICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGMCkgICAgICAgIC8qITxBRERITERbMzowXSBiaXRzIChBZGRyZXNzLWhvbGQgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9BRERITERfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9BRERITERfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9BRERITERfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9BRERITERfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSMl9EQVRBU1QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPERBVEFTVCBbNzowXSBiaXRzIChEYXRhLXBoYXNlIGR1cmF0aW9uKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzMgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzYgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfREFUQVNUXzcgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQ0xLRElWICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEYwMDAwMCkgICAgICAgIC8qITxDTEtESVZbMzowXSBiaXRzIChDbG9jayBkaXZpZGUgcmF0aW8pICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9DTEtESVZfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9DTEtESVZfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCAxKi8NCisjZGVmaW5lICBGU01DX0JXVFIyX0NMS0RJVl8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JXVFIyX0NMS0RJVl8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JXVFIyX0RBVExBVCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEYwMDAwMDApICAgICAgICAvKiE8REFUTEFbMzowXSBiaXRzIChEYXRhIGxhdGVuY3kpICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9EQVRMQVRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9EQVRMQVRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9EQVRMQVRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSMl9EQVRMQVRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSMl9BQ0NNT0QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKSAgICAgICAgLyohPEFDQ01PRFsxOjBdIGJpdHMgKEFjY2VzcyBtb2RlKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUNDTU9EXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjJfQUNDTU9EXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX0JXVFIzIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19CV1RSM19BRERTRVQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKSAgICAgICAgLyohPEFERFNFVFszOjBdIGJpdHMgKEFkZHJlc3Mgc2V0dXAgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19BRERTRVRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19BRERTRVRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19BRERTRVRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19BRERTRVRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSM19BRERITEQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEYwKSAgICAgICAgLyohPEFEREhMRFszOjBdIGJpdHMgKEFkZHJlc3MtaG9sZCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0FEREhMRF8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0FEREhMRF8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0FEREhMRF8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0FEREhMRF8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JXVFIzX0RBVEFTVCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8REFUQVNUIFs3OjBdIGJpdHMgKERhdGEtcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfNCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfNSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfNiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRBU1RfNyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSM19DTEtESVYgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRjAwMDAwKSAgICAgICAgLyohPENMS0RJVlszOjBdIGJpdHMgKENsb2NrIGRpdmlkZSByYXRpbykgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0NMS0RJVl8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0NMS0RJVl8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0NMS0RJVl8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JXVFIzX0NMS0RJVl8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JXVFIzX0RBVExBVCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEYwMDAwMDApICAgICAgICAvKiE8REFUTEFbMzowXSBiaXRzIChEYXRhIGxhdGVuY3kpICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRMQVRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRMQVRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRMQVRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSM19EQVRMQVRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSM19BQ0NNT0QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKSAgICAgICAgLyohPEFDQ01PRFsxOjBdIGJpdHMgKEFjY2VzcyBtb2RlKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjNfQUNDTU9EXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjNfQUNDTU9EXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX0JXVFI0IHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BRERTRVQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKSAgICAgICAgLyohPEFERFNFVFszOjBdIGJpdHMgKEFkZHJlc3Mgc2V0dXAgcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BRERTRVRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BRERTRVRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BRERTRVRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BRERTRVRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BRERITEQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEYwKSAgICAgICAgLyohPEFEREhMRFszOjBdIGJpdHMgKEFkZHJlc3MtaG9sZCBwaGFzZSBkdXJhdGlvbikgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0FEREhMRF8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0FEREhMRF8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0FEREhMRF8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0FEREhMRF8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JXVFI0X0RBVEFTVCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8REFUQVNUIFs3OjBdIGJpdHMgKERhdGEtcGhhc2UgZHVyYXRpb24pICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfNCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfNSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfNiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRBU1RfNyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSNF9DTEtESVYgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRjAwMDAwKSAgICAgICAgLyohPENMS0RJVlszOjBdIGJpdHMgKENsb2NrIGRpdmlkZSByYXRpbykgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0NMS0RJVl8wICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0NMS0RJVl8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0NMS0RJVl8yICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX0JXVFI0X0NMS0RJVl8zICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX0JXVFI0X0RBVExBVCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEYwMDAwMDApICAgICAgICAvKiE8REFUTEFbMzowXSBiaXRzIChEYXRhIGxhdGVuY3kpICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRMQVRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRMQVRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRMQVRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19CV1RSNF9EQVRMQVRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19CV1RSNF9BQ0NNT0QgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKSAgICAgICAgLyohPEFDQ01PRFsxOjBdIGJpdHMgKEFjY2VzcyBtb2RlKSAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjRfQUNDTU9EXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfQldUUjRfQUNDTU9EXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX1BDUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1BXQUlURU4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPFdhaXQgZmVhdHVyZSBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1BCS0VOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPFBDIENhcmQvTkFORCBGbGFzaCBtZW1vcnkgYmFuayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1BUWVAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPE1lbW9yeSB0eXBlICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IyX1BXSUQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgICAgICAgLyohPFBXSURbMTowXSBiaXRzIChOQU5EIEZsYXNoIGRhdGFidXMgd2lkdGgpICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1BXSURfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1BXSURfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IyX0VDQ0VOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEVDQyBjb21wdXRhdGlvbiBsb2dpYyBlbmFibGUgYml0ICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IyX1RDTFIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxRTAwKSAgICAgICAgLyohPFRDTFJbMzowXSBiaXRzIChDTEUgdG8gUkUgZGVsYXkpICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1RDTFJfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1RDTFJfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1RDTFJfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQ1IyX1RDTFJfMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IyX1RBUiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDFFMDAwKSAgICAgICAgLyohPFRBUlszOjBdIGJpdHMgKEFMRSB0byBSRSBkZWxheSkgKi8NCisjZGVmaW5lICBGU01DX1BDUjJfVEFSXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BDUjJfVEFSXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BDUjJfVEFSXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BDUjJfVEFSXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX1BDUjJfRUNDUFMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRTAwMDApICAgICAgICAvKiE8RUNDUFNbMTowXSBiaXRzIChFQ0MgcGFnZSBzaXplKSAqLw0KKyNkZWZpbmUgIEZTTUNfUENSMl9FQ0NQU18wICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUENSMl9FQ0NQU18xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUENSMl9FQ0NQU18yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX1BDUjMgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1BXQUlURU4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPFdhaXQgZmVhdHVyZSBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1BCS0VOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPFBDIENhcmQvTkFORCBGbGFzaCBtZW1vcnkgYmFuayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1BUWVAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPE1lbW9yeSB0eXBlICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IzX1BXSUQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgICAgICAgLyohPFBXSURbMTowXSBiaXRzIChOQU5EIEZsYXNoIGRhdGFidXMgd2lkdGgpICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1BXSURfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1BXSURfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IzX0VDQ0VOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEVDQyBjb21wdXRhdGlvbiBsb2dpYyBlbmFibGUgYml0ICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IzX1RDTFIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxRTAwKSAgICAgICAgLyohPFRDTFJbMzowXSBiaXRzIChDTEUgdG8gUkUgZGVsYXkpICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1RDTFJfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1RDTFJfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1RDTFJfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQ1IzX1RDTFJfMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1IzX1RBUiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDFFMDAwKSAgICAgICAgLyohPFRBUlszOjBdIGJpdHMgKEFMRSB0byBSRSBkZWxheSkgKi8NCisjZGVmaW5lICBGU01DX1BDUjNfVEFSXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BDUjNfVEFSXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BDUjNfVEFSXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BDUjNfVEFSXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX1BDUjNfRUNDUFMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRTAwMDApICAgICAgICAvKiE8RUNDUFNbMjowXSBiaXRzIChFQ0MgcGFnZSBzaXplKSAqLw0KKyNkZWZpbmUgIEZTTUNfUENSM19FQ0NQU18wICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUENSM19FQ0NQU18xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUENSM19FQ0NQU18yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX1BDUjQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1BXQUlURU4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPFdhaXQgZmVhdHVyZSBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1BCS0VOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPFBDIENhcmQvTkFORCBGbGFzaCBtZW1vcnkgYmFuayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1BUWVAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPE1lbW9yeSB0eXBlICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1I0X1BXSUQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgICAgICAgLyohPFBXSURbMTowXSBiaXRzIChOQU5EIEZsYXNoIGRhdGFidXMgd2lkdGgpICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1BXSURfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1BXSURfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1I0X0VDQ0VOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEVDQyBjb21wdXRhdGlvbiBsb2dpYyBlbmFibGUgYml0ICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1I0X1RDTFIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxRTAwKSAgICAgICAgLyohPFRDTFJbMzowXSBiaXRzIChDTEUgdG8gUkUgZGVsYXkpICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1RDTFJfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1RDTFJfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1RDTFJfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQ1I0X1RDTFJfMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgRlNNQ19QQ1I0X1RBUiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDFFMDAwKSAgICAgICAgLyohPFRBUlszOjBdIGJpdHMgKEFMRSB0byBSRSBkZWxheSkgKi8NCisjZGVmaW5lICBGU01DX1BDUjRfVEFSXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BDUjRfVEFSXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BDUjRfVEFSXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BDUjRfVEFSXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBGU01DX1BDUjRfRUNDUFMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRTAwMDApICAgICAgICAvKiE8RUNDUFNbMjowXSBiaXRzIChFQ0MgcGFnZSBzaXplKSAqLw0KKyNkZWZpbmUgIEZTTUNfUENSNF9FQ0NQU18wICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUENSNF9FQ0NQU18xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUENSNF9FQ0NQU18yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19TUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19TUjJfSVJTICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAgICAgICAgICAgICAgLyohPEludGVycnVwdCBSaXNpbmcgRWRnZSBzdGF0dXMgKi8NCisjZGVmaW5lICBGU01DX1NSMl9JTFMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgICAgICAgICAgICAgICAvKiE8SW50ZXJydXB0IExldmVsIHN0YXR1cyAqLw0KKyNkZWZpbmUgIEZTTUNfU1IyX0lGUyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgICAgICAgICAgICAgIC8qITxJbnRlcnJ1cHQgRmFsbGluZyBFZGdlIHN0YXR1cyAqLw0KKyNkZWZpbmUgIEZTTUNfU1IyX0lSRU4gICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KSAgICAgICAgICAgICAgIC8qITxJbnRlcnJ1cHQgUmlzaW5nIEVkZ2UgZGV0ZWN0aW9uIEVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX1NSMl9JTEVOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxMCkgICAgICAgICAgICAgICAvKiE8SW50ZXJydXB0IExldmVsIGRldGVjdGlvbiBFbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19TUjJfSUZFTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgICAgICAgICAgICAgLyohPEludGVycnVwdCBGYWxsaW5nIEVkZ2UgZGV0ZWN0aW9uIEVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX1NSMl9GRU1QVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg0MCkgICAgICAgICAgICAgICAvKiE8RklGTyBlbXB0eSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19TUjMgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19TUjNfSVJTICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAgICAgICAgICAgICAgLyohPEludGVycnVwdCBSaXNpbmcgRWRnZSBzdGF0dXMgKi8NCisjZGVmaW5lICBGU01DX1NSM19JTFMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgICAgICAgICAgICAgICAvKiE8SW50ZXJydXB0IExldmVsIHN0YXR1cyAqLw0KKyNkZWZpbmUgIEZTTUNfU1IzX0lGUyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgICAgICAgICAgICAgIC8qITxJbnRlcnJ1cHQgRmFsbGluZyBFZGdlIHN0YXR1cyAqLw0KKyNkZWZpbmUgIEZTTUNfU1IzX0lSRU4gICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KSAgICAgICAgICAgICAgIC8qITxJbnRlcnJ1cHQgUmlzaW5nIEVkZ2UgZGV0ZWN0aW9uIEVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX1NSM19JTEVOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxMCkgICAgICAgICAgICAgICAvKiE8SW50ZXJydXB0IExldmVsIGRldGVjdGlvbiBFbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19TUjNfSUZFTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgICAgICAgICAgICAgLyohPEludGVycnVwdCBGYWxsaW5nIEVkZ2UgZGV0ZWN0aW9uIEVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX1NSM19GRU1QVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg0MCkgICAgICAgICAgICAgICAvKiE8RklGTyBlbXB0eSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19TUjQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19TUjRfSVJTICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAgICAgICAgICAgICAgLyohPEludGVycnVwdCBSaXNpbmcgRWRnZSBzdGF0dXMgKi8NCisjZGVmaW5lICBGU01DX1NSNF9JTFMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgICAgICAgICAgICAgICAvKiE8SW50ZXJydXB0IExldmVsIHN0YXR1cyAqLw0KKyNkZWZpbmUgIEZTTUNfU1I0X0lGUyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgICAgICAgICAgICAgIC8qITxJbnRlcnJ1cHQgRmFsbGluZyBFZGdlIHN0YXR1cyAqLw0KKyNkZWZpbmUgIEZTTUNfU1I0X0lSRU4gICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KSAgICAgICAgICAgICAgIC8qITxJbnRlcnJ1cHQgUmlzaW5nIEVkZ2UgZGV0ZWN0aW9uIEVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX1NSNF9JTEVOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxMCkgICAgICAgICAgICAgICAvKiE8SW50ZXJydXB0IExldmVsIGRldGVjdGlvbiBFbmFibGUgYml0ICovDQorI2RlZmluZSAgRlNNQ19TUjRfSUZFTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgICAgICAgICAgICAgLyohPEludGVycnVwdCBGYWxsaW5nIEVkZ2UgZGV0ZWN0aW9uIEVuYWJsZSBiaXQgKi8NCisjZGVmaW5lICBGU01DX1NSNF9GRU1QVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg0MCkgICAgICAgICAgICAgICAvKiE8RklGTyBlbXB0eSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX1BNRU0yIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1TRVQyICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEZGKSAgICAgICAgLyohPE1FTVNFVDJbNzowXSBiaXRzIChDb21tb24gbWVtb3J5IDIgc2V0dXAgdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfMCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfMSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfMiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfMyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfNCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfNSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfNiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVNFVDJfNyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX1BNRU0yX01FTVdBSVQyICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8TUVNV0FJVDJbNzowXSBiaXRzIChDb21tb24gbWVtb3J5IDIgd2FpdCB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfMCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfMSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfMiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfMyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfNCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfNSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNV0FJVDJfNyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfUE1FTTJfTUVNSE9MRDIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEZGMDAwMCkgICAgICAgIC8qITxNRU1IT0xEMls3OjBdIGJpdHMgKENvbW1vbiBtZW1vcnkgMiBob2xkIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl8wICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl8xICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl8yICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl8zICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl80ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl81ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl82ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1IT0xEMl83ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QTUVNMl9NRU1ISVoyICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPE1FTUhJWjJbNzowXSBiaXRzIChDb21tb24gbWVtb3J5IDIgZGF0YWJ1cyBIaVogdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfMCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfMSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfMiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfMyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfNCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfNSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfNiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BNRU0yX01FTUhJWjJfNyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19QTUVNMyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNU0VUMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGRikgICAgICAgIC8qITxNRU1TRVQzWzc6MF0gYml0cyAoQ29tbW9uIG1lbW9yeSAzIHNldHVwIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzEgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzMgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzYgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1TRVQzXzcgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1XQUlUMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPE1FTVdBSVQzWzc6MF0gYml0cyAoQ29tbW9uIG1lbW9yeSAzIHdhaXQgdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzEgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzQgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzUgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzYgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BNRU0zX01FTVdBSVQzXzcgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX1BNRU0zX01FTUhPTEQzICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRjAwMDApICAgICAgICAvKiE8TUVNSE9MRDNbNzowXSBiaXRzIChDb21tb24gbWVtb3J5IDMgaG9sZCB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfMCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfMSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfMiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfMyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfNCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfNSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSE9MRDNfNyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfUE1FTTNfTUVNSElaMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRjAwMDAwMCkgICAgICAgIC8qITxNRU1ISVozWzc6MF0gYml0cyAoQ29tbW9uIG1lbW9yeSAzIGRhdGFidXMgSGlaIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzEgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzMgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzYgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QTUVNM19NRU1ISVozXzcgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEZTTUNfUE1FTTQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTVNFVDQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRkYpICAgICAgICAvKiE8TUVNU0VUNFs3OjBdIGJpdHMgKENvbW1vbiBtZW1vcnkgNCBzZXR1cCB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF8wICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF8xICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF8yICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF8zICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF80ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF81ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF82ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNU0VUNF83ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNV0FJVDQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxNRU1XQUlUNFs3OjBdIGJpdHMgKENvbW1vbiBtZW1vcnkgNCB3YWl0IHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF8wICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF8xICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF8yICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF8zICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF80ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF81ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF82ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1XQUlUNF83ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QTUVNNF9NRU1IT0xENCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkYwMDAwKSAgICAgICAgLyohPE1FTUhPTEQ0Wzc6MF0gYml0cyAoQ29tbW9uIG1lbW9yeSA0IGhvbGQgdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzEgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzQgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzUgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzYgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhPTEQ0XzcgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX1BNRU00X01FTUhJWjQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwMDAwMDApICAgICAgICAvKiE8TUVNSElaNFs3OjBdIGJpdHMgKENvbW1vbiBtZW1vcnkgNCBkYXRhYnVzIEhpWiB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF8wICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF8xICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF8yICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF8zICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF80ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF81ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF82ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUE1FTTRfTUVNSElaNF83ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX1BBVFQyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRTRVQyICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEZGKSAgICAgICAgLyohPEFUVFNFVDJbNzowXSBiaXRzIChBdHRyaWJ1dGUgbWVtb3J5IDIgc2V0dXAgdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfMCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfMSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfMiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfMyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfNCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfNSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfNiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFNFVDJfNyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVFdBSVQyICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEZGMDApICAgICAgICAvKiE8QVRUV0FJVDJbNzowXSBiaXRzIChBdHRyaWJ1dGUgbWVtb3J5IDIgd2FpdCB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfMCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfMSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfMiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfMyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfNCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfNSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUV0FJVDJfNyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfUEFUVDJfQVRUSE9MRDIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEZGMDAwMCkgICAgICAgIC8qITxBVFRIT0xEMls3OjBdIGJpdHMgKEF0dHJpYnV0ZSBtZW1vcnkgMiBob2xkIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl8wICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl8xICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl8yICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl8zICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl80ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl81ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl82ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRIT0xEMl83ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QQVRUMl9BVFRISVoyICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPEFUVEhJWjJbNzowXSBiaXRzIChBdHRyaWJ1dGUgbWVtb3J5IDIgZGF0YWJ1cyBIaVogdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfMCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfMSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfMiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfMyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfNCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfNSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfNiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BBVFQyX0FUVEhJWjJfNyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgRlNNQ19QQVRUMyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUU0VUMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGRikgICAgICAgIC8qITxBVFRTRVQzWzc6MF0gYml0cyAoQXR0cmlidXRlIG1lbW9yeSAzIHNldHVwIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzEgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzMgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzYgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRTRVQzXzcgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRXQUlUMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPEFUVFdBSVQzWzc6MF0gYml0cyAoQXR0cmlidXRlIG1lbW9yeSAzIHdhaXQgdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzEgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzQgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzUgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzYgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVFdBSVQzXzcgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX1BBVFQzX0FUVEhPTEQzICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRjAwMDApICAgICAgICAvKiE8QVRUSE9MRDNbNzowXSBiaXRzIChBdHRyaWJ1dGUgbWVtb3J5IDMgaG9sZCB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfMCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfMSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfMiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfMyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfNCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfNSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSE9MRDNfNyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfUEFUVDNfQVRUSElaMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRjAwMDAwMCkgICAgICAgIC8qITxBVFRISVozWzc6MF0gYml0cyAoQXR0cmlidXRlIG1lbW9yeSAzIGRhdGFidXMgSGlaIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzEgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzMgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzYgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QQVRUM19BVFRISVozXzcgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEZTTUNfUEFUVDQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVFNFVDQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRkYpICAgICAgICAvKiE8QVRUU0VUNFs3OjBdIGJpdHMgKEF0dHJpYnV0ZSBtZW1vcnkgNCBzZXR1cCB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF8wICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF8xICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF8yICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF8zICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF80ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF81ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF82ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUU0VUNF83ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUV0FJVDQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkgICAgICAgIC8qITxBVFRXQUlUNFs3OjBdIGJpdHMgKEF0dHJpYnV0ZSBtZW1vcnkgNCB3YWl0IHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF8wICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF8xICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF8yICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF8zICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF80ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF81ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF82ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRXQUlUNF83ICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QQVRUNF9BVFRIT0xENCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkYwMDAwKSAgICAgICAgLyohPEFUVEhPTEQ0Wzc6MF0gYml0cyAoQXR0cmlidXRlIG1lbW9yeSA0IGhvbGQgdGltZSkgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzEgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzQgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzUgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzYgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhPTEQ0XzcgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBGU01DX1BBVFQ0X0FUVEhJWjQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwMDAwMDApICAgICAgICAvKiE8QVRUSElaNFs3OjBdIGJpdHMgKEF0dHJpYnV0ZSBtZW1vcnkgNCBkYXRhYnVzIEhpWiB0aW1lKSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF8wICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF8xICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF8yICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF8zICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF80ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF81ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF82ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIEZTTUNfUEFUVDRfQVRUSElaNF83ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX1BJTzQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEZGKSAgICAgICAgLyohPElPU0VUNFs3OjBdIGJpdHMgKEkvTyA0IHNldHVwIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF80ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF81ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF82ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPU0VUNF83ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRjAwKSAgICAgICAgLyohPElPV0FJVDRbNzowXSBiaXRzIChJL08gNCB3YWl0IHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfNCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfNSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfNiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPV0FJVDRfNyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkYwMDAwKSAgICAgICAgLyohPElPSE9MRDRbNzowXSBiaXRzIChJL08gNCBob2xkIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfMSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfMiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfNCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfNSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfNiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSE9MRDRfNyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGMDAwMDAwKSAgICAgICAgLyohPElPSElaNFs3OjBdIGJpdHMgKEkvTyA0IGRhdGFidXMgSGlaIHRpbWUpICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF8yICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF80ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF81ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF82ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKSAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgRlNNQ19QSU80X0lPSElaNF83ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgICAgICAgLyohPEJpdCA3ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEZTTUNfRUNDUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBGU01DX0VDQ1IyX0VDQzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAgICAgICAvKiE8RUNDIHJlc3VsdCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBGU01DX0VDQ1IzIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgRlNNQ19FQ0NSM19FQ0MzICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgICAgICAgLyohPEVDQyByZXN1bHQgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbCBQdXJwb3NlIEkvTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBHUElPX01PREVSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIwICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDMpDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjBfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEMpDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMV8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjFfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIyICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMl8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjJfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIzICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQzApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSM18wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjNfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVI0ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAzMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSNF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjRfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVI1ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBDMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSNV8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjVfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVI2ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDMwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSNl8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjZfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVI3ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEMwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSN18wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjdfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVI4ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMzAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSOF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjhfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVI5ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwQzAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSOV8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjlfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxMCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAzMDAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMTBfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjEwXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxMSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDBDMDAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMTFfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjExXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxMiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDMwMDAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMTJfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjEyXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxMyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEMwMDAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMTNfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjEzXzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxNCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzAwMDAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMTRfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjE0XzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkNCisNCisjZGVmaW5lIEdQSU9fTU9ERVJfTU9ERVIxNSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4QzAwMDAwMDApDQorI2RlZmluZSBHUElPX01PREVSX01PREVSMTVfMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19NT0RFUl9NT0RFUjE1XzEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIEdQSU9fT1RZUEVSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT1RfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09UXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBHUElPX09UWVBFUl9PVF8yICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT1RfMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09UXzQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBHUElPX09UWVBFUl9PVF81ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT1RfNiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09UXzcgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBHUElPX09UWVBFUl9PVF84ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT1RfOSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09UXzEwICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBHUElPX09UWVBFUl9PVF8xMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT1RfMTIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09UXzEzICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBHUElPX09UWVBFUl9PVF8xNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT1RfMTUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIEdQSU9fT1NQRUVEUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMykNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjBfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIwXzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwQykNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjFfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxXzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAzMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjJfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIyXzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBDMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjNfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIzXzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSNCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDMwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjRfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFI0XzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSNSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEMwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjVfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFI1XzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSNiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMzAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjZfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFI2XzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSNyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwQzAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjdfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFI3XzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSOCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAzMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjhfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFI4XzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSOSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBDMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjlfMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFI5XzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMTAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDMwMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjEwXzAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxMF8xICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMTEgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMEMwMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjExXzAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxMV8xICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMTIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMzAwMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjEyXzAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxMl8xICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMTMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwQzAwMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjEzXzAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxM18xICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMTQgICAgICAgICAgICAgICgodWludDMyX3QpMHgzMDAwMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjE0XzAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxNF8xICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKw0KKyNkZWZpbmUgR1BJT19PU1BFRURFUl9PU1BFRURSMTUgICAgICAgICAgICAgICgodWludDMyX3QpMHhDMDAwMDAwMCkNCisjZGVmaW5lIEdQSU9fT1NQRUVERVJfT1NQRUVEUjE1XzAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApDQorI2RlZmluZSBHUElPX09TUEVFREVSX09TUEVFRFIxNV8xICAgICAgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgR1BJT19QVVBEUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAzKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjBfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIwXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBDKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjFfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjJfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIyXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEMwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjNfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIzXzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMzAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjRfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFI0XzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSNSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwQzAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjVfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFI1XzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSNiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAzMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjZfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFI2XzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSNyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBDMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjdfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFI3XzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSOCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjhfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFI4XzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSOSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEMwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjlfMCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFI5XzEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMTAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMzAwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjEwXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxMF8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMTEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwQzAwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjExXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxMV8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMTIgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAzMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjEyXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxMl8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMTMgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBDMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjEzXzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxM18xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMTQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjE0XzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxNF8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorDQorI2RlZmluZSBHUElPX1BVUERSX1BVUERSMTUgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEMwMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19QVVBEUl9QVVBEUjE1XzAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkNCisjZGVmaW5lIEdQSU9fUFVQRFJfUFVQRFIxNV8xICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBHUElPX0lEUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIEdQSU9fSURSX0lEUl8wICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBHUElPX0lEUl9JRFJfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgR1BJT19JRFJfSURSXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIEdQSU9fSURSX0lEUl8zICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBHUElPX0lEUl9JRFJfNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgR1BJT19JRFJfSURSXzUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIEdQSU9fSURSX0lEUl82ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBHUElPX0lEUl9JRFJfNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgR1BJT19JRFJfSURSXzggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIEdQSU9fSURSX0lEUl85ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBHUElPX0lEUl9JRFJfMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgR1BJT19JRFJfSURSXzExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIEdQSU9fSURSX0lEUl8xMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBHUElPX0lEUl9JRFJfMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgR1BJT19JRFJfSURSXzE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIEdQSU9fSURSX0lEUl8xNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorLyogT2xkIEdQSU9fSURSIHJlZ2lzdGVyIGJpdHMgZGVmaW5pdGlvbiwgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UgKi8NCisjZGVmaW5lIEdQSU9fT1RZUEVSX0lEUl8wICAgICAgICAgICAgICAgICAgICBHUElPX0lEUl9JRFJfMA0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzEgICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xDQorI2RlZmluZSBHUElPX09UWVBFUl9JRFJfMiAgICAgICAgICAgICAgICAgICAgR1BJT19JRFJfSURSXzINCisjZGVmaW5lIEdQSU9fT1RZUEVSX0lEUl8zICAgICAgICAgICAgICAgICAgICBHUElPX0lEUl9JRFJfMw0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzQgICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl80DQorI2RlZmluZSBHUElPX09UWVBFUl9JRFJfNSAgICAgICAgICAgICAgICAgICAgR1BJT19JRFJfSURSXzUNCisjZGVmaW5lIEdQSU9fT1RZUEVSX0lEUl82ICAgICAgICAgICAgICAgICAgICBHUElPX0lEUl9JRFJfNg0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzcgICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl83DQorI2RlZmluZSBHUElPX09UWVBFUl9JRFJfOCAgICAgICAgICAgICAgICAgICAgR1BJT19JRFJfSURSXzgNCisjZGVmaW5lIEdQSU9fT1RZUEVSX0lEUl85ICAgICAgICAgICAgICAgICAgICBHUElPX0lEUl9JRFJfOQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzEwICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xMA0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzExICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xMQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzEyICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xMg0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzEzICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xMw0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzE0ICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xNA0KKyNkZWZpbmUgR1BJT19PVFlQRVJfSURSXzE1ICAgICAgICAgICAgICAgICAgIEdQSU9fSURSX0lEUl8xNQ0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgR1BJT19PRFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBHUElPX09EUl9PRFJfMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgR1BJT19PRFJfT0RSXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIEdQSU9fT0RSX09EUl8yICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBHUElPX09EUl9PRFJfMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgR1BJT19PRFJfT0RSXzQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIEdQSU9fT0RSX09EUl81ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBHUElPX09EUl9PRFJfNiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgR1BJT19PRFJfT0RSXzcgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIEdQSU9fT0RSX09EUl84ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBHUElPX09EUl9PRFJfOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgR1BJT19PRFJfT0RSXzEwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIEdQSU9fT0RSX09EUl8xMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBHUElPX09EUl9PRFJfMTIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgR1BJT19PRFJfT0RSXzEzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisjZGVmaW5lIEdQSU9fT0RSX09EUl8xNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBHUElPX09EUl9PRFJfMTUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKy8qIE9sZCBHUElPX09EUiByZWdpc3RlciBiaXRzIGRlZmluaXRpb24sIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlICovDQorI2RlZmluZSBHUElPX09UWVBFUl9PRFJfMCAgICAgICAgICAgICAgICAgICAgR1BJT19PRFJfT0RSXzANCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xICAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMQ0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT0RSXzIgICAgICAgICAgICAgICAgICAgIEdQSU9fT0RSX09EUl8yDQorI2RlZmluZSBHUElPX09UWVBFUl9PRFJfMyAgICAgICAgICAgICAgICAgICAgR1BJT19PRFJfT0RSXzMNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl80ICAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfNA0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT0RSXzUgICAgICAgICAgICAgICAgICAgIEdQSU9fT0RSX09EUl81DQorI2RlZmluZSBHUElPX09UWVBFUl9PRFJfNiAgICAgICAgICAgICAgICAgICAgR1BJT19PRFJfT0RSXzYNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl83ICAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfNw0KKyNkZWZpbmUgR1BJT19PVFlQRVJfT0RSXzggICAgICAgICAgICAgICAgICAgIEdQSU9fT0RSX09EUl84DQorI2RlZmluZSBHUElPX09UWVBFUl9PRFJfOSAgICAgICAgICAgICAgICAgICAgR1BJT19PRFJfT0RSXzkNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xMCAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMTANCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xMSAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMTENCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xMiAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMTINCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xMyAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMTMNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xNCAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMTQNCisjZGVmaW5lIEdQSU9fT1RZUEVSX09EUl8xNSAgICAgICAgICAgICAgICAgICBHUElPX09EUl9PRFJfMTUNCisNCisNCisvKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIEdQSU9fQlNSUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgR1BJT19CU1JSX0JTXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEdQSU9fQlNSUl9CU18xICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBHUElPX0JTUlJfQlNfMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JTXzMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CU180ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBHUElPX0JTUlJfQlNfNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JTXzYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CU183ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBHUElPX0JTUlJfQlNfOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JTXzkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CU18xMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBHUElPX0JTUlJfQlNfMTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JTXzEyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CU18xMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBHUElPX0JTUlJfQlNfMTQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JTXzE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CUl8wICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBHUElPX0JTUlJfQlJfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JSXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CUl8zICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSBHUElPX0JTUlJfQlJfNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JSXzUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CUl82ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBHUElPX0JTUlJfQlJfNyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JSXzggICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CUl85ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBHUElPX0JTUlJfQlJfMTAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JSXzExICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CUl8xMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApDQorI2RlZmluZSBHUElPX0JTUlJfQlJfMTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKyNkZWZpbmUgR1BJT19CU1JSX0JSXzE0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkNCisjZGVmaW5lIEdQSU9fQlNSUl9CUl8xNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgSEFTSF9DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBIQVNIX0NSX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgSEFTSF9DUl9ETUFFICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIEhBU0hfQ1JfREFUQVRZUEUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzApDQorI2RlZmluZSBIQVNIX0NSX0RBVEFUWVBFXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgSEFTSF9DUl9EQVRBVFlQRV8xICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIEhBU0hfQ1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBIQVNIX0NSX0FMR08gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgSEFTSF9DUl9OQlcgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEYwMCkNCisjZGVmaW5lIEhBU0hfQ1JfTkJXXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBIQVNIX0NSX05CV18xICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgSEFTSF9DUl9OQldfMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIEhBU0hfQ1JfTkJXXzMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBIQVNIX0NSX0RJTk5FICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgSEFTSF9DUl9MS0VZICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIEhBU0hfU1RSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgSEFTSF9TVFJfTkJXICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxRikNCisjZGVmaW5lIEhBU0hfU1RSX05CV18wICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBIQVNIX1NUUl9OQldfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgSEFTSF9TVFJfTkJXXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIEhBU0hfU1RSX05CV18zICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBIQVNIX1NUUl9OQldfNCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgSEFTSF9TVFJfRENBTCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisNCisvKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIEhBU0hfSU1SIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgSEFTSF9JTVJfRElOSU0gICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEhBU0hfSU1SX0RDSU0gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBIQVNIX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIEhBU0hfU1JfRElOSVMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBIQVNIX1NSX0RDSVMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgSEFTSF9TUl9ETUFTICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIEhBU0hfU1JfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgIEludGVyLWludGVncmF0ZWQgQ2lyY3VpdCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgSTJDX0NSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgSTJDX0NSMV9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPFBlcmlwaGVyYWwgRW5hYmxlICovDQorI2RlZmluZSAgSTJDX0NSMV9TTUJVUyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAgICAgICAgICAgLyohPFNNQnVzIE1vZGUgKi8NCisjZGVmaW5lICBJMkNfQ1IxX1NNQlRZUEUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8U01CdXMgVHlwZSAqLw0KKyNkZWZpbmUgIEkyQ19DUjFfRU5BUlAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxBUlAgRW5hYmxlICovDQorI2RlZmluZSAgSTJDX0NSMV9FTlBFQyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPFBFQyBFbmFibGUgKi8NCisjZGVmaW5lICBJMkNfQ1IxX0VOR0MgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8R2VuZXJhbCBDYWxsIEVuYWJsZSAqLw0KKyNkZWZpbmUgIEkyQ19DUjFfTk9TVFJFVENIICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxDbG9jayBTdHJldGNoaW5nIERpc2FibGUgKFNsYXZlIG1vZGUpICovDQorI2RlZmluZSAgSTJDX0NSMV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPFN0YXJ0IEdlbmVyYXRpb24gKi8NCisjZGVmaW5lICBJMkNfQ1IxX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8U3RvcCBHZW5lcmF0aW9uICovDQorI2RlZmluZSAgSTJDX0NSMV9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApICAgICAgICAgICAgLyohPEFja25vd2xlZGdlIEVuYWJsZSAqLw0KKyNkZWZpbmUgIEkyQ19DUjFfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxBY2tub3dsZWRnZS9QRUMgUG9zaXRpb24gKGZvciBkYXRhIHJlY2VwdGlvbikgKi8NCisjZGVmaW5lICBJMkNfQ1IxX1BFQyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8UGFja2V0IEVycm9yIENoZWNraW5nICovDQorI2RlZmluZSAgSTJDX0NSMV9BTEVSVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApICAgICAgICAgICAgLyohPFNNQnVzIEFsZXJ0ICovDQorI2RlZmluZSAgSTJDX0NSMV9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDgwMDApICAgICAgICAgICAgLyohPFNvZnR3YXJlIFJlc2V0ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBJMkNfQ1IyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBJMkNfQ1IyX0ZSRVEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAzRikgICAgICAgICAgICAvKiE8RlJFUVs1OjBdIGJpdHMgKFBlcmlwaGVyYWwgQ2xvY2sgRnJlcXVlbmN5KSAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfRlJFUV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfRlJFUV8xICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfRlJFUV8yICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfRlJFUV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfRlJFUV80ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfRlJFUV81ICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxCaXQgNSAqLw0KKw0KKyNkZWZpbmUgIEkyQ19DUjJfSVRFUlJFTiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgSTJDX0NSMl9JVEVWVEVOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPEV2ZW50IEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBJMkNfQ1IyX0lUQlVGRU4gICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8QnVmZmVyIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBJMkNfQ1IyX0RNQUVOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8RE1BIFJlcXVlc3RzIEVuYWJsZSAqLw0KKyNkZWZpbmUgIEkyQ19DUjJfTEFTVCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKSAgICAgICAgICAgIC8qITxETUEgTGFzdCBUcmFuc2ZlciAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgSTJDX09BUjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgSTJDX09BUjFfQUREMV83ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwRkUpICAgICAgICAgICAgLyohPEludGVyZmFjZSBBZGRyZXNzICovDQorI2RlZmluZSAgSTJDX09BUjFfQUREOF85ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAzMDApICAgICAgICAgICAgLyohPEludGVyZmFjZSBBZGRyZXNzICovDQorDQorI2RlZmluZSAgSTJDX09BUjFfQUREMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgSTJDX09BUjFfQUREMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgSTJDX09BUjFfQUREMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgSTJDX09BUjFfQUREMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPEJpdCAzICovDQorI2RlZmluZSAgSTJDX09BUjFfQURENCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPEJpdCA0ICovDQorI2RlZmluZSAgSTJDX09BUjFfQURENSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPEJpdCA1ICovDQorI2RlZmluZSAgSTJDX09BUjFfQURENiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPEJpdCA2ICovDQorI2RlZmluZSAgSTJDX09BUjFfQURENyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEJpdCA3ICovDQorI2RlZmluZSAgSTJDX09BUjFfQUREOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPEJpdCA4ICovDQorI2RlZmluZSAgSTJDX09BUjFfQUREOSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPEJpdCA5ICovDQorDQorI2RlZmluZSAgSTJDX09BUjFfQURETU9ERSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDgwMDApICAgICAgICAgICAgLyohPEFkZHJlc3NpbmcgTW9kZSAoU2xhdmUgbW9kZSkgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEkyQ19PQVIyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEkyQ19PQVIyX0VORFVBTCAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgICAgICAgICAgICAgIC8qITxEdWFsIGFkZHJlc3NpbmcgbW9kZSBlbmFibGUgKi8NCisjZGVmaW5lICBJMkNfT0FSMl9BREQyICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHhGRSkgICAgICAgICAgICAgICAvKiE8SW50ZXJmYWNlIGFkZHJlc3MgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBJMkNfRFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIEkyQ19EUl9EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweEZGKSAgICAgICAgICAgICAgIC8qITw4LWJpdCBEYXRhIFJlZ2lzdGVyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBJMkNfU1IxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBJMkNfU1IxX1NCICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8U3RhcnQgQml0IChNYXN0ZXIgbW9kZSkgKi8NCisjZGVmaW5lICBJMkNfU1IxX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8QWRkcmVzcyBzZW50IChtYXN0ZXIgbW9kZSkvbWF0Y2hlZCAoc2xhdmUgbW9kZSkgKi8NCisjZGVmaW5lICBJMkNfU1IxX0JURiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8Qnl0ZSBUcmFuc2ZlciBGaW5pc2hlZCAqLw0KKyNkZWZpbmUgIEkyQ19TUjFfQUREMTAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITwxMC1iaXQgaGVhZGVyIHNlbnQgKE1hc3RlciBtb2RlKSAqLw0KKyNkZWZpbmUgIEkyQ19TUjFfU1RPUEYgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxTdG9wIGRldGVjdGlvbiAoU2xhdmUgbW9kZSkgKi8NCisjZGVmaW5lICBJMkNfU1IxX1JYTkUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8RGF0YSBSZWdpc3RlciBub3QgRW1wdHkgKHJlY2VpdmVycykgKi8NCisjZGVmaW5lICBJMkNfU1IxX1RYRSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8RGF0YSBSZWdpc3RlciBFbXB0eSAodHJhbnNtaXR0ZXJzKSAqLw0KKyNkZWZpbmUgIEkyQ19TUjFfQkVSUiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxCdXMgRXJyb3IgKi8NCisjZGVmaW5lICBJMkNfU1IxX0FSTE8gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8QXJiaXRyYXRpb24gTG9zdCAobWFzdGVyIG1vZGUpICovDQorI2RlZmluZSAgSTJDX1NSMV9BRiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApICAgICAgICAgICAgLyohPEFja25vd2xlZGdlIEZhaWx1cmUgKi8NCisjZGVmaW5lICBJMkNfU1IxX09WUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8T3ZlcnJ1bi9VbmRlcnJ1biAqLw0KKyNkZWZpbmUgIEkyQ19TUjFfUEVDRVJSICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKSAgICAgICAgICAgIC8qITxQRUMgRXJyb3IgaW4gcmVjZXB0aW9uICovDQorI2RlZmluZSAgSTJDX1NSMV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAgICAgICAgICAgLyohPFRpbWVvdXQgb3IgVGxvdyBFcnJvciAqLw0KKyNkZWZpbmUgIEkyQ19TUjFfU01CQUxFUlQgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxTTUJ1cyBBbGVydCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgSTJDX1NSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgSTJDX1NSMl9NU0wgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPE1hc3Rlci9TbGF2ZSAqLw0KKyNkZWZpbmUgIEkyQ19TUjJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxCdXMgQnVzeSAqLw0KKyNkZWZpbmUgIEkyQ19TUjJfVFJBICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxUcmFuc21pdHRlci9SZWNlaXZlciAqLw0KKyNkZWZpbmUgIEkyQ19TUjJfR0VOQ0FMTCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxHZW5lcmFsIENhbGwgQWRkcmVzcyAoU2xhdmUgbW9kZSkgKi8NCisjZGVmaW5lICBJMkNfU1IyX1NNQkRFRkFVTFQgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8U01CdXMgRGV2aWNlIERlZmF1bHQgQWRkcmVzcyAoU2xhdmUgbW9kZSkgKi8NCisjZGVmaW5lICBJMkNfU1IyX1NNQkhPU1QgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8U01CdXMgSG9zdCBIZWFkZXIgKFNsYXZlIG1vZGUpICovDQorI2RlZmluZSAgSTJDX1NSMl9EVUFMRiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPER1YWwgRmxhZyAoU2xhdmUgbW9kZSkgKi8NCisjZGVmaW5lICBJMkNfU1IyX1BFQyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkYwMCkgICAgICAgICAgICAvKiE8UGFja2V0IEVycm9yIENoZWNraW5nIFJlZ2lzdGVyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBJMkNfQ0NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBJMkNfQ0NSX0NDUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEZGRikgICAgICAgICAgICAvKiE8Q2xvY2sgQ29udHJvbCBSZWdpc3RlciBpbiBGYXN0L1N0YW5kYXJkIG1vZGUgKE1hc3RlciBtb2RlKSAqLw0KKyNkZWZpbmUgIEkyQ19DQ1JfRFVUWSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAgICAgICAgICAgIC8qITxGYXN0IE1vZGUgRHV0eSBDeWNsZSAqLw0KKyNkZWZpbmUgIEkyQ19DQ1JfRlMgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxJMkMgTWFzdGVyIE1vZGUgU2VsZWN0aW9uICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIEkyQ19UUklTRSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBJMkNfVFJJU0VfVFJJU0UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgzRikgICAgICAgICAgICAgICAvKiE8TWF4aW11bSBSaXNlIFRpbWUgaW4gRmFzdC9TdGFuZGFyZCBtb2RlIChNYXN0ZXIgbW9kZSkgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlcGVuZGVudCBXQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBJV0RHX0tSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBJV0RHX0tSX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8S2V5IHZhbHVlICh3cml0ZSBvbmx5LCByZWFkIDAwMDBoKSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgSVdER19QUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgSVdER19QUl9QUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDcpICAgICAgICAgICAgICAgLyohPFBSWzI6MF0gKFByZXNjYWxlciBkaXZpZGVyKSAqLw0KKyNkZWZpbmUgIElXREdfUFJfUFJfMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgICAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIElXREdfUFJfUFJfMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKSAgICAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIElXREdfUFJfUFJfMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgICAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgSVdER19STFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgSVdER19STFJfUkwgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDBGRkYpICAgICAgICAgICAgLyohPFdhdGNoZG9nIGNvdW50ZXIgcmVsb2FkIHZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBJV0RHX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBJV0RHX1NSX1BWVSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgICAgICAgICAgICAgICAvKiE8V2F0Y2hkb2cgcHJlc2NhbGVyIHZhbHVlIHVwZGF0ZSAqLw0KKyNkZWZpbmUgIElXREdfU1JfUlZVICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKSAgICAgICAgICAgICAgIC8qITxXYXRjaGRvZyBjb3VudGVyIHJlbG9hZCB2YWx1ZSB1cGRhdGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIENvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUFdSX0NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBQV1JfQ1JfTFBEUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgIC8qITwgTG93LVBvd2VyIERlZXBzbGVlcCAqLw0KKyNkZWZpbmUgIFBXUl9DUl9QRERTICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgLyohPCBQb3dlciBEb3duIERlZXBzbGVlcCAqLw0KKyNkZWZpbmUgIFBXUl9DUl9DV1VGICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgLyohPCBDbGVhciBXYWtldXAgRmxhZyAqLw0KKyNkZWZpbmUgIFBXUl9DUl9DU0JGICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgLyohPCBDbGVhciBTdGFuZGJ5IEZsYWcgKi8NCisjZGVmaW5lICBQV1JfQ1JfUFZERSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgIC8qITwgUG93ZXIgVm9sdGFnZSBEZXRlY3RvciBFbmFibGUgKi8NCisNCisjZGVmaW5lICBQV1JfQ1JfUExTICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBFMCkgICAgIC8qITwgUExTWzI6MF0gYml0cyAoUFZEIExldmVsIFNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBQV1JfQ1JfUExTXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgIC8qITwgQml0IDAgKi8NCisjZGVmaW5lICBQV1JfQ1JfUExTXzEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgIC8qITwgQml0IDEgKi8NCisjZGVmaW5lICBQV1JfQ1JfUExTXzIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgIC8qITwgQml0IDIgKi8NCisNCisvKiE8IFBWRCBsZXZlbCBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVYwICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApICAgICAvKiE8IFBWRCBsZXZlbCAwICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVYxICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAvKiE8IFBWRCBsZXZlbCAxICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVYyICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAvKiE8IFBWRCBsZXZlbCAyICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVYzICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNjApICAgICAvKiE8IFBWRCBsZXZlbCAzICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVY0ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAvKiE8IFBWRCBsZXZlbCA0ICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVY1ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwQTApICAgICAvKiE8IFBWRCBsZXZlbCA1ICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVY2ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwQzApICAgICAvKiE8IFBWRCBsZXZlbCA2ICovDQorI2RlZmluZSAgUFdSX0NSX1BMU19MRVY3ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwRTApICAgICAvKiE8IFBWRCBsZXZlbCA3ICovDQorDQorI2RlZmluZSAgUFdSX0NSX0RCUCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAvKiE8IERpc2FibGUgQmFja3VwIERvbWFpbiB3cml0ZSBwcm90ZWN0aW9uICovDQorI2RlZmluZSAgUFdSX0NSX0ZQRFMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAvKiE8IEZsYXNoIHBvd2VyIGRvd24gaW4gU3RvcCBtb2RlICovDQorDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBQV1JfQ1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBQV1JfQ1NSX1dVRiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgIC8qITwgV2FrZXVwIEZsYWcgKi8NCisjZGVmaW5lICBQV1JfQ1NSX1NCRiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgIC8qITwgU3RhbmRieSBGbGFnICovDQorI2RlZmluZSAgUFdSX0NTUl9QVkRPICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAvKiE8IFBWRCBPdXRwdXQgKi8NCisjZGVmaW5lICBQV1JfQ1NSX0JSUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgIC8qITwgQmFja3VwIHJlZ3VsYXRvciByZWFkeSAqLw0KKyNkZWZpbmUgIFBXUl9DU1JfRVdVUCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgLyohPCBFbmFibGUgV0tVUCBwaW4gKi8NCisjZGVmaW5lICBQV1JfQ1NSX0JSRSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgIC8qITwgQmFja3VwIHJlZ3VsYXRvciBlbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgYW5kIENsb2NrIENvbnRyb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQ1JfSFNJT04gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0NSX0hTSVJEWSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKw0KKyNkZWZpbmUgIFJDQ19DUl9IU0lUUklNICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGOCkNCisjZGVmaW5lICBSQ0NfQ1JfSFNJVFJJTV8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpLyohPEJpdCAwICovDQorI2RlZmluZSAgUkNDX0NSX0hTSVRSSU1fMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKS8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFJDQ19DUl9IU0lUUklNXzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBSQ0NfQ1JfSFNJVFJJTV8zICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApLyohPEJpdCAzICovDQorI2RlZmluZSAgUkNDX0NSX0hTSVRSSU1fNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKS8qITxCaXQgNCAqLw0KKw0KKyNkZWZpbmUgIFJDQ19DUl9IU0lDQUwgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRkYwMCkNCisjZGVmaW5lICBSQ0NfQ1JfSFNJQ0FMXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApLyohPEJpdCAwICovDQorI2RlZmluZSAgUkNDX0NSX0hTSUNBTF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKS8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFJDQ19DUl9IU0lDQUxfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBSQ0NfQ1JfSFNJQ0FMXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApLyohPEJpdCAzICovDQorI2RlZmluZSAgUkNDX0NSX0hTSUNBTF80ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKS8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIFJDQ19DUl9IU0lDQUxfNSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBSQ0NfQ1JfSFNJQ0FMXzYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApLyohPEJpdCA2ICovDQorI2RlZmluZSAgUkNDX0NSX0hTSUNBTF83ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKS8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIFJDQ19DUl9IU0VPTiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lICBSQ0NfQ1JfSFNFUkRZICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSAgUkNDX0NSX0hTRUJZUCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DUl9DU1NPTiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lICBSQ0NfQ1JfUExMT04gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApDQorI2RlZmluZSAgUkNDX0NSX1BMTFJEWSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DUl9QTExJMlNPTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ1JfUExMSTJTUkRZICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX1BMTENGR1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExNICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwM0YpDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMTV8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTE1fMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExNXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMTV8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTE1fNCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExNXzUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMTiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwN0ZDMCkNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExOXzAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTE5fMSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMTl8yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExOXzMgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTE5fNCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMTl81ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExOXzYgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTE5fNyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMTl84ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExQICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMzAwMDApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMUF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTFBfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExTUkMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMU1JDX0hTRSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTFNSQ19IU0kgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExRICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEYwMDAwMDApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMUV8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19QTExDRkdSX1BMTFFfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lICBSQ0NfUExMQ0ZHUl9QTExRXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSAgUkNDX1BMTENGR1JfUExMUV8zICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19DRkdSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorLyohPCBTVyBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSAgUkNDX0NGR1JfU1cgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAzKSAgICAgICAgLyohPCBTV1sxOjBdIGJpdHMgKFN5c3RlbSBjbG9jayBTd2l0Y2gpICovDQorI2RlZmluZSAgUkNDX0NGR1JfU1dfMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPCBCaXQgMCAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1NXXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITwgQml0IDEgKi8NCisNCisjZGVmaW5lICBSQ0NfQ0ZHUl9TV19IU0kgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAgICAgICAvKiE8IEhTSSBzZWxlY3RlZCBhcyBzeXN0ZW0gY2xvY2sgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9TV19IU0UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAgICAgICAvKiE8IEhTRSBzZWxlY3RlZCBhcyBzeXN0ZW0gY2xvY2sgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9TV19QTEwgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8IFBMTCBzZWxlY3RlZCBhcyBzeXN0ZW0gY2xvY2sgKi8NCisNCisvKiE8IFNXUyBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSAgUkNDX0NGR1JfU1dTICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBDKSAgICAgICAgLyohPCBTV1NbMTowXSBiaXRzIChTeXN0ZW0gQ2xvY2sgU3dpdGNoIFN0YXR1cykgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9TV1NfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8IEJpdCAwICovDQorI2RlZmluZSAgUkNDX0NGR1JfU1dTXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPCBCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIFJDQ19DRkdSX1NXU19IU0kgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgICAgICAgIC8qITwgSFNJIG9zY2lsbGF0b3IgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9TV1NfSFNFICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAgICAgICAvKiE8IEhTRSBvc2NpbGxhdG9yIHVzZWQgYXMgc3lzdGVtIGNsb2NrICovDQorI2RlZmluZSAgUkNDX0NGR1JfU1dTX1BMTCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPCBQTEwgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgKi8NCisNCisvKiE8IEhQUkUgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX0hQUkUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGMCkgICAgICAgIC8qITwgSFBSRVszOjBdIGJpdHMgKEFIQiBwcmVzY2FsZXIpICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPCBCaXQgMCAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX0hQUkVfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITwgQml0IDEgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9IUFJFXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8IEJpdCAyICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPCBCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIFJDQ19DRkdSX0hQUkVfRElWMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgICAgICAgIC8qITwgU1lTQ0xLIG5vdCBkaXZpZGVkICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV9ESVYyICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgICAgICAgLyohPCBTWVNDTEsgZGl2aWRlZCBieSAyICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV9ESVY0ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDkwKSAgICAgICAgLyohPCBTWVNDTEsgZGl2aWRlZCBieSA0ICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV9ESVY4ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEEwKSAgICAgICAgLyohPCBTWVNDTEsgZGl2aWRlZCBieSA4ICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV9ESVYxNiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEIwKSAgICAgICAgLyohPCBTWVNDTEsgZGl2aWRlZCBieSAxNiAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX0hQUkVfRElWNjQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBDMCkgICAgICAgIC8qITwgU1lTQ0xLIGRpdmlkZWQgYnkgNjQgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9IUFJFX0RJVjEyOCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRDApICAgICAgICAvKiE8IFNZU0NMSyBkaXZpZGVkIGJ5IDEyOCAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX0hQUkVfRElWMjU2ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBFMCkgICAgICAgIC8qITwgU1lTQ0xLIGRpdmlkZWQgYnkgMjU2ICovDQorI2RlZmluZSAgUkNDX0NGR1JfSFBSRV9ESVY1MTIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMEYwKSAgICAgICAgLyohPCBTWVNDTEsgZGl2aWRlZCBieSA1MTIgKi8NCisNCisvKiE8IFBQUkUxIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDFDMDApICAgICAgICAvKiE8IFBSRTFbMjowXSBiaXRzIChBUEIxIHByZXNjYWxlcikgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMV8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8IEJpdCAwICovDQorI2RlZmluZSAgUkNDX0NGR1JfUFBSRTFfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPCBCaXQgMSAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUxXzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgICAgICAgIC8qITwgQml0IDIgKi8NCisNCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMV9ESVYxICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAgICAgICAvKiE8IEhDTEsgbm90IGRpdmlkZWQgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMV9ESVYyICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8IEhDTEsgZGl2aWRlZCBieSAyICovDQorI2RlZmluZSAgUkNDX0NGR1JfUFBSRTFfRElWNCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxNDAwKSAgICAgICAgLyohPCBIQ0xLIGRpdmlkZWQgYnkgNCAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUxX0RJVjggICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTgwMCkgICAgICAgIC8qITwgSENMSyBkaXZpZGVkIGJ5IDggKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMV9ESVYxNiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDFDMDApICAgICAgICAvKiE8IEhDTEsgZGl2aWRlZCBieSAxNiAqLw0KKw0KKy8qITwgUFBSRTIgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRTAwMCkgICAgICAgIC8qITwgUFJFMlsyOjBdIGJpdHMgKEFQQjIgcHJlc2NhbGVyKSAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUyXzAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITwgQml0IDAgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMl8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8IEJpdCAxICovDQorI2RlZmluZSAgUkNDX0NGR1JfUFBSRTJfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgICAgLyohPCBCaXQgMiAqLw0KKw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUyX0RJVjEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgICAgICAgIC8qITwgSENMSyBub3QgZGl2aWRlZCAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUyX0RJVjIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITwgSENMSyBkaXZpZGVkIGJ5IDIgKi8NCisjZGVmaW5lICBSQ0NfQ0ZHUl9QUFJFMl9ESVY0ICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMEEwMDApICAgICAgICAvKiE8IEhDTEsgZGl2aWRlZCBieSA0ICovDQorI2RlZmluZSAgUkNDX0NGR1JfUFBSRTJfRElWOCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBDMDAwKSAgICAgICAgLyohPCBIQ0xLIGRpdmlkZWQgYnkgOCAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1BQUkUyX0RJVjE2ICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRTAwMCkgICAgICAgIC8qITwgSENMSyBkaXZpZGVkIGJ5IDE2ICovDQorDQorLyohPCBSVENQUkUgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgIFJDQ19DRkdSX1JUQ1BSRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDFGMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0ZHUl9SVENQUkVfMCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSAgUkNDX0NGR1JfUlRDUFJFXzEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DRkdSX1JUQ1BSRV8yICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lICBSQ0NfQ0ZHUl9SVENQUkVfMyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSAgUkNDX0NGR1JfUlRDUFJFXzQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKw0KKy8qITwgTUNPMSBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSAgUkNDX0NGR1JfTUNPMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNjAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DRkdSX01DTzFfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0ZHUl9NQ08xXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorDQorI2RlZmluZSAgUkNDX0NGR1JfSTJTU1JDICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKw0KKyNkZWZpbmUgIFJDQ19DRkdSX01DTzFQUkUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNzAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0ZHUl9NQ08xUFJFXzAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApDQorI2RlZmluZSAgUkNDX0NGR1JfTUNPMVBSRV8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DRkdSX01DTzFQUkVfMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisNCisjZGVmaW5lICBSQ0NfQ0ZHUl9NQ08yUFJFICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzgwMDAwMDApDQorI2RlZmluZSAgUkNDX0NGR1JfTUNPMlBSRV8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DRkdSX01DTzJQUkVfMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0ZHUl9NQ08yUFJFXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorDQorI2RlZmluZSAgUkNDX0NGR1JfTUNPMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEMwMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DRkdSX01DTzJfMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0ZHUl9NQ08yXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0NJUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQ0lSX0xTSVJEWUYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0NJUl9MU0VSRFlGICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgIFJDQ19DSVJfSFNJUkRZRiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lICBSQ0NfQ0lSX0hTRVJEWUYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSAgUkNDX0NJUl9QTExSRFlGICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgIFJDQ19DSVJfUExMSTJTUkRZRiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lICBSQ0NfQ0lSX0NTU0YgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSAgUkNDX0NJUl9MU0lSRFlJRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgIFJDQ19DSVJfTFNFUkRZSUUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lICBSQ0NfQ0lSX0hTSVJEWUlFICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSAgUkNDX0NJUl9IU0VSRFlJRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgIFJDQ19DSVJfUExMUkRZSUUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lICBSQ0NfQ0lSX1BMTEkyU1JEWUlFICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSAgUkNDX0NJUl9MU0lSRFlDICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DSVJfTFNFUkRZQyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0lSX0hTSVJEWUMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSAgUkNDX0NJUl9IU0VSRFlDICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DSVJfUExMUkRZQyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ0lSX1BMTEkyU1JEWUMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSAgUkNDX0NJUl9DU1NDICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19BSEIxUlNUUiByZWdpc3RlciAgKioqKioqKioqKioqKiovDQorI2RlZmluZSAgUkNDX0FIQjFSU1RSX0dQSU9BUlNUICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIFJDQ19BSEIxUlNUUl9HUElPQlJTVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBSQ0NfQUhCMVJTVFJfR1BJT0NSU1QgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSAgUkNDX0FIQjFSU1RSX0dQSU9EUlNUICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgIFJDQ19BSEIxUlNUUl9HUElPRVJTVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lICBSQ0NfQUhCMVJTVFJfR1BJT0ZSU1QgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSAgUkNDX0FIQjFSU1RSX0dQSU9HUlNUICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxUlNUUl9HUElPSFJTVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lICBSQ0NfQUhCMVJTVFJfR1BJT0lSU1QgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSAgUkNDX0FIQjFSU1RSX0NSQ1JTVCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxUlNUUl9ETUExUlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMVJTVFJfRE1BMlJTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFSU1RSX0VUSE1BQ1JTVCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxUlNUUl9PVEdIUlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBSQ0NfQUhCMlJTVFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFJDQ19BSEIyUlNUUl9EQ01JUlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lICBSQ0NfQUhCMlJTVFJfQ1JZUFJTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSAgUkNDX0FIQjJSU1RSX0hBU0hSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyAvKiBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZSAqLw0KKyAjZGVmaW5lICBSQ0NfQUhCMlJTVFJfSFNBSFJTVCAgICAgICAgICAgICAgICBSQ0NfQUhCMlJTVFJfSEFTSFJTVA0KKyNkZWZpbmUgIFJDQ19BSEIyUlNUUl9STkdSU1QgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lICBSQ0NfQUhCMlJTVFJfT1RHRlNSU1QgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0FIQjNSU1RSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQUhCM1JTVFJfRlNNQ1JTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0FQQjFSU1RSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfVElNMlJTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX1RJTTNSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9USU00UlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfVElNNVJTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX1RJTTZSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9USU03UlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfVElNMTJSU1QgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX1RJTTEzUlNUICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9USU0xNFJTVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfV1dER0VOICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX1NQSTJSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9TUEkzUlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfVVNBUlQyUlNUICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX1VTQVJUM1JTVCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9VQVJUNFJTVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfVUFSVDVSU1QgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX0kyQzFSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9JMkMyUlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfSTJDM1JTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX0NBTjFSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxUlNUUl9DQU4yUlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMVJTVFJfUFdSUlNUICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFSU1RSX0RBQ1JTVCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19BUEIyUlNUUiByZWdpc3RlciAgKioqKioqKioqKioqKiovDQorI2RlZmluZSAgUkNDX0FQQjJSU1RSX1RJTTFSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIFJDQ19BUEIyUlNUUl9USU04UlNUICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBSQ0NfQVBCMlJTVFJfVVNBUlQxUlNUICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSAgUkNDX0FQQjJSU1RSX1VTQVJUNlJTVCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyUlNUUl9BRENSU1QgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lICBSQ0NfQVBCMlJTVFJfU0RJT1JTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSAgUkNDX0FQQjJSU1RSX1NQSTFSU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyUlNUUl9TWVNDRkdSU1QgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMlJTVFJfVElNOVJTVCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSAgUkNDX0FQQjJSU1RSX1RJTTEwUlNUICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyUlNUUl9USU0xMVJTVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisvKiBPbGQgU1BJMVJTVCBiaXQgZGVmaW5pdGlvbiwgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UgKi8NCisjZGVmaW5lICBSQ0NfQVBCMlJTVFJfU1BJMSAgICAgICAgICAgICAgICAgICBSQ0NfQVBCMlJTVFJfU1BJMVJTVA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19BSEIxRU5SIHJlZ2lzdGVyICAqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfR1BJT0FFTiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIFJDQ19BSEIxRU5SX0dQSU9CRU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBSQ0NfQUhCMUVOUl9HUElPQ0VOICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfR1BJT0RFTiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgIFJDQ19BSEIxRU5SX0dQSU9FRU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lICBSQ0NfQUhCMUVOUl9HUElPRkVOICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfR1BJT0dFTiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxRU5SX0dQSU9IRU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lICBSQ0NfQUhCMUVOUl9HUElPSUVOICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfQ1JDRU4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxRU5SX0JLUFNSQU1FTiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUVOUl9ETUExRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfRE1BMkVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxRU5SX0VUSE1BQ0VOICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUVOUl9FVEhNQUNUWEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfRVRITUFDUlhFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxRU5SX0VUSE1BQ1BUUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUVOUl9PVEdIU0VOICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFFTlJfT1RHSFNVTFBJRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19BSEIyRU5SIHJlZ2lzdGVyICAqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgUkNDX0FIQjJFTlJfRENNSUVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIFJDQ19BSEIyRU5SX0NSWVBFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lICBSQ0NfQUhCMkVOUl9IQVNIRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSAgUkNDX0FIQjJFTlJfUk5HRU4gICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgIFJDQ19BSEIyRU5SX09UR0ZTRU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBSQ0NfQUhCM0VOUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFJDQ19BSEIzRU5SX0ZTTUNFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBSQ0NfQVBCMUVOUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1RJTTJFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9USU0zRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfVElNNEVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1RJTTVFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9USU02RU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfVElNN0VOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1RJTTEyRU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9USU0xM0VOICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfVElNMTRFTiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1dXREdFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9TUEkyRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfU1BJM0VOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1VTQVJUMkVOICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9VU0FSVDNFTiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfVUFSVDRFTiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1VBUlQ1RU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9JMkMxRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfSTJDMkVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX0kyQzNFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9DQU4xRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFFTlJfQ0FOMkVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxRU5SX1BXUkVOICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUVOUl9EQUNFTiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0FQQjJFTlIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQVBCMkVOUl9USU0xRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0FQQjJFTlJfVElNOEVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgIFJDQ19BUEIyRU5SX1VTQVJUMUVOICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lICBSQ0NfQVBCMkVOUl9VU0FSVDZFTiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSAgUkNDX0FQQjJFTlJfQURDMUVOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyRU5SX0FEQzJFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lICBSQ0NfQVBCMkVOUl9BREMzRU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSAgUkNDX0FQQjJFTlJfU0RJT0VOICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyRU5SX1NQSTFFTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMkVOUl9TWVNDRkdFTiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSAgUkNDX0FQQjJFTlJfVElNMTFFTiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyRU5SX1RJTTEwRU4gICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMkVOUl9USU05RU4gICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0FIQjFMUEVOUiByZWdpc3RlciAgKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX0dQSU9BTFBFTiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9HUElPQkxQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfR1BJT0NMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX0dQSU9ETFBFTiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9HUElPRUxQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfR1BJT0ZMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX0dQSU9HTFBFTiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9HUElPSExQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfR1BJT0lMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX0NSQ0xQRU4gICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9GTElURkxQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfU1JBTTFMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX1NSQU0yTFBFTiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9CS1BTUkFNTFBFTiAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfRE1BMUxQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX0RNQTJMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9FVEhNQUNMUEVOICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfRVRITUFDVFhMUEVOICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX0VUSE1BQ1JYTFBFTiAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApDQorI2RlZmluZSAgUkNDX0FIQjFMUEVOUl9FVEhNQUNQVFBMUEVOICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BSEIxTFBFTlJfT1RHSFNMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQUhCMUxQRU5SX09UR0hTVUxQSUxQRU4gICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0FIQjJMUEVOUiByZWdpc3RlciAgKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQUhCMkxQRU5SX0RDTUlMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0FIQjJMUEVOUl9DUllQTFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgIFJDQ19BSEIyTFBFTlJfSEFTSExQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lICBSQ0NfQUhCMkxQRU5SX1JOR0xQRU4gICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSAgUkNDX0FIQjJMUEVOUl9PVEdGU0xQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19BSEIzTFBFTlIgcmVnaXN0ZXIgICoqKioqKioqKioqKiovDQorI2RlZmluZSAgUkNDX0FIQjNMUEVOUl9GU01DTFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFJDQ19BUEIxTFBFTlIgcmVnaXN0ZXIgICoqKioqKioqKioqKiovDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9USU0yTFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfVElNM0xQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX1RJTTRMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9USU01TFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfVElNNkxQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX1RJTTdMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9USU0xMkxQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfVElNMTNMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX1RJTTE0TFBFTiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9XV0RHTFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfU1BJMkxQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX1NQSTNMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9VU0FSVDJMUEVOICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfVVNBUlQzTFBFTiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX1VBUlQ0TFBFTiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9VQVJUNUxQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfSTJDMUxQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX0kyQzJMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9JMkMzTFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfQ0FOMUxQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMUxQRU5SX0NBTjJMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSAgUkNDX0FQQjFMUEVOUl9QV1JMUEVOICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIxTFBFTlJfREFDTFBFTiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBSQ0NfQVBCMkxQRU5SIHJlZ2lzdGVyICAqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFJDQ19BUEIyTFBFTlJfVElNMUxQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lICBSQ0NfQVBCMkxQRU5SX1RJTThMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSAgUkNDX0FQQjJMUEVOUl9VU0FSVDFMUEVOICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyTFBFTlJfVVNBUlQ2TFBFTiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lICBSQ0NfQVBCMkxQRU5SX0FEQzFMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSAgUkNDX0FQQjJMUEVOUl9BREMyUEVOICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyTFBFTlJfQURDM0xQRU4gICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lICBSQ0NfQVBCMkxQRU5SX1NESU9MUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSAgUkNDX0FQQjJMUEVOUl9TUEkxTFBFTiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyTFBFTlJfU1lTQ0ZHTFBFTiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lICBSQ0NfQVBCMkxQRU5SX1RJTTlMUEVOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSAgUkNDX0FQQjJMUEVOUl9USU0xMExQRU4gICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgIFJDQ19BUEIyTFBFTlJfVElNMTFMUEVOICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBSQ0NfQkRDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFJDQ19CRENSX0xTRU9OICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lICBSQ0NfQkRDUl9MU0VSRFkgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSAgUkNDX0JEQ1JfTFNFQllQICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKw0KKyNkZWZpbmUgIFJDQ19CRENSX1JUQ1NFTCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMzAwKQ0KKyNkZWZpbmUgIFJDQ19CRENSX1JUQ1NFTF8wICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgIFJDQ19CRENSX1JUQ1NFTF8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKw0KKyNkZWZpbmUgIFJDQ19CRENSX1JUQ0VOICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisjZGVmaW5lICBSQ0NfQkRDUl9CRFJTVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX0NTUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfQ1NSX0xTSU9OICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSAgUkNDX0NTUl9MU0lSRFkgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgIFJDQ19DU1JfUk1WRiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ1NSX0JPUlJTVEYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSAgUkNDX0NTUl9QQURSU1RGICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DU1JfUE9SUlNURiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ1NSX1NGVFJTVEYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApDQorI2RlZmluZSAgUkNDX0NTUl9XREdSU1RGICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKyNkZWZpbmUgIFJDQ19DU1JfV1dER1JTVEYgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfQ1NSX0xQV1JSU1RGICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX1NTQ0dSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfU1NDR1JfTU9EUEVSICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDFGRkYpDQorI2RlZmluZSAgUkNDX1NTQ0dSX0lOQ1NURVAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGRkZFMDAwKQ0KKyNkZWZpbmUgIFJDQ19TU0NHUl9TUFJFQURTRUwgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkNCisjZGVmaW5lICBSQ0NfU1NDR1JfU1NDR0VOICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgUkNDX1BMTEkyU0NGR1IgcmVnaXN0ZXIgICoqKioqKioqKioqKi8NCisjZGVmaW5lICBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNOICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDdGQzApDQorI2RlZmluZSAgUkNDX1BMTEkyU0NGR1JfUExMSTJTUiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDcwMDAwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUk5HX0NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUk5HX0NSX1JOR0VOICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIFJOR19DUl9JRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIFJOR19TUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFJOR19TUl9EUkRZICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBSTkdfU1JfQ0VDUyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgUk5HX1NSX1NFQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIFJOR19TUl9DRUlTICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBSTkdfU1JfU0VJUyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWwtVGltZSBDbG9jayAoUlRDKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX1RSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX1RSX1BNICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIFJUQ19UUl9IVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAzMDAwMDApDQorI2RlZmluZSBSVENfVFJfSFRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgUlRDX1RSX0hUXzEgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lIFJUQ19UUl9IVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRjAwMDApDQorI2RlZmluZSBSVENfVFJfSFVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgUlRDX1RSX0hVXzEgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIFJUQ19UUl9IVV8yICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBSVENfVFJfSFVfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgUlRDX1RSX01OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNzAwMCkNCisjZGVmaW5lIFJUQ19UUl9NTlRfMCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfVFJfTU5UXzEgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgUlRDX1RSX01OVF8yICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIFJUQ19UUl9NTlUgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGMDApDQorI2RlZmluZSBSVENfVFJfTU5VXzAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUlRDX1RSX01OVV8xICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIFJUQ19UUl9NTlVfMiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSVENfVFJfTU5VXzMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgUlRDX1RSX1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA3MCkNCisjZGVmaW5lIFJUQ19UUl9TVF8wICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSVENfVFJfU1RfMSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgUlRDX1RSX1NUXzIgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIFJUQ19UUl9TVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEYpDQorI2RlZmluZSBSVENfVFJfU1VfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgUlRDX1RSX1NVXzEgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJUQ19UUl9TVV8yICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBSVENfVFJfU1VfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBSVENfRFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBSVENfRFJfWVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRjAwMDAwKQ0KKyNkZWZpbmUgUlRDX0RSX1lUXzAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIFJUQ19EUl9ZVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBSVENfRFJfWVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0RSX1lUXzMgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkNCisjZGVmaW5lIFJUQ19EUl9ZVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRjAwMDApDQorI2RlZmluZSBSVENfRFJfWVVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgUlRDX0RSX1lVXzEgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIFJUQ19EUl9ZVV8yICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBSVENfRFJfWVVfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgUlRDX0RSX1dEVSAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwRTAwMCkNCisjZGVmaW5lIFJUQ19EUl9XRFVfMCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBSVENfRFJfV0RVXzEgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgUlRDX0RSX1dEVV8yICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisjZGVmaW5lIFJUQ19EUl9NVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfRFJfTVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwRjAwKQ0KKyNkZWZpbmUgUlRDX0RSX01VXzAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIFJUQ19EUl9NVV8xICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBSVENfRFJfTVVfMiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgUlRDX0RSX01VXzMgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIFJUQ19EUl9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzApDQorI2RlZmluZSBSVENfRFJfRFRfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgUlRDX0RSX0RUXzEgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJUQ19EUl9EVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEYpDQorI2RlZmluZSBSVENfRFJfRFVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgUlRDX0RSX0RVXzEgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJUQ19EUl9EVV8yICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBSVENfRFJfRFVfMyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBSVENfQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBSVENfQ1JfQ09FICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKyNkZWZpbmUgUlRDX0NSX09TRUwgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDYwMDAwMCkNCisjZGVmaW5lIFJUQ19DUl9PU0VMXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBSVENfQ1JfT1NFTF8xICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0NSX1BPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIFJUQ19DUl9CQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBSVENfQ1JfU1VCMUggICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgUlRDX0NSX0FERDFIICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIFJUQ19DUl9UU0lFICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorI2RlZmluZSBSVENfQ1JfV1VUSUUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgUlRDX0NSX0FMUkJJRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisjZGVmaW5lIFJUQ19DUl9BTFJBSUUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfQ1JfVFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgUlRDX0NSX1dVVEUgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIFJUQ19DUl9BTFJCRSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBSVENfQ1JfQUxSQUUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUlRDX0NSX0RDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIFJUQ19DUl9GTVQgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBSVENfQ1JfUkVGQ0tPTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgUlRDX0NSX1RTRURHRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIFJUQ19DUl9XVUNLU0VMICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDcpDQorI2RlZmluZSBSVENfQ1JfV1VDS1NFTF8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgUlRDX0NSX1dVQ0tTRUxfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJUQ19DUl9XVUNLU0VMXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIFJUQ19JU1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFJUQ19JU1JfVEFNUDFGICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBSVENfSVNSX1RTT1ZGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgUlRDX0lTUl9UU0YgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIFJUQ19JU1JfV1VURiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSVENfSVNSX0FMUkJGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgUlRDX0lTUl9BTFJBRiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIFJUQ19JU1JfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBSVENfSVNSX0lOSVRGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgUlRDX0lTUl9SU0YgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJUQ19JU1JfSU5JVFMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSVENfSVNSX1dVVFdGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgUlRDX0lTUl9BTFJCV0YgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJUQ19JU1JfQUxSQVdGICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIFJUQ19QUkVSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFJUQ19QUkVSX1BSRURJVl9BICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA3RjAwMDApDQorI2RlZmluZSBSVENfUFJFUl9QUkVESVZfUyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxRkZGKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBSVENfV1VUUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBSVENfV1VUUl9XVVQgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBGRkZGKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBSVENfQ0FMSUJSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKiovDQorI2RlZmluZSBSVENfQ0FMSUJSX0RDUyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgUlRDX0NBTElCUl9EQyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0FMUk1BUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0FMUk1BUl9NU0s0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfV0RTRUwgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX0RUICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9EVF8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfRFRfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX0RVICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9EVV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfRFVfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX0RVXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9EVV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfTVNLMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX1BNICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9IVCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDMwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfSFRfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX0hUXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9IVSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBGMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfSFVfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX0hVXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9IVV8yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfSFVfMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX01TSzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9NTlQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNzAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfTU5UXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfQUxSTUFSX01OVF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9NTlRfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfTU5VICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGMDApDQorI2RlZmluZSBSVENfQUxSTUFSX01OVV8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9NTlVfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfTU5VXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSVENfQUxSTUFSX01OVV8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9NU0sxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfU1QgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNzApDQorI2RlZmluZSBSVENfQUxSTUFSX1NUXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9TVF8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJUQ19BTFJNQVJfU1RfMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBSVENfQUxSTUFSX1NVICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9TVV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIFJUQ19BTFJNQVJfU1VfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBSVENfQUxSTUFSX1NVXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgUlRDX0FMUk1BUl9TVV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0FMUk1CUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0FMUk1CUl9NU0s0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfV0RTRUwgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX0RUICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9EVF8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfRFRfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX0RVICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9EVV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfRFVfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX0RVXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9EVV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwODAwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfTVNLMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX1BNICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9IVCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDMwMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfSFRfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX0hUXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9IVSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBGMDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfSFVfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX0hVXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9IVV8yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfSFVfMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX01TSzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9NTlQgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNzAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfTU5UXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfQUxSTUJSX01OVF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9NTlRfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfTU5VICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGMDApDQorI2RlZmluZSBSVENfQUxSTUJSX01OVV8wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9NTlVfMSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfTU5VXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSVENfQUxSTUJSX01OVV8zICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9NU0sxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfU1QgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNzApDQorI2RlZmluZSBSVENfQUxSTUJSX1NUXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9TVF8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJUQ19BTFJNQlJfU1RfMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBSVENfQUxSTUJSX1NVICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBGKQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9TVV8wICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIFJUQ19BTFJNQlJfU1VfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBSVENfQUxSTUJSX1NVXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgUlRDX0FMUk1CUl9TVV8zICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX1dQUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX1dQUl9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX1RTVFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX1RTVFJfUE0gICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIFJUQ19UU1RSX0hUICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAzMDAwMDApDQorI2RlZmluZSBSVENfVFNUUl9IVF8wICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfSFRfMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lIFJUQ19UU1RSX0hVICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRjAwMDApDQorI2RlZmluZSBSVENfVFNUUl9IVV8wICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfSFVfMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIFJUQ19UU1RSX0hVXzIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBSVENfVFNUUl9IVV8zICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfTU5UICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNzAwMCkNCisjZGVmaW5lIFJUQ19UU1RSX01OVF8wICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfVFNUUl9NTlRfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfTU5UXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIFJUQ19UU1RSX01OVSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGMDApDQorI2RlZmluZSBSVENfVFNUUl9NTlVfMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfTU5VXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIFJUQ19UU1RSX01OVV8yICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSVENfVFNUUl9NTlVfMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfU1QgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA3MCkNCisjZGVmaW5lIFJUQ19UU1RSX1NUXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSVENfVFNUUl9TVF8xICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgUlRDX1RTVFJfU1RfMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIFJUQ19UU1RSX1NVICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEYpDQorI2RlZmluZSBSVENfVFNUUl9TVV8wICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgUlRDX1RTVFJfU1VfMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJUQ19UU1RSX1NVXzIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBSVENfVFNUUl9TVV8zICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0cyBkZWZpbml0aW9uIGZvciBSVENfVFNEUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSBSVENfVFNEUl9XRFUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDBFMDAwKQ0KKyNkZWZpbmUgUlRDX1RTRFJfV0RVXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisjZGVmaW5lIFJUQ19UU0RSX1dEVV8xICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBSVENfVFNEUl9XRFVfMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgUlRDX1RTRFJfTVQgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIFJUQ19UU0RSX01VICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGMDApDQorI2RlZmluZSBSVENfVFNEUl9NVV8wICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUlRDX1RTRFJfTVVfMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIFJUQ19UU0RSX01VXzIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSVENfVFNEUl9NVV8zICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgUlRDX1RTRFJfRFQgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAzMCkNCisjZGVmaW5lIFJUQ19UU0RSX0RUXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSVENfVFNEUl9EVF8xICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgUlRDX1RTRFJfRFUgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikNCisjZGVmaW5lIFJUQ19UU0RSX0RVXzAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBSVENfVFNEUl9EVV8xICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgUlRDX1RTRFJfRFVfMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIFJUQ19UU0RSX0RVXzMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXRzIGRlZmluaXRpb24gZm9yIFJUQ19UQUZDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFJUQ19UQUZDUl9BTEFSTU9VVFRZUEUgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBSVENfVEFGQ1JfVFNJTlNFTCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgUlRDX1RBRkNSX1RBTVBJTlNFTCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIFJUQ19UQUZDUl9UQU1QSUUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBSVENfVEFGQ1JfVEFNUDFUUkcgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgUlRDX1RBRkNSX1RBTVAxRSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDBSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDFSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDJSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDRSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDVSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDZSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDdSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDdSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDhSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDhSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDlSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDlSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDEwUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDEwUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDExUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDExUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDEyUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDEyUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDEzUiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDEzUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDE0UiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDE0UiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDE1UiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDE1UiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDE2UiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDE2UiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDE3UiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDE3UiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDE4UiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDE4UiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdHMgZGVmaW5pdGlvbiBmb3IgUlRDX0JLUDE5UiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgUlRDX0JLUDE5UiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgIFNEIGhvc3QgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fUE9XRVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTRElPX1BPV0VSX1BXUkNUUkwgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgICAgICAgICAgICAgICAvKiE8UFdSQ1RSTFsxOjBdIGJpdHMgKFBvd2VyIHN1cHBseSBjb250cm9sIGJpdHMpICovDQorI2RlZmluZSAgU0RJT19QT1dFUl9QV1JDVFJMXzAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAgICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgU0RJT19QT1dFUl9QV1JDVFJMXzEgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAgICAgICAgICAgICAgLyohPEJpdCAxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fQ0xLQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTRElPX0NMS0NSX0NMS0RJViAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBGRikgICAgICAgICAgICAvKiE8Q2xvY2sgZGl2aWRlIGZhY3RvciAqLw0KKyNkZWZpbmUgIFNESU9fQ0xLQ1JfQ0xLRU4gICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxDbG9jayBlbmFibGUgYml0ICovDQorI2RlZmluZSAgU0RJT19DTEtDUl9QV1JTQVYgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPFBvd2VyIHNhdmluZyBjb25maWd1cmF0aW9uIGJpdCAqLw0KKyNkZWZpbmUgIFNESU9fQ0xLQ1JfQllQQVNTICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxDbG9jayBkaXZpZGVyIGJ5cGFzcyBlbmFibGUgYml0ICovDQorDQorI2RlZmluZSAgU0RJT19DTEtDUl9XSURCVVMgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDE4MDApICAgICAgICAgICAgLyohPFdJREJVU1sxOjBdIGJpdHMgKFdpZGUgYnVzIG1vZGUgZW5hYmxlIGJpdCkgKi8NCisjZGVmaW5lICBTRElPX0NMS0NSX1dJREJVU18wICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBTRElPX0NMS0NSX1dJREJVU18xICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBTRElPX0NMS0NSX05FR0VER0UgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgICAgICAgICAgICAvKiE8U0RJT19DSyBkZXBoYXNpbmcgc2VsZWN0aW9uIGJpdCAqLw0KKyNkZWZpbmUgIFNESU9fQ0xLQ1JfSFdGQ19FTiAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAgICAgICAgICAgIC8qITxIVyBGbG93IENvbnRyb2wgZW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTRElPX0FSRyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTRElPX0FSR19DTURBUkcgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAgICAgICAgICAgLyohPENvbW1hbmQgYXJndW1lbnQgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fQ01EIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fQ01EX0NNRElOREVYICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDNGKSAgICAgICAgICAgIC8qITxDb21tYW5kIEluZGV4ICovDQorDQorI2RlZmluZSAgU0RJT19DTURfV0FJVFJFU1AgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwQzApICAgICAgICAgICAgLyohPFdBSVRSRVNQWzE6MF0gYml0cyAoV2FpdCBmb3IgcmVzcG9uc2UgYml0cykgKi8NCisjZGVmaW5lICBTRElPX0NNRF9XQUlUUkVTUF8wICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8IEJpdCAwICovDQorI2RlZmluZSAgU0RJT19DTURfV0FJVFJFU1BfMSAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPCBCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIFNESU9fQ01EX1dBSVRJTlQgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxDUFNNIFdhaXRzIGZvciBJbnRlcnJ1cHQgUmVxdWVzdCAqLw0KKyNkZWZpbmUgIFNESU9fQ01EX1dBSVRQRU5EICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxDUFNNIFdhaXRzIGZvciBlbmRzIG9mIGRhdGEgdHJhbnNmZXIgKENtZFBlbmQgaW50ZXJuYWwgc2lnbmFsKSAqLw0KKyNkZWZpbmUgIFNESU9fQ01EX0NQU01FTiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxDb21tYW5kIHBhdGggc3RhdGUgbWFjaGluZSAoQ1BTTSkgRW5hYmxlIGJpdCAqLw0KKyNkZWZpbmUgIFNESU9fQ01EX1NESU9TVVNQRU5EICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxTRCBJL08gc3VzcGVuZCBjb21tYW5kICovDQorI2RlZmluZSAgU0RJT19DTURfRU5DTURDT01QTCAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEVuYWJsZSBDTUQgY29tcGxldGlvbiAqLw0KKyNkZWZpbmUgIFNESU9fQ01EX05JRU4gICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxOb3QgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fQ01EX0NFQVRBQ01EICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAgICAgICAgICAgIC8qITxDRS1BVEEgY29tbWFuZCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fUkVTUENNRCByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19SRVNQQ01EX1JFU1BDTUQgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4M0YpICAgICAgICAgICAgICAgLyohPFJlc3BvbnNlIGNvbW1hbmQgaW5kZXggKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19SRVNQMCByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fUkVTUDBfQ0FSRFNUQVRVUzAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgICAgICAgIC8qITxDYXJkIFN0YXR1cyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTRElPX1JFU1AxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19SRVNQMV9DQVJEU1RBVFVTMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgICAgICAgLyohPENhcmQgU3RhdHVzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fUkVTUDIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTRElPX1JFU1AyX0NBUkRTVEFUVVMyICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAgICAgICAvKiE8Q2FyZCBTdGF0dXMgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19SRVNQMyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fUkVTUDNfQ0FSRFNUQVRVUzMgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgICAgICAgIC8qITxDYXJkIFN0YXR1cyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTRElPX1JFU1A0IHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19SRVNQNF9DQVJEU1RBVFVTNCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgICAgICAgLyohPENhcmQgU3RhdHVzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fRFRJTUVSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTRElPX0RUSU1FUl9EQVRBVElNRSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAgICAgICAvKiE8RGF0YSB0aW1lb3V0IHBlcmlvZC4gKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19ETEVOIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fRExFTl9EQVRBTEVOR1RIICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMUZGRkZGRikgICAgICAgIC8qITxEYXRhIGxlbmd0aCB2YWx1ZSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTRElPX0RDVFJMIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EVEVOICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPERhdGEgdHJhbnNmZXIgZW5hYmxlZCBiaXQgKi8NCisjZGVmaW5lICBTRElPX0RDVFJMX0RURElSICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8RGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gc2VsZWN0aW9uICovDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EVE1PREUgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPERhdGEgdHJhbnNmZXIgbW9kZSBzZWxlY3Rpb24gKi8NCisjZGVmaW5lICBTRElPX0RDVFJMX0RNQUVOICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8RE1BIGVuYWJsZWQgYml0ICovDQorDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EQkxPQ0tTSVpFICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwRjApICAgICAgICAgICAgLyohPERCTE9DS1NJWkVbMzowXSBiaXRzIChEYXRhIGJsb2NrIHNpemUpICovDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EQkxPQ0tTSVpFXzAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EQkxPQ0tTSVpFXzEgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EQkxPQ0tTSVpFXzIgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgU0RJT19EQ1RSTF9EQkxPQ0tTSVpFXzMgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgU0RJT19EQ1RSTF9SV1NUQVJUICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPFJlYWQgd2FpdCBzdGFydCAqLw0KKyNkZWZpbmUgIFNESU9fRENUUkxfUldTVE9QICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxSZWFkIHdhaXQgc3RvcCAqLw0KKyNkZWZpbmUgIFNESU9fRENUUkxfUldNT0QgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxSZWFkIHdhaXQgbW9kZSAqLw0KKyNkZWZpbmUgIFNESU9fRENUUkxfU0RJT0VOICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxTRCBJL08gZW5hYmxlIGZ1bmN0aW9ucyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTRElPX0RDT1VOVCByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19EQ09VTlRfREFUQUNPVU5UICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxRkZGRkZGKSAgICAgICAgLyohPERhdGEgY291bnQgdmFsdWUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19TVEEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fU1RBX0NDUkNGQUlMICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSAqLw0KKyNkZWZpbmUgIFNESU9fU1RBX0RDUkNGQUlMICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgICAgICAgIC8qITxEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpICovDQorI2RlZmluZSAgU0RJT19TVEFfQ1RJTUVPVVQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPENvbW1hbmQgcmVzcG9uc2UgdGltZW91dCAqLw0KKyNkZWZpbmUgIFNESU9fU1RBX0RUSU1FT1VUICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgICAgICAgIC8qITxEYXRhIHRpbWVvdXQgKi8NCisjZGVmaW5lICBTRElPX1NUQV9UWFVOREVSUiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAgICAgICAvKiE8VHJhbnNtaXQgRklGTyB1bmRlcnJ1biBlcnJvciAqLw0KKyNkZWZpbmUgIFNESU9fU1RBX1JYT1ZFUlIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3IgKi8NCisjZGVmaW5lICBTRElPX1NUQV9DTURSRU5EICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Q29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkgKi8NCisjZGVmaW5lICBTRElPX1NUQV9DTURTRU5UICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Q29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgKi8NCisjZGVmaW5lICBTRElPX1NUQV9EQVRBRU5EICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKSAqLw0KKyNkZWZpbmUgIFNESU9fU1RBX1NUQklURVJSICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxTdGFydCBiaXQgbm90IGRldGVjdGVkIG9uIGFsbCBkYXRhIHNpZ25hbHMgaW4gd2lkZSBidXMgbW9kZSAqLw0KKyNkZWZpbmUgIFNESU9fU1RBX0RCQ0tFTkQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpICovDQorI2RlZmluZSAgU0RJT19TVEFfQ01EQUNUICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPENvbW1hbmQgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8NCisjZGVmaW5lICBTRElPX1NUQV9UWEFDVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAgICAgICAvKiE8RGF0YSB0cmFuc21pdCBpbiBwcm9ncmVzcyAqLw0KKyNkZWZpbmUgIFNESU9fU1RBX1JYQUNUICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgICAgICAgIC8qITxEYXRhIHJlY2VpdmUgaW4gcHJvZ3Jlc3MgKi8NCisjZGVmaW5lICBTRElPX1NUQV9UWEZJRk9IRSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAgICAgICAvKiE8VHJhbnNtaXQgRklGTyBIYWxmIEVtcHR5OiBhdCBsZWFzdCA4IHdvcmRzIGNhbiBiZSB3cml0dGVuIGludG8gdGhlIEZJRk8gKi8NCisjZGVmaW5lICBTRElPX1NUQV9SWEZJRk9IRiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAgICAgICAvKiE8UmVjZWl2ZSBGSUZPIEhhbGYgRnVsbDogdGhlcmUgYXJlIGF0IGxlYXN0IDggd29yZHMgaW4gdGhlIEZJRk8gKi8NCisjZGVmaW5lICBTRElPX1NUQV9UWEZJRk9GICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAgICAgICAvKiE8VHJhbnNtaXQgRklGTyBmdWxsICovDQorI2RlZmluZSAgU0RJT19TVEFfUlhGSUZPRiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPFJlY2VpdmUgRklGTyBmdWxsICovDQorI2RlZmluZSAgU0RJT19TVEFfVFhGSUZPRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPFRyYW5zbWl0IEZJRk8gZW1wdHkgKi8NCisjZGVmaW5lICBTRElPX1NUQV9SWEZJRk9FICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAgICAgICAvKiE8UmVjZWl2ZSBGSUZPIGVtcHR5ICovDQorI2RlZmluZSAgU0RJT19TVEFfVFhEQVZMICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgICAgICAgLyohPERhdGEgYXZhaWxhYmxlIGluIHRyYW5zbWl0IEZJRk8gKi8NCisjZGVmaW5lICBTRElPX1NUQV9SWERBVkwgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAgICAgICAvKiE8RGF0YSBhdmFpbGFibGUgaW4gcmVjZWl2ZSBGSUZPICovDQorI2RlZmluZSAgU0RJT19TVEFfU0RJT0lUICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKSAgICAgICAgLyohPFNESU8gaW50ZXJydXB0IHJlY2VpdmVkICovDQorI2RlZmluZSAgU0RJT19TVEFfQ0VBVEFFTkQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKSAgICAgICAgLyohPENFLUFUQSBjb21tYW5kIGNvbXBsZXRpb24gc2lnbmFsIHJlY2VpdmVkIGZvciBDTUQ2MSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19JQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19JQ1JfQ0NSQ0ZBSUxDICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgLyohPENDUkNGQUlMIGZsYWcgY2xlYXIgYml0ICovDQorI2RlZmluZSAgU0RJT19JQ1JfRENSQ0ZBSUxDICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgICAgICAgLyohPERDUkNGQUlMIGZsYWcgY2xlYXIgYml0ICovDQorI2RlZmluZSAgU0RJT19JQ1JfQ1RJTUVPVVRDICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPENUSU1FT1VUIGZsYWcgY2xlYXIgYml0ICovDQorI2RlZmluZSAgU0RJT19JQ1JfRFRJTUVPVVRDICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPERUSU1FT1VUIGZsYWcgY2xlYXIgYml0ICovDQorI2RlZmluZSAgU0RJT19JQ1JfVFhVTkRFUlJDICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPFRYVU5ERVJSIGZsYWcgY2xlYXIgYml0ICovDQorI2RlZmluZSAgU0RJT19JQ1JfUlhPVkVSUkMgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgICAgICAgLyohPFJYT1ZFUlIgZmxhZyBjbGVhciBiaXQgKi8NCisjZGVmaW5lICBTRElPX0lDUl9DTURSRU5EQyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAgICAgICAvKiE8Q01EUkVORCBmbGFnIGNsZWFyIGJpdCAqLw0KKyNkZWZpbmUgIFNESU9fSUNSX0NNRFNFTlRDICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgICAgICAgIC8qITxDTURTRU5UIGZsYWcgY2xlYXIgYml0ICovDQorI2RlZmluZSAgU0RJT19JQ1JfREFUQUVOREMgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgICAgICAgLyohPERBVEFFTkQgZmxhZyBjbGVhciBiaXQgKi8NCisjZGVmaW5lICBTRElPX0lDUl9TVEJJVEVSUkMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAgICAgICAvKiE8U1RCSVRFUlIgZmxhZyBjbGVhciBiaXQgKi8NCisjZGVmaW5lICBTRElPX0lDUl9EQkNLRU5EQyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApICAgICAgICAvKiE8REJDS0VORCBmbGFnIGNsZWFyIGJpdCAqLw0KKyNkZWZpbmUgIFNESU9fSUNSX1NESU9JVEMgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxTRElPSVQgZmxhZyBjbGVhciBiaXQgKi8NCisjZGVmaW5lICBTRElPX0lDUl9DRUFUQUVOREMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Q0VBVEFFTkQgZmxhZyBjbGVhciBiaXQgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19NQVNLIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19DQ1JDRkFJTElFICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgICAgICAgIC8qITxDb21tYW5kIENSQyBGYWlsIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTRElPX01BU0tfRENSQ0ZBSUxJRSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAgICAgICAvKiE8RGF0YSBDUkMgRmFpbCBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX0NUSU1FT1VUSUUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgICAgICAgLyohPENvbW1hbmQgVGltZU91dCBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX0RUSU1FT1VUSUUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgICAgICAgLyohPERhdGEgVGltZU91dCBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX1RYVU5ERVJSSUUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgICAgICAgLyohPFR4IEZJRk8gVW5kZXJSdW4gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19SWE9WRVJSSUUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgICAgICAgIC8qITxSeCBGSUZPIE92ZXJSdW4gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19DTURSRU5ESUUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgICAgICAgIC8qITxDb21tYW5kIFJlc3BvbnNlIFJlY2VpdmVkIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTRElPX01BU0tfQ01EU0VOVElFICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAgICAgICAvKiE8Q29tbWFuZCBTZW50IEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTRElPX01BU0tfREFUQUVORElFICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAgICAgICAvKiE8RGF0YSBFbmQgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19TVEJJVEVSUklFICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgICAgICAgIC8qITxTdGFydCBCaXQgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19EQkNLRU5ESUUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgICAgIC8qITxEYXRhIEJsb2NrIEVuZCBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX0NNREFDVElFICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgICAgICAgLyohPENDb21tYW5kIEFjdGluZyBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX1RYQUNUSUUgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgICAgICAgLyohPERhdGEgVHJhbnNtaXQgQWN0aW5nIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTRElPX01BU0tfUlhBQ1RJRSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAgICAgICAvKiE8RGF0YSByZWNlaXZlIGFjdGluZyBpbnRlcnJ1cHQgZW5hYmxlZCAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19UWEZJRk9IRUlFICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgICAgICAgIC8qITxUeCBGSUZPIEhhbGYgRW1wdHkgaW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19SWEZJRk9IRklFICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgICAgICAgIC8qITxSeCBGSUZPIEhhbGYgRnVsbCBpbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX1RYRklGT0ZJRSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgICAgICAgLyohPFR4IEZJRk8gRnVsbCBpbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX1JYRklGT0ZJRSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgICAgICAgLyohPFJ4IEZJRk8gRnVsbCBpbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX1RYRklGT0VJRSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgICAgICAgLyohPFR4IEZJRk8gRW1wdHkgaW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19SWEZJRk9FSUUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgICAgICAgIC8qITxSeCBGSUZPIEVtcHR5IGludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTRElPX01BU0tfVFhEQVZMSUUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApICAgICAgICAvKiE8RGF0YSBhdmFpbGFibGUgaW4gVHggRklGTyBpbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU0RJT19NQVNLX1JYREFWTElFICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgICAgICAgLyohPERhdGEgYXZhaWxhYmxlIGluIFJ4IEZJRk8gaW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNESU9fTUFTS19TRElPSVRJRSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgICAgICAgIC8qITxTRElPIE1vZGUgSW50ZXJydXB0IFJlY2VpdmVkIGludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTRElPX01BU0tfQ0VBVEFFTkRJRSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAgICAgICAvKiE8Q0UtQVRBIGNvbW1hbmQgY29tcGxldGlvbiBzaWduYWwgcmVjZWl2ZWQgSW50ZXJydXB0IEVuYWJsZSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNESU9fRklGT0NOVCByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU0RJT19GSUZPQ05UX0ZJRk9DT1VOVCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwRkZGRkZGKSAgICAgICAgLyohPFJlbWFpbmluZyBudW1iZXIgb2Ygd29yZHMgdG8gYmUgd3JpdHRlbiB0byBvciByZWFkIGZyb20gdGhlIEZJRk8gKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU0RJT19GSUZPIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNESU9fRklGT19GSUZPREFUQSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgICAgICAgIC8qITxSZWNlaXZlIGFuZCB0cmFuc21pdCBGSUZPIGRhdGEgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTUElfQ1IxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTUElfQ1IxX0NQSEEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8Q2xvY2sgUGhhc2UgKi8NCisjZGVmaW5lICBTUElfQ1IxX0NQT0wgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8Q2xvY2sgUG9sYXJpdHkgKi8NCisjZGVmaW5lICBTUElfQ1IxX01TVFIgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8TWFzdGVyIFNlbGVjdGlvbiAqLw0KKw0KKyNkZWZpbmUgIFNQSV9DUjFfQlIgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDM4KSAgICAgICAgICAgIC8qITxCUlsyOjBdIGJpdHMgKEJhdWQgUmF0ZSBDb250cm9sKSAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfQlJfMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfQlJfMSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfQlJfMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKyNkZWZpbmUgIFNQSV9DUjFfU1BFICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxTUEkgRW5hYmxlICovDQorI2RlZmluZSAgU1BJX0NSMV9MU0JGSVJTVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEZyYW1lIEZvcm1hdCAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfU1NJICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxJbnRlcm5hbCBzbGF2ZSBzZWxlY3QgKi8NCisjZGVmaW5lICBTUElfQ1IxX1NTTSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8U29mdHdhcmUgc2xhdmUgbWFuYWdlbWVudCAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfUlhPTkxZICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxSZWNlaXZlIG9ubHkgKi8NCisjZGVmaW5lICBTUElfQ1IxX0RGRiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8RGF0YSBGcmFtZSBGb3JtYXQgKi8NCisjZGVmaW5lICBTUElfQ1IxX0NSQ05FWFQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8VHJhbnNtaXQgQ1JDIG5leHQgKi8NCisjZGVmaW5lICBTUElfQ1IxX0NSQ0VOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgICAgICAgICAgICAvKiE8SGFyZHdhcmUgQ1JDIGNhbGN1bGF0aW9uIGVuYWJsZSAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfQklESU9FICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAgICAgICAgICAgIC8qITxPdXRwdXQgZW5hYmxlIGluIGJpZGlyZWN0aW9uYWwgbW9kZSAqLw0KKyNkZWZpbmUgIFNQSV9DUjFfQklESU1PREUgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxCaWRpcmVjdGlvbmFsIGRhdGEgbW9kZSBlbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNQSV9DUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNQSV9DUjJfUlhETUFFTiAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgICAgICAgICAgICAgIC8qITxSeCBCdWZmZXIgRE1BIEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNQSV9DUjJfVFhETUFFTiAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKSAgICAgICAgICAgICAgIC8qITxUeCBCdWZmZXIgRE1BIEVuYWJsZSAqLw0KKyNkZWZpbmUgIFNQSV9DUjJfU1NPRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgICAgICAgICAgICAgIC8qITxTUyBPdXRwdXQgRW5hYmxlICovDQorI2RlZmluZSAgU1BJX0NSMl9FUlJJRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgICAgICAgICAgICAgLyohPEVycm9yIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBTUElfQ1IyX1JYTkVJRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg0MCkgICAgICAgICAgICAgICAvKiE8UlggYnVmZmVyIE5vdCBFbXB0eSBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgU1BJX0NSMl9UWEVJRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4ODApICAgICAgICAgICAgICAgLyohPFR4IGJ1ZmZlciBFbXB0eSBJbnRlcnJ1cHQgRW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1BJX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTUElfU1JfUlhORSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgICAgICAgICAgICAgICAvKiE8UmVjZWl2ZSBidWZmZXIgTm90IEVtcHR5ICovDQorI2RlZmluZSAgU1BJX1NSX1RYRSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAgICAgICAgICAgICAgLyohPFRyYW5zbWl0IGJ1ZmZlciBFbXB0eSAqLw0KKyNkZWZpbmUgIFNQSV9TUl9DSFNJREUgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgICAgICAgICAgICAgIC8qITxDaGFubmVsIHNpZGUgKi8NCisjZGVmaW5lICBTUElfU1JfVURSICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgICAgICAgICAgICAgICAvKiE8VW5kZXJydW4gZmxhZyAqLw0KKyNkZWZpbmUgIFNQSV9TUl9DUkNFUlIgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDEwKSAgICAgICAgICAgICAgIC8qITxDUkMgRXJyb3IgZmxhZyAqLw0KKyNkZWZpbmUgIFNQSV9TUl9NT0RGICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDIwKSAgICAgICAgICAgICAgIC8qITxNb2RlIGZhdWx0ICovDQorI2RlZmluZSAgU1BJX1NSX09WUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NDApICAgICAgICAgICAgICAgLyohPE92ZXJydW4gZmxhZyAqLw0KKyNkZWZpbmUgIFNQSV9TUl9CU1kgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDgwKSAgICAgICAgICAgICAgIC8qITxCdXN5IGZsYWcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTUElfRFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNQSV9EUl9EUiAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKSAgICAgICAgICAgIC8qITxEYXRhIFJlZ2lzdGVyICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTUElfQ1JDUFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBTUElfQ1JDUFJfQ1JDUE9MWSAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8Q1JDIHBvbHlub21pYWwgcmVnaXN0ZXIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1BJX1JYQ1JDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNQSV9SWENSQ1JfUlhDUkMgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKSAgICAgICAgICAgIC8qITxSeCBDUkMgUmVnaXN0ZXIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1BJX1RYQ1JDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNQSV9UWENSQ1JfVFhDUkMgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKSAgICAgICAgICAgIC8qITxUeCBDUkMgUmVnaXN0ZXIgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1BJX0kyU0NGR1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0NITEVOICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxDaGFubmVsIGxlbmd0aCAobnVtYmVyIG9mIGJpdHMgcGVyIGF1ZGlvIGNoYW5uZWwpICovDQorDQorI2RlZmluZSAgU1BJX0kyU0NGR1JfREFUTEVOICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDYpICAgICAgICAgICAgLyohPERBVExFTlsxOjBdIGJpdHMgKERhdGEgbGVuZ3RoIHRvIGJlIHRyYW5zZmVycmVkKSAqLw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0RBVExFTl8wICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0RBVExFTl8xICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0NLUE9MICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxzdGVhZHkgc3RhdGUgY2xvY2sgcG9sYXJpdHkgKi8NCisNCisjZGVmaW5lICBTUElfSTJTQ0ZHUl9JMlNTVEQgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAzMCkgICAgICAgICAgICAvKiE8STJTU1REWzE6MF0gYml0cyAoSTJTIHN0YW5kYXJkIHNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBTUElfSTJTQ0ZHUl9JMlNTVERfMCAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBTUElfSTJTQ0ZHUl9JMlNTVERfMSAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBTUElfSTJTQ0ZHUl9QQ01TWU5DICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8UENNIGZyYW1lIHN5bmNocm9uaXphdGlvbiAqLw0KKw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0kyU0NGRyAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMzAwKSAgICAgICAgICAgIC8qITxJMlNDRkdbMTowXSBiaXRzIChJMlMgY29uZmlndXJhdGlvbiBtb2RlKSAqLw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0kyU0NGR18wICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0kyU0NGR18xICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIFNQSV9JMlNDRkdSX0kyU0UgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxJMlMgRW5hYmxlICovDQorI2RlZmluZSAgU1BJX0kyU0NGR1JfSTJTTU9EICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPEkyUyBtb2RlIHNlbGVjdGlvbiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTUElfSTJTUFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgU1BJX0kyU1BSX0kyU0RJViAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwRkYpICAgICAgICAgICAgLyohPEkyUyBMaW5lYXIgcHJlc2NhbGVyICovDQorI2RlZmluZSAgU1BJX0kyU1BSX09ERCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPE9kZCBmYWN0b3IgZm9yIHRoZSBwcmVzY2FsZXIgKi8NCisjZGVmaW5lICBTUElfSTJTUFJfTUNLT0UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8TWFzdGVyIENsb2NrIE91dHB1dCBFbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNZU0NGR19NRU1STVAgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKi8gIA0KKyNkZWZpbmUgU1lTQ0ZHX01FTVJNUF9NRU1fTU9ERSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDMpIC8qITxTWVNDRkdfTWVtb3J5IFJlbWFwIENvbmZpZyAqLw0KKyNkZWZpbmUgU1lTQ0ZHX01FTVJNUF9NRU1fTU9ERV8wICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBTWVNDRkdfTUVNUk1QX01FTV9NT0RFXzEgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1lTQ0ZHX1BNQyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgU1lTQ0ZHX1BNQ19NSUlfUk1JSV9TRUwgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApIC8qITxFdGhlcm5ldCBQSFkgaW50ZXJmYWNlIHNlbGVjdGlvbiAqLw0KKy8qIE9sZCBNSUlfUk1JSV9TRUwgYml0IGRlZmluaXRpb24sIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlICovDQorI2RlZmluZSBTWVNDRkdfUE1DX01JSV9STUlJICAgICAgICAgICAgIFNZU0NGR19QTUNfTUlJX1JNSUlfU0VMDQorDQorLyoqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1lTQ0ZHX0VYVElDUjEgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEYpIC8qITxFWFRJIDAgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTEgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBGMCkgLyohPEVYVEkgMSBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMiAgICAgICAgICAgICgodWludDE2X3QpMHgwRjAwKSAvKiE8RVhUSSAyIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzICAgICAgICAgICAgKCh1aW50MTZfdCkweEYwMDApIC8qITxFWFRJIDMgY29uZmlndXJhdGlvbiAqLw0KKy8qKiANCisgICogQGJyaWVmICAgRVhUSTAgY29uZmlndXJhdGlvbiAgDQorICAqLyANCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BBICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITxQQVswXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BCICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpIC8qITxQQlswXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BDICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpIC8qITxQQ1swXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BEICAgICAgICAgKCh1aW50MTZfdCkweDAwMDMpIC8qITxQRFswXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BFICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpIC8qITxQRVswXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BGICAgICAgICAgKCh1aW50MTZfdCkweDAwMDUpIC8qITxQRlswXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BHICAgICAgICAgKCh1aW50MTZfdCkweDAwMDYpIC8qITxQR1swXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BIICAgICAgICAgKCh1aW50MTZfdCkweDAwMDcpIC8qITxQSFswXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkwX1BJICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpIC8qITxQSVswXSBwaW4gKi8NCisvKiogDQorICAqIEBicmllZiAgIEVYVEkxIGNvbmZpZ3VyYXRpb24gIA0KKyAgKi8gDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QQSAgICAgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8UEFbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QQiAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAvKiE8UEJbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QQyAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAvKiE8UENbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QRCAgICAgICAgICgodWludDE2X3QpMHgwMDMwKSAvKiE8UERbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QRSAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAvKiE8UEVbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QRiAgICAgICAgICgodWludDE2X3QpMHgwMDUwKSAvKiE8UEZbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QRyAgICAgICAgICgodWludDE2X3QpMHgwMDYwKSAvKiE8UEdbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QSCAgICAgICAgICgodWludDE2X3QpMHgwMDcwKSAvKiE8UEhbMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMV9FWFRJMV9QSSAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAvKiE8UElbMV0gcGluICovDQorLyoqIA0KKyAgKiBAYnJpZWYgICBFWFRJMiBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEEgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEIgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgLyohPFBCWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEMgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgLyohPFBDWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEQgICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkgLyohPFBEWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEUgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgLyohPFBFWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEYgICAgICAgICAoKHVpbnQxNl90KTB4MDUwMCkgLyohPFBGWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEcgICAgICAgICAoKHVpbnQxNl90KTB4MDYwMCkgLyohPFBHWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEggICAgICAgICAoKHVpbnQxNl90KTB4MDcwMCkgLyohPFBIWzJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjFfRVhUSTJfUEkgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgLyohPFBJWzJdIHBpbiAqLw0KKy8qKiANCisgICogQGJyaWVmICAgRVhUSTMgY29uZmlndXJhdGlvbiAgDQorICAqLyANCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BBICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITxQQVszXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BCICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApIC8qITxQQlszXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BDICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApIC8qITxQQ1szXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BEICAgICAgICAgKCh1aW50MTZfdCkweDMwMDApIC8qITxQRFszXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BFICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApIC8qITxQRVszXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BGICAgICAgICAgKCh1aW50MTZfdCkweDUwMDApIC8qITxQRlszXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BHICAgICAgICAgKCh1aW50MTZfdCkweDYwMDApIC8qITxQR1szXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BIICAgICAgICAgKCh1aW50MTZfdCkweDcwMDApIC8qITxQSFszXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IxX0VYVEkzX1BJICAgICAgICAgKCh1aW50MTZfdCkweDgwMDApIC8qITxQSVszXSBwaW4gKi8NCisNCisvKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBTWVNDRkdfRVhUSUNSMiByZWdpc3RlciAgKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTQgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwRikgLyohPEVYVEkgNCBjb25maWd1cmF0aW9uICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNSAgICAgICAgICAgICgodWludDE2X3QpMHgwMEYwKSAvKiE8RVhUSSA1IGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk2ICAgICAgICAgICAgKCh1aW50MTZfdCkweDBGMDApIC8qITxFWFRJIDYgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTcgICAgICAgICAgICAoKHVpbnQxNl90KTB4RjAwMCkgLyohPEVYVEkgNyBjb25maWd1cmF0aW9uICovDQorLyoqIA0KKyAgKiBAYnJpZWYgICBFWFRJNCBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEEgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEIgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgLyohPFBCWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEMgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgLyohPFBDWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEQgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMykgLyohPFBEWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEUgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgLyohPFBFWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEYgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNSkgLyohPFBGWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEcgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNikgLyohPFBHWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEggICAgICAgICAoKHVpbnQxNl90KTB4MDAwNykgLyohPFBIWzRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTRfUEkgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgLyohPFBJWzRdIHBpbiAqLw0KKy8qKiANCisgICogQGJyaWVmICAgRVhUSTUgY29uZmlndXJhdGlvbiAgDQorICAqLyANCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BBICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITxQQVs1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BCICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApIC8qITxQQls1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BDICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApIC8qITxQQ1s1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BEICAgICAgICAgKCh1aW50MTZfdCkweDAwMzApIC8qITxQRFs1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BFICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApIC8qITxQRVs1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BGICAgICAgICAgKCh1aW50MTZfdCkweDAwNTApIC8qITxQRls1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BHICAgICAgICAgKCh1aW50MTZfdCkweDAwNjApIC8qITxQR1s1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BIICAgICAgICAgKCh1aW50MTZfdCkweDAwNzApIC8qITxQSFs1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IyX0VYVEk1X1BJICAgICAgICAgKCh1aW50MTZfdCkweDAwODApIC8qITxQSVs1XSBwaW4gKi8NCisvKiogDQorICAqIEBicmllZiAgIEVYVEk2IGNvbmZpZ3VyYXRpb24gIA0KKyAgKi8gDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QQSAgICAgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8UEFbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QQiAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAvKiE8UEJbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QQyAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAvKiE8UENbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QRCAgICAgICAgICgodWludDE2X3QpMHgwMzAwKSAvKiE8UERbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QRSAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAvKiE8UEVbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QRiAgICAgICAgICgodWludDE2X3QpMHgwNTAwKSAvKiE8UEZbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QRyAgICAgICAgICgodWludDE2X3QpMHgwNjAwKSAvKiE8UEdbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QSCAgICAgICAgICgodWludDE2X3QpMHgwNzAwKSAvKiE8UEhbNl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSMl9FWFRJNl9QSSAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAvKiE8UElbNl0gcGluICovDQorLyoqIA0KKyAgKiBAYnJpZWYgICBFWFRJNyBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEEgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEIgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgLyohPFBCWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEMgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgLyohPFBDWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEQgICAgICAgICAoKHVpbnQxNl90KTB4MzAwMCkgLyohPFBEWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEUgICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkgLyohPFBFWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEYgICAgICAgICAoKHVpbnQxNl90KTB4NTAwMCkgLyohPFBGWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEcgICAgICAgICAoKHVpbnQxNl90KTB4NjAwMCkgLyohPFBHWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEggICAgICAgICAoKHVpbnQxNl90KTB4NzAwMCkgLyohPFBIWzddIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjJfRVhUSTdfUEkgICAgICAgICAoKHVpbnQxNl90KTB4ODAwMCkgLyohPFBJWzddIHBpbiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNZU0NGR19FWFRJQ1IzIHJlZ2lzdGVyICAqKioqKioqKioqKioqKiovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJOCAgICAgICAgICAgICgodWludDE2X3QpMHgwMDBGKSAvKiE8RVhUSSA4IGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5ICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwRjApIC8qITxFWFRJIDkgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTEwICAgICAgICAgICAoKHVpbnQxNl90KTB4MEYwMCkgLyohPEVYVEkgMTAgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTExICAgICAgICAgICAoKHVpbnQxNl90KTB4RjAwMCkgLyohPEVYVEkgMTEgY29uZmlndXJhdGlvbiAqLw0KKyAgICAgICAgICAgDQorLyoqIA0KKyAgKiBAYnJpZWYgICBFWFRJOCBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEEgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEIgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgLyohPFBCWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEMgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgLyohPFBDWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEQgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMykgLyohPFBEWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEUgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgLyohPFBFWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEYgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNSkgLyohPFBGWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEcgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNikgLyohPFBHWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEggICAgICAgICAoKHVpbnQxNl90KTB4MDAwNykgLyohPFBIWzhdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSThfUEkgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgLyohPFBJWzhdIHBpbiAqLw0KKy8qKiANCisgICogQGJyaWVmICAgRVhUSTkgY29uZmlndXJhdGlvbiAgDQorICAqLyANCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BBICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITxQQVs5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BCICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApIC8qITxQQls5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BDICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApIC8qITxQQ1s5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BEICAgICAgICAgKCh1aW50MTZfdCkweDAwMzApIC8qITxQRFs5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BFICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApIC8qITxQRVs5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BGICAgICAgICAgKCh1aW50MTZfdCkweDAwNTApIC8qITxQRls5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BHICAgICAgICAgKCh1aW50MTZfdCkweDAwNjApIC8qITxQR1s5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BIICAgICAgICAgKCh1aW50MTZfdCkweDAwNzApIC8qITxQSFs5XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEk5X1BJICAgICAgICAgKCh1aW50MTZfdCkweDAwODApIC8qITxQSVs5XSBwaW4gKi8NCisvKiogDQorICAqIEBicmllZiAgIEVYVEkxMCBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTEwX1BBICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzEwXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMF9QQiAgICAgICAgKCh1aW50MTZfdCkweDAxMDApIC8qITxQQlsxMF0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTBfUEMgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAvKiE8UENbMTBdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTEwX1BEICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkgLyohPFBEWzEwXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMF9QRSAgICAgICAgKCh1aW50MTZfdCkweDA0MDApIC8qITxQRVsxMF0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTBfUEYgICAgICAgICgodWludDE2X3QpMHgwNTAwKSAvKiE8UEZbMTBdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTEwX1BHICAgICAgICAoKHVpbnQxNl90KTB4MDYwMCkgLyohPFBHWzEwXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMF9QSCAgICAgICAgKCh1aW50MTZfdCkweDA3MDApIC8qITxQSFsxMF0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTBfUEkgICAgICAgICgodWludDE2X3QpMHgwODAwKSAvKiE8UElbMTBdIHBpbiAqLw0KKy8qKiANCisgICogQGJyaWVmICAgRVhUSTExIGNvbmZpZ3VyYXRpb24gIA0KKyAgKi8gDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTFfUEEgICAgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8UEFbMTFdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTExX1BCICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgLyohPFBCWzExXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMV9QQyAgICAgICAgKCh1aW50MTZfdCkweDIwMDApIC8qITxQQ1sxMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTFfUEQgICAgICAgICgodWludDE2X3QpMHgzMDAwKSAvKiE8UERbMTFdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTExX1BFICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkgLyohPFBFWzExXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMV9QRiAgICAgICAgKCh1aW50MTZfdCkweDUwMDApIC8qITxQRlsxMV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTFfUEcgICAgICAgICgodWludDE2X3QpMHg2MDAwKSAvKiE8UEdbMTFdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTExX1BIICAgICAgICAoKHVpbnQxNl90KTB4NzAwMCkgLyohPFBIWzExXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMV9QSSAgICAgICAgKCh1aW50MTZfdCkweDgwMDApIC8qITxQSVsxMV0gcGluICovDQorDQorLyoqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgU1lTQ0ZHX0VYVElDUjQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxMiAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEYpIC8qITxFWFRJIDEyIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxMyAgICAgICAgICAgKCh1aW50MTZfdCkweDAwRjApIC8qITxFWFRJIDEzIGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxNCAgICAgICAgICAgKCh1aW50MTZfdCkweDBGMDApIC8qITxFWFRJIDE0IGNvbmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxNSAgICAgICAgICAgKCh1aW50MTZfdCkweEYwMDApIC8qITxFWFRJIDE1IGNvbmZpZ3VyYXRpb24gKi8NCisvKiogDQorICAqIEBicmllZiAgIEVYVEkxMiBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTEyX1BBICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzEyXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxMl9QQiAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpIC8qITxQQlsxMl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTJfUEMgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAvKiE8UENbMTJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTEyX1BEICAgICAgICAoKHVpbnQxNl90KTB4MDAwMykgLyohPFBEWzEyXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxMl9QRSAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpIC8qITxQRVsxMl0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTJfUEYgICAgICAgICgodWludDE2X3QpMHgwMDA1KSAvKiE8UEZbMTJdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTEyX1BHICAgICAgICAoKHVpbnQxNl90KTB4MDAwNikgLyohPFBHWzEyXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxMl9QSCAgICAgICAgKCh1aW50MTZfdCkweDAwMDcpIC8qITxQSFsxMl0gcGluICovDQorLyoqIA0KKyAgKiBAYnJpZWYgICBFWFRJMTMgY29uZmlndXJhdGlvbiAgDQorICAqLyANCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxM19QQSAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITxQQVsxM10gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTNfUEIgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAvKiE8UEJbMTNdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTEzX1BDICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgLyohPFBDWzEzXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxM19QRCAgICAgICAgKCh1aW50MTZfdCkweDAwMzApIC8qITxQRFsxM10gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTNfUEUgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAvKiE8UEVbMTNdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTEzX1BGICAgICAgICAoKHVpbnQxNl90KTB4MDA1MCkgLyohPFBGWzEzXSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxM19QRyAgICAgICAgKCh1aW50MTZfdCkweDAwNjApIC8qITxQR1sxM10gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSM19FWFRJMTNfUEggICAgICAgICgodWludDE2X3QpMHgwMDcwKSAvKiE8UEhbMTNdIHBpbiAqLw0KKy8qKiANCisgICogQGJyaWVmICAgRVhUSTE0IGNvbmZpZ3VyYXRpb24gIA0KKyAgKi8gDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTRfUEEgICAgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8UEFbMTRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTE0X1BCICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgLyohPFBCWzE0XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxNF9QQyAgICAgICAgKCh1aW50MTZfdCkweDAyMDApIC8qITxQQ1sxNF0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTRfUEQgICAgICAgICgodWludDE2X3QpMHgwMzAwKSAvKiE8UERbMTRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTE0X1BFICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgLyohPFBFWzE0XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxNF9QRiAgICAgICAgKCh1aW50MTZfdCkweDA1MDApIC8qITxQRlsxNF0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTRfUEcgICAgICAgICgodWludDE2X3QpMHgwNjAwKSAvKiE8UEdbMTRdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjNfRVhUSTE0X1BIICAgICAgICAoKHVpbnQxNl90KTB4MDcwMCkgLyohPFBIWzE0XSBwaW4gKi8NCisvKiogDQorICAqIEBicmllZiAgIEVYVEkxNSBjb25maWd1cmF0aW9uICANCisgICovIA0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTE1X1BBICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPFBBWzE1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxNV9QQiAgICAgICAgKCh1aW50MTZfdCkweDEwMDApIC8qITxQQlsxNV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTVfUEMgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAvKiE8UENbMTVdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTE1X1BEICAgICAgICAoKHVpbnQxNl90KTB4MzAwMCkgLyohPFBEWzE1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1I0X0VYVEkxNV9QRSAgICAgICAgKCh1aW50MTZfdCkweDQwMDApIC8qITxQRVsxNV0gcGluICovDQorI2RlZmluZSBTWVNDRkdfRVhUSUNSNF9FWFRJMTVfUEYgICAgICAgICgodWludDE2X3QpMHg1MDAwKSAvKiE8UEZbMTVdIHBpbiAqLw0KKyNkZWZpbmUgU1lTQ0ZHX0VYVElDUjRfRVhUSTE1X1BHICAgICAgICAoKHVpbnQxNl90KTB4NjAwMCkgLyohPFBHWzE1XSBwaW4gKi8NCisjZGVmaW5lIFNZU0NGR19FWFRJQ1IzX0VYVEkxNV9QSCAgICAgICAgKCh1aW50MTZfdCkweDcwMDApIC8qITxQSFsxNV0gcGluICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFNZU0NGR19DTVBDUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKi8gIA0KKyNkZWZpbmUgU1lTQ0ZHX0NNUENSX0NNUF9QRCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpIC8qITxDb21wZW5zYXRpb24gY2VsbCByZWFkeSBmbGFnICovDQorI2RlZmluZSBTWVNDRkdfQ01QQ1JfUkVBRFkgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgLyohPENvbXBlbnNhdGlvbiBjZWxsIHBvd2VyLWRvd24gKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQ1IxIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQ1IxX0NFTiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8Q291bnRlciBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fQ1IxX1VESVMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8VXBkYXRlIGRpc2FibGUgKi8NCisjZGVmaW5lICBUSU1fQ1IxX1VSUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8VXBkYXRlIHJlcXVlc3Qgc291cmNlICovDQorI2RlZmluZSAgVElNX0NSMV9PUE0gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPE9uZSBwdWxzZSBtb2RlICovDQorI2RlZmluZSAgVElNX0NSMV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPERpcmVjdGlvbiAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DUjFfQ01TICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDYwKSAgICAgICAgICAgIC8qITxDTVNbMTowXSBiaXRzIChDZW50ZXItYWxpZ25lZCBtb2RlIHNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBUSU1fQ1IxX0NNU18wICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ1IxX0NNU18xICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBUSU1fQ1IxX0FSUEUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8QXV0by1yZWxvYWQgcHJlbG9hZCBlbmFibGUgKi8NCisNCisjZGVmaW5lICBUSU1fQ1IxX0NLRCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkgICAgICAgICAgICAvKiE8Q0tEWzE6MF0gYml0cyAoY2xvY2sgZGl2aXNpb24pICovDQorI2RlZmluZSAgVElNX0NSMV9DS0RfMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NSMV9DS0RfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPEJpdCAxICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQ1IyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQ1IyX0NDUEMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIFByZWxvYWRlZCBDb250cm9sICovDQorI2RlZmluZSAgVElNX0NSMl9DQ1VTICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSBDb250cm9sIFVwZGF0ZSBTZWxlY3Rpb24gKi8NCisjZGVmaW5lICBUSU1fQ1IyX0NDRFMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIERNQSBTZWxlY3Rpb24gKi8NCisNCisjZGVmaW5lICBUSU1fQ1IyX01NUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA3MCkgICAgICAgICAgICAvKiE8TU1TWzI6MF0gYml0cyAoTWFzdGVyIE1vZGUgU2VsZWN0aW9uKSAqLw0KKyNkZWZpbmUgIFRJTV9DUjJfTU1TXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9DUjJfTU1TXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFRJTV9DUjJfTU1TXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DUjJfVEkxUyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxUSTEgU2VsZWN0aW9uICovDQorI2RlZmluZSAgVElNX0NSMl9PSVMxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPE91dHB1dCBJZGxlIHN0YXRlIDEgKE9DMSBvdXRwdXQpICovDQorI2RlZmluZSAgVElNX0NSMl9PSVMxTiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPE91dHB1dCBJZGxlIHN0YXRlIDEgKE9DMU4gb3V0cHV0KSAqLw0KKyNkZWZpbmUgIFRJTV9DUjJfT0lTMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxPdXRwdXQgSWRsZSBzdGF0ZSAyIChPQzIgb3V0cHV0KSAqLw0KKyNkZWZpbmUgIFRJTV9DUjJfT0lTMk4gICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxPdXRwdXQgSWRsZSBzdGF0ZSAyIChPQzJOIG91dHB1dCkgKi8NCisjZGVmaW5lICBUSU1fQ1IyX09JUzMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8T3V0cHV0IElkbGUgc3RhdGUgMyAoT0MzIG91dHB1dCkgKi8NCisjZGVmaW5lICBUSU1fQ1IyX09JUzNOICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgICAgICAgICAgICAvKiE8T3V0cHV0IElkbGUgc3RhdGUgMyAoT0MzTiBvdXRwdXQpICovDQorI2RlZmluZSAgVElNX0NSMl9PSVM0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAgICAgICAgICAgLyohPE91dHB1dCBJZGxlIHN0YXRlIDQgKE9DNCBvdXRwdXQpICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fU01DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fU01DUl9TTVMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNykgICAgICAgICAgICAvKiE8U01TWzI6MF0gYml0cyAoU2xhdmUgbW9kZSBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgVElNX1NNQ1JfU01TXzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX1NNQ1JfU01TXzEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgVElNX1NNQ1JfU01TXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPEJpdCAyICovDQorDQorI2RlZmluZSAgVElNX1NNQ1JfVFMgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNzApICAgICAgICAgICAgLyohPFRTWzI6MF0gYml0cyAoVHJpZ2dlciBzZWxlY3Rpb24pICovDQorI2RlZmluZSAgVElNX1NNQ1JfVFNfMCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX1NNQ1JfVFNfMSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgVElNX1NNQ1JfVFNfMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPEJpdCAyICovDQorDQorI2RlZmluZSAgVElNX1NNQ1JfTVNNICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPE1hc3Rlci9zbGF2ZSBtb2RlICovDQorDQorI2RlZmluZSAgVElNX1NNQ1JfRVRGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDBGMDApICAgICAgICAgICAgLyohPEVURlszOjBdIGJpdHMgKEV4dGVybmFsIHRyaWdnZXIgZmlsdGVyKSAqLw0KKyNkZWZpbmUgIFRJTV9TTUNSX0VURl8wICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9TTUNSX0VURl8xICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFRJTV9TTUNSX0VURl8yICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIFRJTV9TTUNSX0VURl8zICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKyNkZWZpbmUgIFRJTV9TTUNSX0VUUFMgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgzMDAwKSAgICAgICAgICAgIC8qITxFVFBTWzE6MF0gYml0cyAoRXh0ZXJuYWwgdHJpZ2dlciBwcmVzY2FsZXIpICovDQorI2RlZmluZSAgVElNX1NNQ1JfRVRQU18wICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX1NNQ1JfRVRQU18xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApICAgICAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgVElNX1NNQ1JfRUNFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAgICAgICAgICAgLyohPEV4dGVybmFsIGNsb2NrIGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9TTUNSX0VUUCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxFeHRlcm5hbCB0cmlnZ2VyIHBvbGFyaXR5ICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fRElFUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fRElFUl9VSUUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8VXBkYXRlIGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fRElFUl9DQzFJRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDEgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9ESUVSX0NDMklFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMiBpbnRlcnJ1cHQgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0RJRVJfQ0MzSUUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAzIGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fRElFUl9DQzRJRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDQgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9ESUVSX0NPTUlFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxDT00gaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9ESUVSX1RJRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxUcmlnZ2VyIGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fRElFUl9CSUUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8QnJlYWsgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9ESUVSX1VERSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxVcGRhdGUgRE1BIHJlcXVlc3QgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0RJRVJfQ0MxREUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAxIERNQSByZXF1ZXN0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9ESUVSX0NDMkRFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMiBETUEgcmVxdWVzdCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fRElFUl9DQzNERSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDMgRE1BIHJlcXVlc3QgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0RJRVJfQ0M0REUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSA0IERNQSByZXF1ZXN0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9ESUVSX0NPTURFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxDT00gRE1BIHJlcXVlc3QgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0RJRVJfVERFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAgICAgICAgICAgLyohPFRyaWdnZXIgRE1BIHJlcXVlc3QgZW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgVElNX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fU1JfVUlGICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8VXBkYXRlIGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NDMUlGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAxIGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NDMklGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAyIGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NDM0lGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAzIGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NDNElGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSA0IGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NPTUlGICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPENPTSBpbnRlcnJ1cHQgRmxhZyAqLw0KKyNkZWZpbmUgIFRJTV9TUl9USUYgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxUcmlnZ2VyIGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0JJRiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEJyZWFrIGludGVycnVwdCBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NDMU9GICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAxIE92ZXJjYXB0dXJlIEZsYWcgKi8NCisjZGVmaW5lICBUSU1fU1JfQ0MyT0YgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDIgT3ZlcmNhcHR1cmUgRmxhZyAqLw0KKyNkZWZpbmUgIFRJTV9TUl9DQzNPRiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMyBPdmVyY2FwdHVyZSBGbGFnICovDQorI2RlZmluZSAgVElNX1NSX0NDNE9GICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSA0IE92ZXJjYXB0dXJlIEZsYWcgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9FR1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFRJTV9FR1JfVUcgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgICAgICAgICAgICAgIC8qITxVcGRhdGUgR2VuZXJhdGlvbiAqLw0KKyNkZWZpbmUgIFRJTV9FR1JfQ0MxRyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKSAgICAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMSBHZW5lcmF0aW9uICovDQorI2RlZmluZSAgVElNX0VHUl9DQzJHICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAgICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAyIEdlbmVyYXRpb24gKi8NCisjZGVmaW5lICBUSU1fRUdSX0NDM0cgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgICAgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDMgR2VuZXJhdGlvbiAqLw0KKyNkZWZpbmUgIFRJTV9FR1JfQ0M0RyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDEwKSAgICAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgNCBHZW5lcmF0aW9uICovDQorI2RlZmluZSAgVElNX0VHUl9DT01HICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSBDb250cm9sIFVwZGF0ZSBHZW5lcmF0aW9uICovDQorI2RlZmluZSAgVElNX0VHUl9URyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NDApICAgICAgICAgICAgICAgLyohPFRyaWdnZXIgR2VuZXJhdGlvbiAqLw0KKyNkZWZpbmUgIFRJTV9FR1JfQkcgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDgwKSAgICAgICAgICAgICAgIC8qITxCcmVhayBHZW5lcmF0aW9uICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9DQ01SMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfQ0MxUyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMykgICAgICAgICAgICAvKiE8Q0MxU1sxOjBdIGJpdHMgKENhcHR1cmUvQ29tcGFyZSAxIFNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfQ0MxU18wICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfQ0MxU18xICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjFfT0MxRkUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8T3V0cHV0IENvbXBhcmUgMSBGYXN0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMV9PQzFQRSAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxPdXRwdXQgQ29tcGFyZSAxIFByZWxvYWQgZW5hYmxlICovDQorDQorI2RlZmluZSAgVElNX0NDTVIxX09DMU0gICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNzApICAgICAgICAgICAgLyohPE9DMU1bMjowXSBiaXRzIChPdXRwdXQgQ29tcGFyZSAxIE1vZGUpICovDQorI2RlZmluZSAgVElNX0NDTVIxX09DMU1fMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NDTVIxX09DMU1fMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgVElNX0NDTVIxX09DMU1fMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPEJpdCAyICovDQorDQorI2RlZmluZSAgVElNX0NDTVIxX09DMUNFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPE91dHB1dCBDb21wYXJlIDFDbGVhciBFbmFibGUgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjFfQ0MyUyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkgICAgICAgICAgICAvKiE8Q0MyU1sxOjBdIGJpdHMgKENhcHR1cmUvQ29tcGFyZSAyIFNlbGVjdGlvbikgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfQ0MyU18wICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfQ0MyU18xICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjFfT0MyRkUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8T3V0cHV0IENvbXBhcmUgMiBGYXN0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMV9PQzJQRSAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxPdXRwdXQgQ29tcGFyZSAyIFByZWxvYWQgZW5hYmxlICovDQorDQorI2RlZmluZSAgVElNX0NDTVIxX09DMk0gICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDcwMDApICAgICAgICAgICAgLyohPE9DMk1bMjowXSBiaXRzIChPdXRwdXQgQ29tcGFyZSAyIE1vZGUpICovDQorI2RlZmluZSAgVElNX0NDTVIxX09DMk1fMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NDTVIxX09DMk1fMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgVElNX0NDTVIxX09DMk1fMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAgICAgICAgICAgLyohPEJpdCAyICovDQorDQorI2RlZmluZSAgVElNX0NDTVIxX09DMkNFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDgwMDApICAgICAgICAgICAgLyohPE91dHB1dCBDb21wYXJlIDIgQ2xlYXIgRW5hYmxlICovDQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjFfSUMxUFNDICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwQykgICAgICAgICAgICAvKiE8SUMxUFNDWzE6MF0gYml0cyAoSW5wdXQgQ2FwdHVyZSAxIFByZXNjYWxlcikgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfSUMxUFNDXzAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjFfSUMxUFNDXzEgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjFfSUMxRiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBGMCkgICAgICAgICAgICAvKiE8SUMxRlszOjBdIGJpdHMgKElucHV0IENhcHR1cmUgMSBGaWx0ZXIpICovDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMUZfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMUZfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMUZfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMUZfMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEJpdCAzICovDQorDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMlBTQyAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDBDMDApICAgICAgICAgICAgLyohPElDMlBTQ1sxOjBdIGJpdHMgKElucHV0IENhcHR1cmUgMiBQcmVzY2FsZXIpICovDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMlBTQ18wICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMlBTQ18xICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgVElNX0NDTVIxX0lDMkYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEYwMDApICAgICAgICAgICAgLyohPElDMkZbMzowXSBiaXRzIChJbnB1dCBDYXB0dXJlIDIgRmlsdGVyKSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMV9JQzJGXzAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMV9JQzJGXzEgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMV9JQzJGXzIgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMV9JQzJGXzMgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQ0NNUjIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgVElNX0NDTVIyX0NDM1MgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDMpICAgICAgICAgICAgLyohPENDM1NbMTowXSBiaXRzIChDYXB0dXJlL0NvbXBhcmUgMyBTZWxlY3Rpb24pICovDQorI2RlZmluZSAgVElNX0NDTVIyX0NDM1NfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NDTVIyX0NDM1NfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAgICAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgVElNX0NDTVIyX09DM0ZFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPE91dHB1dCBDb21wYXJlIDMgRmFzdCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfT0MzUEUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8T3V0cHV0IENvbXBhcmUgMyBQcmVsb2FkIGVuYWJsZSAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9PQzNNICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDcwKSAgICAgICAgICAgIC8qITxPQzNNWzI6MF0gYml0cyAoT3V0cHV0IENvbXBhcmUgMyBNb2RlKSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9PQzNNXzAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9PQzNNXzEgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9PQzNNXzIgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9PQzNDRSAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxPdXRwdXQgQ29tcGFyZSAzIENsZWFyIEVuYWJsZSAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9DQzRTICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMzAwKSAgICAgICAgICAgIC8qITxDQzRTWzE6MF0gYml0cyAoQ2FwdHVyZS9Db21wYXJlIDQgU2VsZWN0aW9uKSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9DQzRTXzAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9DQzRTXzEgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9PQzRGRSAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxPdXRwdXQgQ29tcGFyZSA0IEZhc3QgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0NDTVIyX09DNFBFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPE91dHB1dCBDb21wYXJlIDQgUHJlbG9hZCBlbmFibGUgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjJfT0M0TSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NzAwMCkgICAgICAgICAgICAvKiE8T0M0TVsyOjBdIGJpdHMgKE91dHB1dCBDb21wYXJlIDQgTW9kZSkgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfT0M0TV8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfT0M0TV8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfT0M0TV8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkgICAgICAgICAgICAvKiE8Qml0IDIgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjJfT0M0Q0UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4ODAwMCkgICAgICAgICAgICAvKiE8T3V0cHV0IENvbXBhcmUgNCBDbGVhciBFbmFibGUgKi8NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9JQzNQU0MgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDBDKSAgICAgICAgICAgIC8qITxJQzNQU0NbMTowXSBiaXRzIChJbnB1dCBDYXB0dXJlIDMgUHJlc2NhbGVyKSAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9JQzNQU0NfMCAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9JQzNQU0NfMSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKyNkZWZpbmUgIFRJTV9DQ01SMl9JQzNGICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMEYwKSAgICAgICAgICAgIC8qITxJQzNGWzM6MF0gYml0cyAoSW5wdXQgQ2FwdHVyZSAzIEZpbHRlcikgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfSUMzRl8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfSUMzRl8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfSUMzRl8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfSUMzRl8zICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8Qml0IDMgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjJfSUM0UFNDICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MEMwMCkgICAgICAgICAgICAvKiE8SUM0UFNDWzE6MF0gYml0cyAoSW5wdXQgQ2FwdHVyZSA0IFByZXNjYWxlcikgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfSUM0UFNDXzAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQ0NNUjJfSUM0UFNDXzEgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBUSU1fQ0NNUjJfSUM0RiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RjAwMCkgICAgICAgICAgICAvKiE8SUM0RlszOjBdIGJpdHMgKElucHV0IENhcHR1cmUgNCBGaWx0ZXIpICovDQorI2RlZmluZSAgVElNX0NDTVIyX0lDNEZfMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgVElNX0NDTVIyX0lDNEZfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApICAgICAgICAgICAgLyohPEJpdCAxICovDQorI2RlZmluZSAgVElNX0NDTVIyX0lDNEZfMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAgICAgICAgICAgLyohPEJpdCAyICovDQorI2RlZmluZSAgVElNX0NDTVIyX0lDNEZfMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDgwMDApICAgICAgICAgICAgLyohPEJpdCAzICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQ0NFUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQ0NFUl9DQzFFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDEgb3V0cHV0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9DQ0VSX0NDMVAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMSBvdXRwdXQgUG9sYXJpdHkgKi8NCisjZGVmaW5lICBUSU1fQ0NFUl9DQzFORSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDEgQ29tcGxlbWVudGFyeSBvdXRwdXQgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0NDRVJfQ0MxTlAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAxIENvbXBsZW1lbnRhcnkgb3V0cHV0IFBvbGFyaXR5ICovDQorI2RlZmluZSAgVElNX0NDRVJfQ0MyRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAyIG91dHB1dCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fQ0NFUl9DQzJQICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDIgb3V0cHV0IFBvbGFyaXR5ICovDQorI2RlZmluZSAgVElNX0NDRVJfQ0MyTkUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAyIENvbXBsZW1lbnRhcnkgb3V0cHV0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9DQ0VSX0NDMk5QICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMiBDb21wbGVtZW50YXJ5IG91dHB1dCBQb2xhcml0eSAqLw0KKyNkZWZpbmUgIFRJTV9DQ0VSX0NDM0UgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMyBvdXRwdXQgZW5hYmxlICovDQorI2RlZmluZSAgVElNX0NDRVJfQ0MzUCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAzIG91dHB1dCBQb2xhcml0eSAqLw0KKyNkZWZpbmUgIFRJTV9DQ0VSX0NDM05FICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMyBDb21wbGVtZW50YXJ5IG91dHB1dCBlbmFibGUgKi8NCisjZGVmaW5lICBUSU1fQ0NFUl9DQzNOUCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDMgQ29tcGxlbWVudGFyeSBvdXRwdXQgUG9sYXJpdHkgKi8NCisjZGVmaW5lICBUSU1fQ0NFUl9DQzRFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDQgb3V0cHV0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9DQ0VSX0NDNFAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgNCBvdXRwdXQgUG9sYXJpdHkgKi8NCisjZGVmaW5lICBUSU1fQ0NFUl9DQzROUCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4ODAwMCkgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDQgQ29tcGxlbWVudGFyeSBvdXRwdXQgUG9sYXJpdHkgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9DTlQgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFRJTV9DTlRfQ05UICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKSAgICAgICAgICAgIC8qITxDb3VudGVyIFZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fUFNDIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fUFNDX1BTQyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8UHJlc2NhbGVyIFZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQVJSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQVJSX0FSUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8YWN0dWFsIGF1dG8tcmVsb2FkIFZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fUkNSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fUkNSX1JFUCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHhGRikgICAgICAgICAgICAgICAvKiE8UmVwZXRpdGlvbiBDb3VudGVyIFZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQ0NSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQ0NSMV9DQ1IxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDEgVmFsdWUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9DQ1IyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFRJTV9DQ1IyX0NDUjIgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRkZGKSAgICAgICAgICAgIC8qITxDYXB0dXJlL0NvbXBhcmUgMiBWYWx1ZSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgVElNX0NDUjMgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgVElNX0NDUjNfQ0NSMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEZGRkYpICAgICAgICAgICAgLyohPENhcHR1cmUvQ29tcGFyZSAzIFZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBUSU1fQ0NSNCByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBUSU1fQ0NSNF9DQ1I0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgICAgICAgICAgICAvKiE8Q2FwdHVyZS9Db21wYXJlIDQgVmFsdWUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9CRFRSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFRJTV9CRFRSX0RURyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMEZGKSAgICAgICAgICAgIC8qITxEVEdbMDo3XSBiaXRzIChEZWFkLVRpbWUgR2VuZXJhdG9yIHNldC11cCkgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgICAgICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8Qml0IDYgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9EVEdfNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8Qml0IDcgKi8NCisNCisjZGVmaW5lICBUSU1fQkRUUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkgICAgICAgICAgICAvKiE8TE9DS1sxOjBdIGJpdHMgKExvY2sgQ29uZmlndXJhdGlvbikgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9MT0NLXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBUSU1fQkRUUl9MT0NLXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBUSU1fQkRUUl9PU1NJICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8T2ZmLVN0YXRlIFNlbGVjdGlvbiBmb3IgSWRsZSBtb2RlICovDQorI2RlZmluZSAgVElNX0JEVFJfT1NTUiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAgICAgICAgICAgLyohPE9mZi1TdGF0ZSBTZWxlY3Rpb24gZm9yIFJ1biBtb2RlICovDQorI2RlZmluZSAgVElNX0JEVFJfQktFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPEJyZWFrIGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9CRFRSX0JLUCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKSAgICAgICAgICAgIC8qITxCcmVhayBQb2xhcml0eSAqLw0KKyNkZWZpbmUgIFRJTV9CRFRSX0FPRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAgICAgICAgICAgIC8qITxBdXRvbWF0aWMgT3V0cHV0IGVuYWJsZSAqLw0KKyNkZWZpbmUgIFRJTV9CRFRSX01PRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxNYWluIE91dHB1dCBlbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9EQ1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJBICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDFGKSAgICAgICAgICAgIC8qITxEQkFbNDowXSBiaXRzIChETUEgQmFzZSBBZGRyZXNzKSAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJBXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJBXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJBXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJBXzMgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJBXzQgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgNCAqLw0KKw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJMICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxRjAwKSAgICAgICAgICAgIC8qITxEQkxbNDowXSBiaXRzIChETUEgQnVyc3QgTGVuZ3RoKSAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJMXzAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJMXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJMXzIgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJMXzMgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIFRJTV9EQ1JfREJMXzQgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKSAgICAgICAgICAgIC8qITxCaXQgNCAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgVElNX0RNQVIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgVElNX0RNQVJfRE1BQiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEZGRkYpICAgICAgICAgICAgLyohPERNQSByZWdpc3RlciBmb3IgYnVyc3QgYWNjZXNzZXMgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFRJTV9PUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgVElNX09SX1RJNF9STVAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMEMwKSAgICAgICAgICAgIC8qITxUSTRfUk1QWzE6MF0gYml0cyAoVElNNSBJbnB1dCA0IHJlbWFwKSAqLw0KKyNkZWZpbmUgVElNX09SX1RJNF9STVBfMCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgVElNX09SX1RJNF9STVBfMSAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgVElNX09SX0lUUjFfUk1QICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwQzAwKSAgICAgICAgICAgIC8qITxJVFIxX1JNUFsxOjBdIGJpdHMgKFRJTTIgSW50ZXJuYWwgdHJpZ2dlciAxIHJlbWFwKSAqLw0KKyNkZWZpbmUgVElNX09SX0lUUjFfUk1QXzAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgVElNX09SX0lUUjFfUk1QXzEgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgIFVuaXZlcnNhbCBTeW5jaHJvbm91cyBBc3luY2hyb25vdXMgUmVjZWl2ZXIgVHJhbnNtaXR0ZXIgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFVTQVJUX1NSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFVTQVJUX1NSX1BFICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxQYXJpdHkgRXJyb3IgKi8NCisjZGVmaW5lICBVU0FSVF9TUl9GRSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgICAgICAgICAgICAvKiE8RnJhbWluZyBFcnJvciAqLw0KKyNkZWZpbmUgIFVTQVJUX1NSX05FICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxOb2lzZSBFcnJvciBGbGFnICovDQorI2RlZmluZSAgVVNBUlRfU1JfT1JFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPE92ZXJSdW4gRXJyb3IgKi8NCisjZGVmaW5lICBVU0FSVF9TUl9JRExFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgICAgICAgICAgICAvKiE8SURMRSBsaW5lIGRldGVjdGVkICovDQorI2RlZmluZSAgVVNBUlRfU1JfUlhORSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPFJlYWQgRGF0YSBSZWdpc3RlciBOb3QgRW1wdHkgKi8NCisjZGVmaW5lICBVU0FSVF9TUl9UQyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgICAgICAgICAgICAvKiE8VHJhbnNtaXNzaW9uIENvbXBsZXRlICovDQorI2RlZmluZSAgVVNBUlRfU1JfVFhFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgRW1wdHkgKi8NCisjZGVmaW5lICBVU0FSVF9TUl9MQkQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8TElOIEJyZWFrIERldGVjdGlvbiBGbGFnICovDQorI2RlZmluZSAgVVNBUlRfU1JfQ1RTICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPENUUyBGbGFnICovDQorDQorLyoqKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBVU0FSVF9EUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBVU0FSVF9EUl9EUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDFGRikgICAgICAgICAgICAvKiE8RGF0YSB2YWx1ZSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKiogIEJpdCBkZWZpbml0aW9uIGZvciBVU0FSVF9CUlIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgVVNBUlRfQlJSX0RJVl9GcmFjdGlvbiAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEYpICAgICAgICAgICAgLyohPEZyYWN0aW9uIG9mIFVTQVJURElWICovDQorI2RlZmluZSAgVVNBUlRfQlJSX0RJVl9NYW50aXNzYSAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEZGRjApICAgICAgICAgICAgLyohPE1hbnRpc3NhIG9mIFVTQVJURElWICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFVTQVJUX0NSMSByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBVU0FSVF9DUjFfU0JLICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8U2VuZCBCcmVhayAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMV9SV1UgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxSZWNlaXZlciB3YWtldXAgKi8NCisjZGVmaW5lICBVU0FSVF9DUjFfUkUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgICAgICAgICAgICAvKiE8UmVjZWl2ZXIgRW5hYmxlICovDQorI2RlZmluZSAgVVNBUlRfQ1IxX1RFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPFRyYW5zbWl0dGVyIEVuYWJsZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMV9JRExFSUUgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxJRExFIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBVU0FSVF9DUjFfUlhORUlFICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8UlhORSBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgVVNBUlRfQ1IxX1RDSUUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPFRyYW5zbWlzc2lvbiBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlICovDQorI2RlZmluZSAgVVNBUlRfQ1IxX1RYRUlFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPFBFIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBVU0FSVF9DUjFfUEVJRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgICAgICAgICAgICAvKiE8UEUgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMV9QUyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxQYXJpdHkgU2VsZWN0aW9uICovDQorI2RlZmluZSAgVVNBUlRfQ1IxX1BDRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApICAgICAgICAgICAgLyohPFBhcml0eSBDb250cm9sIEVuYWJsZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMV9XQUtFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxXYWtldXAgbWV0aG9kICovDQorI2RlZmluZSAgVVNBUlRfQ1IxX00gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAgICAgICAgICAgLyohPFdvcmQgbGVuZ3RoICovDQorI2RlZmluZSAgVVNBUlRfQ1IxX1VFICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApICAgICAgICAgICAgLyohPFVTQVJUIEVuYWJsZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMV9PVkVSOCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgICAgICAgICAgIC8qITxVU0FSVCBPdmVyc2FtcGxpbmcgYnkgOCBlbmFibGUgKi8NCisNCisvKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgVVNBUlRfQ1IyIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMl9BREQgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDBGKSAgICAgICAgICAgIC8qITxBZGRyZXNzIG9mIHRoZSBVU0FSVCBub2RlICovDQorI2RlZmluZSAgVVNBUlRfQ1IyX0xCREwgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApICAgICAgICAgICAgLyohPExJTiBCcmVhayBEZXRlY3Rpb24gTGVuZ3RoICovDQorI2RlZmluZSAgVVNBUlRfQ1IyX0xCRElFICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPExJTiBCcmVhayBEZXRlY3Rpb24gSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMl9MQkNMICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxMYXN0IEJpdCBDbG9jayBwdWxzZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMl9DUEhBICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKSAgICAgICAgICAgIC8qITxDbG9jayBQaGFzZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMl9DUE9MICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKSAgICAgICAgICAgIC8qITxDbG9jayBQb2xhcml0eSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSMl9DTEtFTiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKSAgICAgICAgICAgIC8qITxDbG9jayBFbmFibGUgKi8NCisNCisjZGVmaW5lICBVU0FSVF9DUjJfU1RPUCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MzAwMCkgICAgICAgICAgICAvKiE8U1RPUFsxOjBdIGJpdHMgKFNUT1AgYml0cykgKi8NCisjZGVmaW5lICBVU0FSVF9DUjJfU1RPUF8wICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBVU0FSVF9DUjJfU1RPUF8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisNCisjZGVmaW5lICBVU0FSVF9DUjJfTElORU4gICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkgICAgICAgICAgICAvKiE8TElOIG1vZGUgZW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFVTQVJUX0NSMyByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBVU0FSVF9DUjNfRUlFICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgICAgICAgICAgICAvKiE8RXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSM19JUkVOICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxJckRBIG1vZGUgRW5hYmxlICovDQorI2RlZmluZSAgVVNBUlRfQ1IzX0lSTFAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAgICAgICAgICAgLyohPElyREEgTG93LVBvd2VyICovDQorI2RlZmluZSAgVVNBUlRfQ1IzX0hEU0VMICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpICAgICAgICAgICAgLyohPEhhbGYtRHVwbGV4IFNlbGVjdGlvbiAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSM19OQUNLICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxTbWFydGNhcmQgTkFDSyBlbmFibGUgKi8NCisjZGVmaW5lICBVU0FSVF9DUjNfU0NFTiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgICAgICAgICAgICAvKiE8U21hcnRjYXJkIG1vZGUgZW5hYmxlICovDQorI2RlZmluZSAgVVNBUlRfQ1IzX0RNQVIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApICAgICAgICAgICAgLyohPERNQSBFbmFibGUgUmVjZWl2ZXIgKi8NCisjZGVmaW5lICBVU0FSVF9DUjNfRE1BVCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgICAgICAgICAgICAvKiE8RE1BIEVuYWJsZSBUcmFuc21pdHRlciAqLw0KKyNkZWZpbmUgIFVTQVJUX0NSM19SVFNFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKSAgICAgICAgICAgIC8qITxSVFMgRW5hYmxlICovDQorI2RlZmluZSAgVVNBUlRfQ1IzX0NUU0UgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPENUUyBFbmFibGUgKi8NCisjZGVmaW5lICBVU0FSVF9DUjNfQ1RTSUUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgICAgICAgICAgICAvKiE8Q1RTIEludGVycnVwdCBFbmFibGUgKi8NCisjZGVmaW5lICBVU0FSVF9DUjNfT05FQklUICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkgICAgICAgICAgICAvKiE8VVNBUlQgT25lIGJpdCBtZXRob2QgZW5hYmxlICovDQorDQorLyoqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFVTQVJUX0dUUFIgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKi8NCisjZGVmaW5lICBVU0FSVF9HVFBSX1BTQyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBGRikgICAgICAgICAgICAvKiE8UFNDWzc6MF0gYml0cyAoUHJlc2NhbGVyIHZhbHVlKSAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzEgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzIgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzMgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzQgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzUgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzYgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxCaXQgNiAqLw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfUFNDXzcgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKSAgICAgICAgICAgIC8qITxCaXQgNyAqLw0KKw0KKyNkZWZpbmUgIFVTQVJUX0dUUFJfR1QgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhGRjAwKSAgICAgICAgICAgIC8qITxHdWFyZCB0aW1lIHZhbHVlICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyBXQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgV1dER19DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgV1dER19DUl9UICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4N0YpICAgICAgICAgICAgICAgLyohPFRbNjowXSBiaXRzICg3LUJpdCBjb3VudGVyIChNU0IgdG8gTFNCKSkgKi8NCisjZGVmaW5lICBXV0RHX0NSX1QwICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgICAgICAgICAgICAgICAvKiE8Qml0IDAgKi8NCisjZGVmaW5lICBXV0RHX0NSX1QxICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgICAgICAgICAgICAgICAvKiE8Qml0IDEgKi8NCisjZGVmaW5lICBXV0RHX0NSX1QyICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgICAgICAgICAgICAgICAvKiE8Qml0IDIgKi8NCisjZGVmaW5lICBXV0RHX0NSX1QzICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgICAgICAgICAgICAgICAvKiE8Qml0IDMgKi8NCisjZGVmaW5lICBXV0RHX0NSX1Q0ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxMCkgICAgICAgICAgICAgICAvKiE8Qml0IDQgKi8NCisjZGVmaW5lICBXV0RHX0NSX1Q1ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgyMCkgICAgICAgICAgICAgICAvKiE8Qml0IDUgKi8NCisjZGVmaW5lICBXV0RHX0NSX1Q2ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg0MCkgICAgICAgICAgICAgICAvKiE8Qml0IDYgKi8NCisNCisjZGVmaW5lICBXV0RHX0NSX1dER0EgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg4MCkgICAgICAgICAgICAgICAvKiE8QWN0aXZhdGlvbiBiaXQgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFdXREdfQ0ZSIHJlZ2lzdGVyICAqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1cgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDdGKSAgICAgICAgICAgIC8qITxXWzY6MF0gYml0cyAoNy1iaXQgd2luZG93IHZhbHVlKSAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1cwICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgICAgICAgICAgIC8qITxCaXQgMCAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1cxICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKSAgICAgICAgICAgIC8qITxCaXQgMSAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1cyICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAgICAgICAgICAgIC8qITxCaXQgMiAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1czICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgICAgICAgICAgIC8qITxCaXQgMyAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1c0ICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKSAgICAgICAgICAgIC8qITxCaXQgNCAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1c1ICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKSAgICAgICAgICAgIC8qITxCaXQgNSAqLw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1c2ICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAgICAgICAgICAgIC8qITxCaXQgNiAqLw0KKw0KKyNkZWZpbmUgIFdXREdfQ0ZSX1dER1RCICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTgwKSAgICAgICAgICAgIC8qITxXREdUQlsxOjBdIGJpdHMgKFRpbWVyIEJhc2UpICovDQorI2RlZmluZSAgV1dER19DRlJfV0RHVEIwICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApICAgICAgICAgICAgLyohPEJpdCAwICovDQorI2RlZmluZSAgV1dER19DRlJfV0RHVEIxICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApICAgICAgICAgICAgLyohPEJpdCAxICovDQorDQorI2RlZmluZSAgV1dER19DRlJfRVdJICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApICAgICAgICAgICAgLyohPEVhcmx5IFdha2V1cCBJbnRlcnJ1cHQgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIFdXREdfU1IgcmVnaXN0ZXIgICoqKioqKioqKioqKioqKioqKioqLw0KKyNkZWZpbmUgIFdXREdfU1JfRVdJRiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgICAgICAgICAgICAgIC8qITxFYXJseSBXYWtldXAgSW50ZXJydXB0IEZsYWcgKi8NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqICBCaXQgZGVmaW5pdGlvbiBmb3IgREJHTUNVX0lEQ09ERSByZWdpc3RlciAgKioqKioqKioqKioqKi8NCisjZGVmaW5lICBEQkdNQ1VfSURDT0RFX0RFVl9JRCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBGRkYpDQorI2RlZmluZSAgREJHTUNVX0lEQ09ERV9SRVZfSUQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkYwMDAwKQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERCR01DVV9DUiByZWdpc3RlciAgKioqKioqKioqKioqKioqKiovDQorI2RlZmluZSAgREJHTUNVX0NSX0RCR19TTEVFUCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIERCR01DVV9DUl9EQkdfU1RPUCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBEQkdNQ1VfQ1JfREJHX1NUQU5EQlkgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSAgREJHTUNVX0NSX1RSQUNFX0lPRU4gICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKw0KKyNkZWZpbmUgIERCR01DVV9DUl9UUkFDRV9NT0RFICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDBDMCkNCisjZGVmaW5lICBEQkdNQ1VfQ1JfVFJBQ0VfTU9ERV8wICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApLyohPEJpdCAwICovDQorI2RlZmluZSAgREJHTUNVX0NSX1RSQUNFX01PREVfMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKS8qITxCaXQgMSAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERCR01DVV9BUEIxX0ZaIHJlZ2lzdGVyICAqKioqKioqKioqKiovDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX1RJTTJfU1RPUCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfVElNM19TVE9QICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19USU00X1NUT1AgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX1RJTTVfU1RPUCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfVElNNl9TVE9QICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19USU03X1NUT1AgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX1RJTTEyX1NUT1AgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfVElNMTNfU1RPUCAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19USU0xNF9TVE9QICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX1JUQ19TVE9QICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfV1dER19TVE9QICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19JV0RHX1NUT1AgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX0kyQzFfU01CVVNfVElNRU9VVCAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfSTJDMl9TTUJVU19USU1FT1VUICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19JMkMzX1NNQlVTX1RJTUVPVVQgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX0NBTjFfU1RPUCAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfQ0FOMl9TVE9QICAgICAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKy8qIE9sZCBJV0RHU1RPUCBiaXQgZGVmaW5pdGlvbiwgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UgKi8NCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfSVdERUdfU1RPUCAgICAgICAgICAgREJHTUNVX0FQQjFfRlpfREJHX0lXREdfU1RPUA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKiAgQml0IGRlZmluaXRpb24gZm9yIERCR01DVV9BUEIyX0ZaIHJlZ2lzdGVyICAqKioqKioqKioqKiovDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX1RJTTFfU1RPUCAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19USU04X1NUT1AgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lICBEQkdNQ1VfQVBCMV9GWl9EQkdfVElNOV9TVE9QICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSAgREJHTUNVX0FQQjFfRlpfREJHX1RJTTEwX1NUT1AgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgIERCR01DVV9BUEIxX0ZaX0RCR19USU0xMV9TVE9QICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgRXRoZXJuZXQgTUFDIFJlZ2lzdGVycyBiaXRzIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1BQyBDb250cm9sIFJlZ2lzdGVyIHJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTUFDQ1JfV0QgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAvKiBXYXRjaGRvZyBkaXNhYmxlICovDQorI2RlZmluZSBFVEhfTUFDQ1JfSkQgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApICAvKiBKYWJiZXIgZGlzYWJsZSAqLw0KKyNkZWZpbmUgRVRIX01BQ0NSX0lGRyAgICAgKCh1aW50MzJfdCkweDAwMEUwMDAwKSAgLyogSW50ZXItZnJhbWUgZ2FwICovDQorI2RlZmluZSBFVEhfTUFDQ1JfSUZHXzk2Qml0ICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiBNaW5pbXVtIElGRyBiZXR3ZWVuIGZyYW1lcyBkdXJpbmcgdHJhbnNtaXNzaW9uIGlzIDk2Qml0ICovDQorICAjZGVmaW5lIEVUSF9NQUNDUl9JRkdfODhCaXQgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgIC8qIE1pbmltdW0gSUZHIGJldHdlZW4gZnJhbWVzIGR1cmluZyB0cmFuc21pc3Npb24gaXMgODhCaXQgKi8NCisgICNkZWZpbmUgRVRIX01BQ0NSX0lGR184MEJpdCAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgLyogTWluaW11bSBJRkcgYmV0d2VlbiBmcmFtZXMgZHVyaW5nIHRyYW5zbWlzc2lvbiBpcyA4MEJpdCAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQ1JfSUZHXzcyQml0ICAgICAoKHVpbnQzMl90KTB4MDAwNjAwMDApICAvKiBNaW5pbXVtIElGRyBiZXR3ZWVuIGZyYW1lcyBkdXJpbmcgdHJhbnNtaXNzaW9uIGlzIDcyQml0ICovDQorICAjZGVmaW5lIEVUSF9NQUNDUl9JRkdfNjRCaXQgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkgIC8qIE1pbmltdW0gSUZHIGJldHdlZW4gZnJhbWVzIGR1cmluZyB0cmFuc21pc3Npb24gaXMgNjRCaXQgKi8gICAgICAgIA0KKyAgI2RlZmluZSBFVEhfTUFDQ1JfSUZHXzU2Qml0ICAgICAoKHVpbnQzMl90KTB4MDAwQTAwMDApICAvKiBNaW5pbXVtIElGRyBiZXR3ZWVuIGZyYW1lcyBkdXJpbmcgdHJhbnNtaXNzaW9uIGlzIDU2Qml0ICovDQorICAjZGVmaW5lIEVUSF9NQUNDUl9JRkdfNDhCaXQgICAgICgodWludDMyX3QpMHgwMDBDMDAwMCkgIC8qIE1pbmltdW0gSUZHIGJldHdlZW4gZnJhbWVzIGR1cmluZyB0cmFuc21pc3Npb24gaXMgNDhCaXQgKi8NCisgICNkZWZpbmUgRVRIX01BQ0NSX0lGR180MEJpdCAgICAgKCh1aW50MzJfdCkweDAwMEUwMDAwKSAgLyogTWluaW11bSBJRkcgYmV0d2VlbiBmcmFtZXMgZHVyaW5nIHRyYW5zbWlzc2lvbiBpcyA0MEJpdCAqLyAgICAgICAgICAgICAgDQorI2RlZmluZSBFVEhfTUFDQ1JfQ1NEICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAvKiBDYXJyaWVyIHNlbnNlIGRpc2FibGUgKGR1cmluZyB0cmFuc21pc3Npb24pICovDQorI2RlZmluZSBFVEhfTUFDQ1JfRkVTICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAvKiBGYXN0IGV0aGVybmV0IHNwZWVkICovDQorI2RlZmluZSBFVEhfTUFDQ1JfUk9EICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAvKiBSZWNlaXZlIG93biBkaXNhYmxlICovDQorI2RlZmluZSBFVEhfTUFDQ1JfTE0gICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApICAvKiBsb29wYmFjayBtb2RlICovDQorI2RlZmluZSBFVEhfTUFDQ1JfRE0gICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAvKiBEdXBsZXggbW9kZSAqLw0KKyNkZWZpbmUgRVRIX01BQ0NSX0lQQ08gICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgLyogSVAgQ2hlY2tzdW0gb2ZmbG9hZCAqLw0KKyNkZWZpbmUgRVRIX01BQ0NSX1JEICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgLyogUmV0cnkgZGlzYWJsZSAqLw0KKyNkZWZpbmUgRVRIX01BQ0NSX0FQQ1MgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgLyogQXV0b21hdGljIFBhZC9DUkMgc3RyaXBwaW5nICovDQorI2RlZmluZSBFVEhfTUFDQ1JfQkwgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNjApICAvKiBCYWNrLW9mZiBsaW1pdDogcmFuZG9tIGludGVnZXIgbnVtYmVyIChyKSBvZiBzbG90IHRpbWUgZGVsYXlzIGJlZm9yZSByZXNjaGVkdWxpbmcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB0cmFuc21pc3Npb24gYXR0ZW1wdCBkdXJpbmcgcmV0cmllcyBhZnRlciBhIGNvbGxpc2lvbjogMCA9PCByIDwyXmsgKi8NCisgICNkZWZpbmUgRVRIX01BQ0NSX0JMXzEwICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgIC8qIGsgPSBtaW4gKG4sIDEwKSAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQ1JfQkxfOCAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgLyogayA9IG1pbiAobiwgOCkgKi8NCisgICNkZWZpbmUgRVRIX01BQ0NSX0JMXzQgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIGsgPSBtaW4gKG4sIDQpICovDQorICAjZGVmaW5lIEVUSF9NQUNDUl9CTF8xICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNjApICAvKiBrID0gbWluIChuLCAxKSAqLyANCisjZGVmaW5lIEVUSF9NQUNDUl9EQyAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgIC8qIERlZmZlcmFsIGNoZWNrICovDQorI2RlZmluZSBFVEhfTUFDQ1JfVEUgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAvKiBUcmFuc21pdHRlciBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9NQUNDUl9SRSAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgIC8qIFJlY2VpdmVyIGVuYWJsZSAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgRnJhbWUgRmlsdGVyIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTUFDRkZSX1JBICAgICAoKHVpbnQzMl90KTB4ODAwMDAwMDApICAvKiBSZWNlaXZlIGFsbCAqLyANCisjZGVmaW5lIEVUSF9NQUNGRlJfSFBGICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgIC8qIEhhc2ggb3IgcGVyZmVjdCBmaWx0ZXIgKi8gDQorI2RlZmluZSBFVEhfTUFDRkZSX1NBRiAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAvKiBTb3VyY2UgYWRkcmVzcyBmaWx0ZXIgZW5hYmxlICovIA0KKyNkZWZpbmUgRVRIX01BQ0ZGUl9TQUlGICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgLyogU0EgaW52ZXJzZSBmaWx0ZXJpbmcgKi8gDQorI2RlZmluZSBFVEhfTUFDRkZSX1BDRiAgICAoKHVpbnQzMl90KTB4MDAwMDAwQzApICAvKiBQYXNzIGNvbnRyb2wgZnJhbWVzOiAzIGNhc2VzICovDQorICAjZGVmaW5lIEVUSF9NQUNGRlJfUENGX0Jsb2NrQWxsICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIE1BQyBmaWx0ZXJzIGFsbCBjb250cm9sIGZyYW1lcyBmcm9tIHJlYWNoaW5nIHRoZSBhcHBsaWNhdGlvbiAqLw0KKyAgI2RlZmluZSBFVEhfTUFDRkZSX1BDRl9Gb3J3YXJkQWxsICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAvKiBNQUMgZm9yd2FyZHMgYWxsIGNvbnRyb2wgZnJhbWVzIHRvIGFwcGxpY2F0aW9uIGV2ZW4gaWYgdGhleSBmYWlsIHRoZSBBZGRyZXNzIEZpbHRlciAqLw0KKyAgI2RlZmluZSBFVEhfTUFDRkZSX1BDRl9Gb3J3YXJkUGFzc2VkQWRkckZpbHRlciAoKHVpbnQzMl90KTB4MDAwMDAwQzApICAvKiBNQUMgZm9yd2FyZHMgY29udHJvbCBmcmFtZXMgdGhhdCBwYXNzIHRoZSBBZGRyZXNzIEZpbHRlci4gKi8gDQorI2RlZmluZSBFVEhfTUFDRkZSX0JGRCAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAvKiBCcm9hZGNhc3QgZnJhbWUgZGlzYWJsZSAqLyANCisjZGVmaW5lIEVUSF9NQUNGRlJfUEFNICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgIC8qIFBhc3MgYWxsIG11dGxpY2FzdCAqLyANCisjZGVmaW5lIEVUSF9NQUNGRlJfREFJRiAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIERBIEludmVyc2UgZmlsdGVyaW5nICovIA0KKyNkZWZpbmUgRVRIX01BQ0ZGUl9ITSAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgLyogSGFzaCBtdWx0aWNhc3QgKi8gDQorI2RlZmluZSBFVEhfTUFDRkZSX0hVICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiBIYXNoIHVuaWNhc3QgKi8NCisjZGVmaW5lIEVUSF9NQUNGRlJfUE0gICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgIC8qIFByb21pc2N1b3VzIG1vZGUgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIEhhc2ggVGFibGUgSGlnaCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0hUSFJfSFRIICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogSGFzaCB0YWJsZSBoaWdoICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1BQyBIYXNoIFRhYmxlIExvdyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0hUTFJfSFRMICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogSGFzaCB0YWJsZSBsb3cgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIE1JSSBBZGRyZXNzIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTUFDTUlJQVJfUEEgICAoKHVpbnQzMl90KTB4MDAwMEY4MDApICAvKiBQaHlzaWNhbCBsYXllciBhZGRyZXNzICovIA0KKyNkZWZpbmUgRVRIX01BQ01JSUFSX01SICAgKCh1aW50MzJfdCkweDAwMDAwN0MwKSAgLyogTUlJIHJlZ2lzdGVyIGluIHRoZSBzZWxlY3RlZCBQSFkgKi8gDQorI2RlZmluZSBFVEhfTUFDTUlJQVJfQ1IgICAoKHVpbnQzMl90KTB4MDAwMDAwMUMpICAvKiBDUiBjbG9jayByYW5nZTogNiBjYXNlcyAqLyANCisgICNkZWZpbmUgRVRIX01BQ01JSUFSX0NSX0RpdjQyICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSAgLyogSENMSzo2MC0xMDAgTUh6OyBNREMgY2xvY2s9IEhDTEsvNDIgKi8NCisgICNkZWZpbmUgRVRIX01BQ01JSUFSX0NSX0RpdjYyICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgLyogSENMSzoxMDAtMTIwIE1IejsgTURDIGNsb2NrPSBIQ0xLLzYyICovDQorICAjZGVmaW5lIEVUSF9NQUNNSUlBUl9DUl9EaXYxNiAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIEhDTEs6MjAtMzUgTUh6OyBNREMgY2xvY2s9IEhDTEsvMTYgKi8NCisgICNkZWZpbmUgRVRIX01BQ01JSUFSX0NSX0RpdjI2ICAgKCh1aW50MzJfdCkweDAwMDAwMDBDKSAgLyogSENMSzozNS02MCBNSHo7IE1EQyBjbG9jaz0gSENMSy80MiAqLyAgDQorI2RlZmluZSBFVEhfTUFDTUlJQVJfTVcgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiBNSUkgd3JpdGUgKi8gDQorI2RlZmluZSBFVEhfTUFDTUlJQVJfTUIgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBNSUkgYnVzeSAqLyANCisgIA0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgTUlJIERhdGEgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NQUNNSUlEUl9NRCAgICgodWludDMyX3QpMHgwMDAwRkZGRikgIC8qIE1JSSBkYXRhOiByZWFkL3dyaXRlIGRhdGEgZnJvbS90byBQSFkgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIEZsb3cgQ29udHJvbCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0ZDUl9QVCAgICAgKCh1aW50MzJfdCkweEZGRkYwMDAwKSAgLyogUGF1c2UgdGltZSAqLw0KKyNkZWZpbmUgRVRIX01BQ0ZDUl9aUVBEICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgLyogWmVyby1xdWFudGEgcGF1c2UgZGlzYWJsZSAqLw0KKyNkZWZpbmUgRVRIX01BQ0ZDUl9QTFQgICAgKCh1aW50MzJfdCkweDAwMDAwMDMwKSAgLyogUGF1c2UgbG93IHRocmVzaG9sZDogNCBjYXNlcyAqLw0KKyAgI2RlZmluZSBFVEhfTUFDRkNSX1BMVF9NaW51czQgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiBQYXVzZSB0aW1lIG1pbnVzIDQgc2xvdCB0aW1lcyAqLw0KKyAgI2RlZmluZSBFVEhfTUFDRkNSX1BMVF9NaW51czI4ICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAvKiBQYXVzZSB0aW1lIG1pbnVzIDI4IHNsb3QgdGltZXMgKi8NCisgICNkZWZpbmUgRVRIX01BQ0ZDUl9QTFRfTWludXMxNDQgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgLyogUGF1c2UgdGltZSBtaW51cyAxNDQgc2xvdCB0aW1lcyAqLw0KKyAgI2RlZmluZSBFVEhfTUFDRkNSX1BMVF9NaW51czI1NiAoKHVpbnQzMl90KTB4MDAwMDAwMzApICAvKiBQYXVzZSB0aW1lIG1pbnVzIDI1NiBzbG90IHRpbWVzICovICAgICAgDQorI2RlZmluZSBFVEhfTUFDRkNSX1VQRkQgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpICAvKiBVbmljYXN0IHBhdXNlIGZyYW1lIGRldGVjdCAqLw0KKyNkZWZpbmUgRVRIX01BQ0ZDUl9SRkNFICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgLyogUmVjZWl2ZSBmbG93IGNvbnRyb2wgZW5hYmxlICovDQorI2RlZmluZSBFVEhfTUFDRkNSX1RGQ0UgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiBUcmFuc21pdCBmbG93IGNvbnRyb2wgZW5hYmxlICovDQorI2RlZmluZSBFVEhfTUFDRkNSX0ZDQkJQQSAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBGbG93IGNvbnRyb2wgYnVzeS9iYWNrcHJlc3N1cmUgYWN0aXZhdGUgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIFZMQU4gVGFnIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTUFDVkxBTlRSX1ZMQU5UQyAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAvKiAxMi1iaXQgVkxBTiB0YWcgY29tcGFyaXNvbiAqLw0KKyNkZWZpbmUgRVRIX01BQ1ZMQU5UUl9WTEFOVEkgKCh1aW50MzJfdCkweDAwMDBGRkZGKSAgLyogVkxBTiB0YWcgaWRlbnRpZmllciAoZm9yIHJlY2VpdmUgZnJhbWVzKSAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgUmVtb3RlIFdha2UtVXBGcmFtZSBGaWx0ZXIgUmVnaXN0ZXIgKi8gDQorI2RlZmluZSBFVEhfTUFDUldVRkZSX0QgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAvKiBXYWtlLXVwIGZyYW1lIGZpbHRlciByZWdpc3RlciBkYXRhICovDQorLyogRWlnaHQgc2VxdWVudGlhbCBXcml0ZXMgdG8gdGhpcyBhZGRyZXNzIChvZmZzZXQgMHgyOCkgd2lsbCB3cml0ZSBhbGwgV2FrZS1VcEZyYW1lIEZpbHRlciBSZWdpc3RlcnMuDQorICAgRWlnaHQgc2VxdWVudGlhbCBSZWFkcyBmcm9tIHRoaXMgYWRkcmVzcyAob2Zmc2V0IDB4MjgpIHdpbGwgcmVhZCBhbGwgV2FrZS1VcEZyYW1lIEZpbHRlciBSZWdpc3RlcnMuICovDQorLyogV2FrZS1VcEZyYW1lIEZpbHRlciBSZWcwIDogRmlsdGVyIDAgQnl0ZSBNYXNrDQorICAgV2FrZS1VcEZyYW1lIEZpbHRlciBSZWcxIDogRmlsdGVyIDEgQnl0ZSBNYXNrDQorICAgV2FrZS1VcEZyYW1lIEZpbHRlciBSZWcyIDogRmlsdGVyIDIgQnl0ZSBNYXNrDQorICAgV2FrZS1VcEZyYW1lIEZpbHRlciBSZWczIDogRmlsdGVyIDMgQnl0ZSBNYXNrDQorICAgV2FrZS1VcEZyYW1lIEZpbHRlciBSZWc0IDogUlNWRCAtIEZpbHRlcjMgQ29tbWFuZCAtIFJTVkQgLSBGaWx0ZXIyIENvbW1hbmQgLSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU1ZEIC0gRmlsdGVyMSBDb21tYW5kIC0gUlNWRCAtIEZpbHRlcjAgQ29tbWFuZA0KKyAgIFdha2UtVXBGcmFtZSBGaWx0ZXIgUmU1IDogRmlsdGVyMyBPZmZzZXQgLSBGaWx0ZXIyIE9mZnNldCAtIEZpbHRlcjEgT2Zmc2V0IC0gRmlsdGVyMCBPZmZzZXQNCisgICBXYWtlLVVwRnJhbWUgRmlsdGVyIFJlNiA6IEZpbHRlcjEgQ1JDMTYgLSBGaWx0ZXIwIENSQzE2DQorICAgV2FrZS1VcEZyYW1lIEZpbHRlciBSZTcgOiBGaWx0ZXIzIENSQzE2IC0gRmlsdGVyMiBDUkMxNiAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgUE1UIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLyANCisjZGVmaW5lIEVUSF9NQUNQTVRDU1JfV0ZGUlBSICgodWludDMyX3QpMHg4MDAwMDAwMCkgIC8qIFdha2UtVXAgRnJhbWUgRmlsdGVyIFJlZ2lzdGVyIFBvaW50ZXIgUmVzZXQgKi8NCisjZGVmaW5lIEVUSF9NQUNQTVRDU1JfR1UgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgIC8qIEdsb2JhbCBVbmljYXN0ICovDQorI2RlZmluZSBFVEhfTUFDUE1UQ1NSX1dGUiAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAvKiBXYWtlLVVwIEZyYW1lIFJlY2VpdmVkICovDQorI2RlZmluZSBFVEhfTUFDUE1UQ1NSX01QUiAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAvKiBNYWdpYyBQYWNrZXQgUmVjZWl2ZWQgKi8NCisjZGVmaW5lIEVUSF9NQUNQTVRDU1JfV0ZFICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgIC8qIFdha2UtVXAgRnJhbWUgRW5hYmxlICovDQorI2RlZmluZSBFVEhfTUFDUE1UQ1NSX01QRSAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiBNYWdpYyBQYWNrZXQgRW5hYmxlICovDQorI2RlZmluZSBFVEhfTUFDUE1UQ1NSX1BEICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBQb3dlciBEb3duICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1BQyBTdGF0dXMgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NQUNTUl9UU1RTICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgLyogVGltZSBzdGFtcCB0cmlnZ2VyIHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX01BQ1NSX01NQ1RTICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApICAvKiBNTUMgdHJhbnNtaXQgc3RhdHVzICovDQorI2RlZmluZSBFVEhfTUFDU1JfTU1NQ1JTICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgIC8qIE1NQyByZWNlaXZlIHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX01BQ1NSX01NQ1MgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAvKiBNTUMgc3RhdHVzICovDQorI2RlZmluZSBFVEhfTUFDU1JfUE1UUyAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIFBNVCBzdGF0dXMgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTUFDSU1SX1RTVElNICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAvKiBUaW1lIHN0YW1wIHRyaWdnZXIgaW50ZXJydXB0IG1hc2sgKi8NCisjZGVmaW5lIEVUSF9NQUNJTVJfUE1USU0gICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIFBNVCBpbnRlcnJ1cHQgbWFzayAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgQWRkcmVzczAgSGlnaCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0EwSFJfTUFDQTBIICAgKCh1aW50MzJfdCkweDAwMDBGRkZGKSAgLyogTUFDIGFkZHJlc3MwIGhpZ2ggKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIEFkZHJlc3MwIExvdyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0EwTFJfTUFDQTBMICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogTUFDIGFkZHJlc3MwIGxvdyAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgQWRkcmVzczEgSGlnaCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0ExSFJfQUUgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgLyogQWRkcmVzcyBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9NQUNBMUhSX1NBICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgIC8qIFNvdXJjZSBhZGRyZXNzICovDQorI2RlZmluZSBFVEhfTUFDQTFIUl9NQkMgICAgICAoKHVpbnQzMl90KTB4M0YwMDAwMDApICAvKiBNYXNrIGJ5dGUgY29udHJvbDogYml0cyB0byBtYXNrIGZvciBjb21wYXJpc29uIG9mIHRoZSBNQUMgQWRkcmVzcyBieXRlcyAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTFIUl9NQkNfSEJpdHMxNV84ICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgaGlnaCByZWcgYml0cyBbMTU6OF0gKi8NCisgICNkZWZpbmUgRVRIX01BQ0ExSFJfTUJDX0hCaXRzN18wICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGhpZ2ggcmVnIGJpdHMgWzc6MF0gKi8NCisgICNkZWZpbmUgRVRIX01BQ0ExSFJfTUJDX0xCaXRzMzFfMjQgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGxvdyByZWcgYml0cyBbMzE6MjRdICovDQorICAjZGVmaW5lIEVUSF9NQUNBMUhSX01CQ19MQml0czIzXzE2ICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgLyogTWFzayBNQUMgQWRkcmVzcyBsb3cgcmVnIGJpdHMgWzIzOjE2XSAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTFIUl9NQkNfTEJpdHMxNV84ICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgbG93IHJlZyBiaXRzIFsxNTo4XSAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTFIUl9NQkNfTEJpdHM3XzAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgbG93IHJlZyBiaXRzIFs3OjBdICovIA0KKyNkZWZpbmUgRVRIX01BQ0ExSFJfTUFDQTFIICAgKCh1aW50MzJfdCkweDAwMDBGRkZGKSAgLyogTUFDIGFkZHJlc3MxIGhpZ2ggKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIEFkZHJlc3MxIExvdyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0ExTFJfTUFDQTFMICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogTUFDIGFkZHJlc3MxIGxvdyAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgQWRkcmVzczIgSGlnaCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01BQ0EySFJfQUUgICAgICAgKCh1aW50MzJfdCkweDgwMDAwMDAwKSAgLyogQWRkcmVzcyBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9NQUNBMkhSX1NBICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkgIC8qIFNvdXJjZSBhZGRyZXNzICovDQorI2RlZmluZSBFVEhfTUFDQTJIUl9NQkMgICAgICAoKHVpbnQzMl90KTB4M0YwMDAwMDApICAvKiBNYXNrIGJ5dGUgY29udHJvbCAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTJIUl9NQkNfSEJpdHMxNV84ICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgaGlnaCByZWcgYml0cyBbMTU6OF0gKi8NCisgICNkZWZpbmUgRVRIX01BQ0EySFJfTUJDX0hCaXRzN18wICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGhpZ2ggcmVnIGJpdHMgWzc6MF0gKi8NCisgICNkZWZpbmUgRVRIX01BQ0EySFJfTUJDX0xCaXRzMzFfMjQgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGxvdyByZWcgYml0cyBbMzE6MjRdICovDQorICAjZGVmaW5lIEVUSF9NQUNBMkhSX01CQ19MQml0czIzXzE2ICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKSAgLyogTWFzayBNQUMgQWRkcmVzcyBsb3cgcmVnIGJpdHMgWzIzOjE2XSAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTJIUl9NQkNfTEJpdHMxNV84ICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgbG93IHJlZyBiaXRzIFsxNTo4XSAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTJIUl9NQkNfTEJpdHM3XzAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgbG93IHJlZyBiaXRzIFs3MF0gKi8NCisjZGVmaW5lIEVUSF9NQUNBMkhSX01BQ0EySCAgICgodWludDMyX3QpMHgwMDAwRkZGRikgIC8qIE1BQyBhZGRyZXNzMSBoaWdoICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1BQyBBZGRyZXNzMiBMb3cgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NQUNBMkxSX01BQ0EyTCAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIE1BQyBhZGRyZXNzMiBsb3cgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTUFDIEFkZHJlc3MzIEhpZ2ggUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NQUNBM0hSX0FFICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgIC8qIEFkZHJlc3MgZW5hYmxlICovDQorI2RlZmluZSBFVEhfTUFDQTNIUl9TQSAgICAgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApICAvKiBTb3VyY2UgYWRkcmVzcyAqLw0KKyNkZWZpbmUgRVRIX01BQ0EzSFJfTUJDICAgICAgKCh1aW50MzJfdCkweDNGMDAwMDAwKSAgLyogTWFzayBieXRlIGNvbnRyb2wgKi8NCisgICNkZWZpbmUgRVRIX01BQ0EzSFJfTUJDX0hCaXRzMTVfOCAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGhpZ2ggcmVnIGJpdHMgWzE1OjhdICovDQorICAjZGVmaW5lIEVUSF9NQUNBM0hSX01CQ19IQml0czdfMCAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgLyogTWFzayBNQUMgQWRkcmVzcyBoaWdoIHJlZyBiaXRzIFs3OjBdICovDQorICAjZGVmaW5lIEVUSF9NQUNBM0hSX01CQ19MQml0czMxXzI0ICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgLyogTWFzayBNQUMgQWRkcmVzcyBsb3cgcmVnIGJpdHMgWzMxOjI0XSAqLw0KKyAgI2RlZmluZSBFVEhfTUFDQTNIUl9NQkNfTEJpdHMyM18xNiAgICgodWludDMyX3QpMHgwNDAwMDAwMCkgIC8qIE1hc2sgTUFDIEFkZHJlc3MgbG93IHJlZyBiaXRzIFsyMzoxNl0gKi8NCisgICNkZWZpbmUgRVRIX01BQ0EzSFJfTUJDX0xCaXRzMTVfOCAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGxvdyByZWcgYml0cyBbMTU6OF0gKi8NCisgICNkZWZpbmUgRVRIX01BQ0EzSFJfTUJDX0xCaXRzN18wICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAvKiBNYXNrIE1BQyBBZGRyZXNzIGxvdyByZWcgYml0cyBbNzBdICovDQorI2RlZmluZSBFVEhfTUFDQTNIUl9NQUNBM0ggICAoKHVpbnQzMl90KTB4MDAwMEZGRkYpICAvKiBNQUMgYWRkcmVzczMgaGlnaCAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNQUMgQWRkcmVzczMgTG93IFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTUFDQTNMUl9NQUNBM0wgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAvKiBNQUMgYWRkcmVzczMgbG93ICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgICAgICBFdGhlcm5ldCBNTUMgUmVnaXN0ZXJzIGJpdHMgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1NQyBDb250b2wgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNDUl9NQ0ZIUCAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgIC8qIE1NQyBjb3VudGVyIEZ1bGwtSGFsZiBwcmVzZXQgKE9ubHkgaW4gU1RNMzJGMnh4KSAqLw0KKyNkZWZpbmUgRVRIX01NQ0NSX01DUCAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgLyogTU1DIGNvdW50ZXIgcHJlc2V0IChPbmx5IGluIFNUTTMyRjJ4eCkgKi8NCisjZGVmaW5lIEVUSF9NTUNDUl9NQ0YgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIE1NQyBDb3VudGVyIEZyZWV6ZSAqLw0KKyNkZWZpbmUgRVRIX01NQ0NSX1JPUiAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgLyogUmVzZXQgb24gUmVhZCAqLw0KKyNkZWZpbmUgRVRIX01NQ0NSX0NTUiAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgLyogQ291bnRlciBTdG9wIFJvbGxvdmVyICovDQorI2RlZmluZSBFVEhfTU1DQ1JfQ1IgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBDb3VudGVycyBSZXNldCAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNTUMgUmVjZWl2ZSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNSSVJfUkdVRlMgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgIC8qIFNldCB3aGVuIFJ4IGdvb2QgdW5pY2FzdCBmcmFtZXMgY291bnRlciByZWFjaGVzIGhhbGYgdGhlIG1heGltdW0gdmFsdWUgKi8NCisjZGVmaW5lIEVUSF9NTUNSSVJfUkZBRVMgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIFNldCB3aGVuIFJ4IGFsaWdubWVudCBlcnJvciBjb3VudGVyIHJlYWNoZXMgaGFsZiB0aGUgbWF4aW11bSB2YWx1ZSAqLw0KKyNkZWZpbmUgRVRIX01NQ1JJUl9SRkNFUyAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgLyogU2V0IHdoZW4gUnggY3JjIGVycm9yIGNvdW50ZXIgcmVhY2hlcyBoYWxmIHRoZSBtYXhpbXVtIHZhbHVlICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1NQyBUcmFuc21pdCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNUSVJfVEdGUyAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgIC8qIFNldCB3aGVuIFR4IGdvb2QgZnJhbWUgY291bnQgY291bnRlciByZWFjaGVzIGhhbGYgdGhlIG1heGltdW0gdmFsdWUgKi8NCisjZGVmaW5lIEVUSF9NTUNUSVJfVEdGTVNDUyAgICgodWludDMyX3QpMHgwMDAwODAwMCkgIC8qIFNldCB3aGVuIFR4IGdvb2QgbXVsdGkgY29sIGNvdW50ZXIgcmVhY2hlcyBoYWxmIHRoZSBtYXhpbXVtIHZhbHVlICovDQorI2RlZmluZSBFVEhfTU1DVElSX1RHRlNDUyAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApICAvKiBTZXQgd2hlbiBUeCBnb29kIHNpbmdsZSBjb2wgY291bnRlciByZWFjaGVzIGhhbGYgdGhlIG1heGltdW0gdmFsdWUgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTU1DIFJlY2VpdmUgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNSSU1SX1JHVUZNICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgIC8qIE1hc2sgdGhlIGludGVycnVwdCB3aGVuIFJ4IGdvb2QgdW5pY2FzdCBmcmFtZXMgY291bnRlciByZWFjaGVzIGhhbGYgdGhlIG1heGltdW0gdmFsdWUgKi8NCisjZGVmaW5lIEVUSF9NTUNSSU1SX1JGQUVNICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIE1hc2sgdGhlIGludGVycnVwdCB3aGVuIHdoZW4gUnggYWxpZ25tZW50IGVycm9yIGNvdW50ZXIgcmVhY2hlcyBoYWxmIHRoZSBtYXhpbXVtIHZhbHVlICovDQorI2RlZmluZSBFVEhfTU1DUklNUl9SRkNFTSAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAvKiBNYXNrIHRoZSBpbnRlcnJ1cHQgd2hlbiBSeCBjcmMgZXJyb3IgY291bnRlciByZWFjaGVzIGhhbGYgdGhlIG1heGltdW0gdmFsdWUgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgTU1DIFRyYW5zbWl0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfTU1DVElNUl9UR0ZNICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAvKiBNYXNrIHRoZSBpbnRlcnJ1cHQgd2hlbiBUeCBnb29kIGZyYW1lIGNvdW50IGNvdW50ZXIgcmVhY2hlcyBoYWxmIHRoZSBtYXhpbXVtIHZhbHVlICovDQorI2RlZmluZSBFVEhfTU1DVElNUl9UR0ZNU0NNICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAvKiBNYXNrIHRoZSBpbnRlcnJ1cHQgd2hlbiBUeCBnb29kIG11bHRpIGNvbCBjb3VudGVyIHJlYWNoZXMgaGFsZiB0aGUgbWF4aW11bSB2YWx1ZSAqLw0KKyNkZWZpbmUgRVRIX01NQ1RJTVJfVEdGU0NNICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgLyogTWFzayB0aGUgaW50ZXJydXB0IHdoZW4gVHggZ29vZCBzaW5nbGUgY29sIGNvdW50ZXIgcmVhY2hlcyBoYWxmIHRoZSBtYXhpbXVtIHZhbHVlICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1NQyBUcmFuc21pdHRlZCBHb29kIEZyYW1lcyBhZnRlciBTaW5nbGUgQ29sbGlzaW9uIENvdW50ZXIgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNUR0ZTQ0NSX1RHRlNDQyAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogTnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBmcmFtZXMgYWZ0ZXIgYSBzaW5nbGUgY29sbGlzaW9uIGluIEhhbGYtZHVwbGV4IG1vZGUuICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1NQyBUcmFuc21pdHRlZCBHb29kIEZyYW1lcyBhZnRlciBNb3JlIHRoYW4gYSBTaW5nbGUgQ29sbGlzaW9uIENvdW50ZXIgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNUR0ZNU0NDUl9UR0ZNU0NDICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogTnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBmcmFtZXMgYWZ0ZXIgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbGxpc2lvbiBpbiBIYWxmLWR1cGxleCBtb2RlLiAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNTUMgVHJhbnNtaXR0ZWQgR29vZCBGcmFtZXMgQ291bnRlciBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX01NQ1RHRkNSX1RHRkMgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogTnVtYmVyIG9mIGdvb2QgZnJhbWVzIHRyYW5zbWl0dGVkLiAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBNTUMgUmVjZWl2ZWQgRnJhbWVzIHdpdGggQ1JDIEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNSRkNFQ1JfUkZDRUMgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IuICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1NQyBSZWNlaXZlZCBGcmFtZXMgd2l0aCBBbGlnbmVtZW50IEVycm9yIENvdW50ZXIgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNSRkFFQ1JfUkZBRUMgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBhbGlnbm1lbnQgKGRyaWJibGUpIGVycm9yICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IE1NQyBSZWNlaXZlZCBHb29kIFVuaWNhc3QgRnJhbWVzIENvdW50ZXIgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9NTUNSR1VGQ1JfUkdVRkMgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIE51bWJlciBvZiBnb29kIHVuaWNhc3QgZnJhbWVzIHJlY2VpdmVkLiAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyogICAgICAgICAgICAgICBFdGhlcm5ldCBQVFAgUmVnaXN0ZXJzIGJpdHMgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBQVFAgVGltZSBTdGFtcCBDb250b2wgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0NSX1RTQ05UICAgICAgICgodWludDMyX3QpMHgwMDAzMDAwMCkgIC8qIFRpbWUgc3RhbXAgY2xvY2sgbm9kZSB0eXBlICovDQorI2RlZmluZSBFVEhfUFRQVFNTUl9UU1NNUk1FICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAvKiBUaW1lIHN0YW1wIHNuYXBzaG90IGZvciBtZXNzYWdlIHJlbGV2YW50IHRvIG1hc3RlciBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9QVFBUU1NSX1RTU0VNRSAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkgIC8qIFRpbWUgc3RhbXAgc25hcHNob3QgZm9yIGV2ZW50IG1lc3NhZ2UgZW5hYmxlICovDQorI2RlZmluZSBFVEhfUFRQVFNTUl9UU1NJUFY0RkUgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAvKiBUaW1lIHN0YW1wIHNuYXBzaG90IGZvciBJUHY0IGZyYW1lcyBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9QVFBUU1NSX1RTU0lQVjZGRSAgICgodWludDMyX3QpMHgwMDAwMTAwMCkgIC8qIFRpbWUgc3RhbXAgc25hcHNob3QgZm9yIElQdjYgZnJhbWVzIGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX1BUUFRTU1JfVFNTUFRQT0VGRSAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAgLyogVGltZSBzdGFtcCBzbmFwc2hvdCBmb3IgUFRQIG92ZXIgZXRoZXJuZXQgZnJhbWVzIGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX1BUUFRTU1JfVFNQVFBQU1YyRSAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgLyogVGltZSBzdGFtcCBQVFAgcGFja2V0IHNub29waW5nIGZvciB2ZXJzaW9uMiBmb3JtYXQgZW5hYmxlICovDQorI2RlZmluZSBFVEhfUFRQVFNTUl9UU1NTUiAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApICAvKiBUaW1lIHN0YW1wIFN1Yi1zZWNvbmRzIHJvbGxvdmVyICovDQorI2RlZmluZSBFVEhfUFRQVFNTUl9UU1NBUkZFICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAvKiBUaW1lIHN0YW1wIHNuYXBzaG90IGZvciBhbGwgcmVjZWl2ZWQgZnJhbWVzIGVuYWJsZSAqLw0KKw0KKyNkZWZpbmUgRVRIX1BUUFRTQ1JfVFNBUlUgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgLyogQWRkZW5kIHJlZ2lzdGVyIHVwZGF0ZSAqLw0KKyNkZWZpbmUgRVRIX1BUUFRTQ1JfVFNJVEUgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAgLyogVGltZSBzdGFtcCBpbnRlcnJ1cHQgdHJpZ2dlciBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0NSX1RTU1RVICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIFRpbWUgc3RhbXAgdXBkYXRlICovDQorI2RlZmluZSBFVEhfUFRQVFNDUl9UU1NUSSAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAvKiBUaW1lIHN0YW1wIGluaXRpYWxpemUgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0NSX1RTRkNVICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgIC8qIFRpbWUgc3RhbXAgZmluZSBvciBjb2Fyc2UgdXBkYXRlICovDQorI2RlZmluZSBFVEhfUFRQVFNDUl9UU0UgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBUaW1lIHN0YW1wIGVuYWJsZSAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBQVFAgU3ViLVNlY29uZCBJbmNyZW1lbnQgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9QVFBTU0lSX1NUU1NJICAgICgodWludDMyX3QpMHgwMDAwMDBGRikgIC8qIFN5c3RlbSB0aW1lIFN1Yi1zZWNvbmQgaW5jcmVtZW50IHZhbHVlICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IFBUUCBUaW1lIFN0YW1wIEhpZ2ggUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0hSX1NUUyAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIFN5c3RlbSBUaW1lIHNlY29uZCAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBQVFAgVGltZSBTdGFtcCBMb3cgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0xSX1NUUE5TICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkgIC8qIFN5c3RlbSBUaW1lIFBvc2l0aXZlIG9yIG5lZ2F0aXZlIHRpbWUgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0xSX1NUU1MgICAgICgodWludDMyX3QpMHg3RkZGRkZGRikgIC8qIFN5c3RlbSBUaW1lIHN1Yi1zZWNvbmRzICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IFBUUCBUaW1lIFN0YW1wIEhpZ2ggVXBkYXRlIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfUFRQVFNIVVJfVFNVUyAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAvKiBUaW1lIHN0YW1wIHVwZGF0ZSBzZWNvbmRzICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IFBUUCBUaW1lIFN0YW1wIExvdyBVcGRhdGUgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0xVUl9UU1VQTlMgICgodWludDMyX3QpMHg4MDAwMDAwMCkgIC8qIFRpbWUgc3RhbXAgdXBkYXRlIFBvc2l0aXZlIG9yIG5lZ2F0aXZlIHRpbWUgKi8NCisjZGVmaW5lIEVUSF9QVFBUU0xVUl9UU1VTUyAgICgodWludDMyX3QpMHg3RkZGRkZGRikgIC8qIFRpbWUgc3RhbXAgdXBkYXRlIHN1Yi1zZWNvbmRzICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IFBUUCBUaW1lIFN0YW1wIEFkZGVuZCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX1BUUFRTQVJfVFNBICAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogVGltZSBzdGFtcCBhZGRlbmQgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgUFRQIFRhcmdldCBUaW1lIEhpZ2ggUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9QVFBUVEhSX1RUU0ggICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIFRhcmdldCB0aW1lIHN0YW1wIGhpZ2ggKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgUFRQIFRhcmdldCBUaW1lIExvdyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX1BUUFRUTFJfVFRTTCAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogVGFyZ2V0IHRpbWUgc3RhbXAgbG93ICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IFBUUCBUaW1lIFN0YW1wIFN0YXR1cyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX1BUUFRTU1JfVFNUVFIgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgLyogVGltZSBzdGFtcCB0YXJnZXQgdGltZSByZWFjaGVkICovDQorI2RlZmluZSBFVEhfUFRQVFNTUl9UU1NPICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAvKiBUaW1lIHN0YW1wIHNlY29uZHMgb3ZlcmZsb3cgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qICAgICAgICAgICAgICAgICBFdGhlcm5ldCBETUEgUmVnaXN0ZXJzIGJpdHMgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIEJ1cyBNb2RlIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfRE1BQk1SX0FBQiAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAvKiBBZGRyZXNzLUFsaWduZWQgYmVhdHMgKi8NCisjZGVmaW5lIEVUSF9ETUFCTVJfRlBNICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAvKiA0eFBCTCBtb2RlICovDQorI2RlZmluZSBFVEhfRE1BQk1SX1VTUCAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICAvKiBVc2Ugc2VwYXJhdGUgUEJMICovDQorI2RlZmluZSBFVEhfRE1BQk1SX1JEUCAgICAgICAoKHVpbnQzMl90KTB4MDA3RTAwMDApICAvKiBSeERNQSBQQkwgKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SRFBfMUJlYXQgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDEgKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SRFBfMkJlYXQgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDIgKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SRFBfNEJlYXQgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDQgKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SRFBfOEJlYXQgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDggKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SRFBfMTZCZWF0ICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDE2ICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUkRQXzMyQmVhdCAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBSeERNQSB0cmFuc2FjdGlvbiBpcyAzMiAqLyAgICAgICAgICAgICAgICANCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SRFBfNHhQQkxfNEJlYXQgICAoKHVpbnQzMl90KTB4MDEwMjAwMDApICAvKiBtYXhpbXVtIG51bWJlciBvZiBiZWF0cyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBvbmUgUnhETUEgdHJhbnNhY3Rpb24gaXMgNCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1JEUF80eFBCTF84QmVhdCAgICgodWludDMyX3QpMHgwMTA0MDAwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBSeERNQSB0cmFuc2FjdGlvbiBpcyA4ICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUkRQXzR4UEJMXzE2QmVhdCAgKCh1aW50MzJfdCkweDAxMDgwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDE2ICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUkRQXzR4UEJMXzMyQmVhdCAgKCh1aW50MzJfdCkweDAxMTAwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDMyICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUkRQXzR4UEJMXzY0QmVhdCAgKCh1aW50MzJfdCkweDAxMjAwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDY0ICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUkRQXzR4UEJMXzEyOEJlYXQgKCh1aW50MzJfdCkweDAxNDAwMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFJ4RE1BIHRyYW5zYWN0aW9uIGlzIDEyOCAqLyAgDQorI2RlZmluZSBFVEhfRE1BQk1SX0ZCICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAvKiBGaXhlZCBCdXJzdCAqLw0KKyNkZWZpbmUgRVRIX0RNQUJNUl9SVFBSICAgICAgKCh1aW50MzJfdCkweDAwMDBDMDAwKSAgLyogUnggVHggcHJpb3JpdHkgcmF0aW8gKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SVFBSXzFfMSAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSAgLyogUnggVHggcHJpb3JpdHkgcmF0aW8gKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SVFBSXzJfMSAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgLyogUnggVHggcHJpb3JpdHkgcmF0aW8gKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SVFBSXzNfMSAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgLyogUnggVHggcHJpb3JpdHkgcmF0aW8gKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9SVFBSXzRfMSAgICAgKCh1aW50MzJfdCkweDAwMDBDMDAwKSAgLyogUnggVHggcHJpb3JpdHkgcmF0aW8gKi8gIA0KKyNkZWZpbmUgRVRIX0RNQUJNUl9QQkwgICAgKCh1aW50MzJfdCkweDAwMDAzRjAwKSAgLyogUHJvZ3JhbW1hYmxlIGJ1cnN0IGxlbmd0aCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF8xQmVhdCAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApICAvKiBtYXhpbXVtIG51bWJlciBvZiBiZWF0cyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBvbmUgVHhETUEgKG9yIGJvdGgpIHRyYW5zYWN0aW9uIGlzIDEgKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9QQkxfMkJlYXQgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFR4RE1BIChvciBib3RoKSB0cmFuc2FjdGlvbiBpcyAyICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUEJMXzRCZWF0ICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBUeERNQSAob3IgYm90aCkgdHJhbnNhY3Rpb24gaXMgNCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF84QmVhdCAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApICAvKiBtYXhpbXVtIG51bWJlciBvZiBiZWF0cyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBvbmUgVHhETUEgKG9yIGJvdGgpIHRyYW5zYWN0aW9uIGlzIDggKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9QQkxfMTZCZWF0ICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFR4RE1BIChvciBib3RoKSB0cmFuc2FjdGlvbiBpcyAxNiAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF8zMkJlYXQgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAvKiBtYXhpbXVtIG51bWJlciBvZiBiZWF0cyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBvbmUgVHhETUEgKG9yIGJvdGgpIHRyYW5zYWN0aW9uIGlzIDMyICovICAgICAgICAgICAgICAgIA0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF80eFBCTF80QmVhdCAgICgodWludDMyX3QpMHgwMTAwMDEwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBUeERNQSAob3IgYm90aCkgdHJhbnNhY3Rpb24gaXMgNCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF80eFBCTF84QmVhdCAgICgodWludDMyX3QpMHgwMTAwMDIwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBUeERNQSAob3IgYm90aCkgdHJhbnNhY3Rpb24gaXMgOCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF80eFBCTF8xNkJlYXQgICgodWludDMyX3QpMHgwMTAwMDQwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBUeERNQSAob3IgYm90aCkgdHJhbnNhY3Rpb24gaXMgMTYgKi8NCisgICNkZWZpbmUgRVRIX0RNQUJNUl9QQkxfNHhQQkxfMzJCZWF0ICAoKHVpbnQzMl90KTB4MDEwMDA4MDApICAvKiBtYXhpbXVtIG51bWJlciBvZiBiZWF0cyB0byBiZSB0cmFuc2ZlcnJlZCBpbiBvbmUgVHhETUEgKG9yIGJvdGgpIHRyYW5zYWN0aW9uIGlzIDMyICovDQorICAjZGVmaW5lIEVUSF9ETUFCTVJfUEJMXzR4UEJMXzY0QmVhdCAgKCh1aW50MzJfdCkweDAxMDAxMDAwKSAgLyogbWF4aW11bSBudW1iZXIgb2YgYmVhdHMgdG8gYmUgdHJhbnNmZXJyZWQgaW4gb25lIFR4RE1BIChvciBib3RoKSB0cmFuc2FjdGlvbiBpcyA2NCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BQk1SX1BCTF80eFBCTF8xMjhCZWF0ICgodWludDMyX3QpMHgwMTAwMjAwMCkgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJlYXRzIHRvIGJlIHRyYW5zZmVycmVkIGluIG9uZSBUeERNQSAob3IgYm90aCkgdHJhbnNhY3Rpb24gaXMgMTI4ICovDQorI2RlZmluZSBFVEhfRE1BQk1SX0VERSAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAvKiBFbmhhbmNlZCBEZXNjcmlwdG9yIEVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUJNUl9EU0wgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDdDKSAgLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLw0KKyNkZWZpbmUgRVRIX0RNQUJNUl9EQSAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgLyogRE1BIGFyYml0cmF0aW9uIHNjaGVtZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUJNUl9TUiAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgLyogU29mdHdhcmUgcmVzZXQgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIFRyYW5zbWl0IFBvbGwgRGVtYW5kIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfRE1BVFBEUl9UUEQgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAvKiBUcmFuc21pdCBwb2xsIGRlbWFuZCAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBETUEgUmVjZWl2ZSBQb2xsIERlbWFuZCBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX0RNQVJQRFJfUlBEICAgICAgKCh1aW50MzJfdCkweEZGRkZGRkZGKSAgLyogUmVjZWl2ZSBwb2xsIGRlbWFuZCAgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIFJlY2VpdmUgRGVzY3JpcHRvciBMaXN0IEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9ETUFSRExBUl9TUkwgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIFN0YXJ0IG9mIHJlY2VpdmUgbGlzdCAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBETUEgVHJhbnNtaXQgRGVzY3JpcHRvciBMaXN0IEFkZHJlc3MgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9ETUFURExBUl9TVEwgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIFN0YXJ0IG9mIHRyYW5zbWl0IGxpc3QgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIFN0YXR1cyBSZWdpc3RlciAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX1RTVFMgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKSAgLyogVGltZS1zdGFtcCB0cmlnZ2VyIHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX1BNVFMgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSAgLyogUE1UIHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX01NQ1MgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSAgLyogTU1DIHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX0VCUyAgICAgICAgKCh1aW50MzJfdCkweDAzODAwMDAwKSAgLyogRXJyb3IgYml0cyBzdGF0dXMgKi8NCisgIC8qIGNvbWJpbmF0aW9uIHdpdGggRUJTWzI6MF0gZm9yIEdldEZsYWdTdGF0dXMgZnVuY3Rpb24gKi8NCisgICNkZWZpbmUgRVRIX0RNQVNSX0VCU19EZXNjQWNjZXNzICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKSAgLyogRXJyb3IgYml0cyAwLWRhdGEgYnVmZmVyLCAxLWRlc2MuIGFjY2VzcyAqLw0KKyAgI2RlZmluZSBFVEhfRE1BU1JfRUJTX1JlYWRUcmFuc2YgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApICAvKiBFcnJvciBiaXRzIDAtd3JpdGUgdHJuc2YsIDEtcmVhZCB0cmFuc2ZyICovDQorICAjZGVmaW5lIEVUSF9ETUFTUl9FQlNfRGF0YVRyYW5zZlR4ICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkgIC8qIEVycm9yIGJpdHMgMC1SeCBETUEsIDEtVHggRE1BICovDQorI2RlZmluZSBFVEhfRE1BU1JfVFBTICAgICAgICAgKCh1aW50MzJfdCkweDAwNzAwMDAwKSAgLyogVHJhbnNtaXQgcHJvY2VzcyBzdGF0ZSAqLw0KKyAgI2RlZmluZSBFVEhfRE1BU1JfVFBTX1N0b3BwZWQgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiBTdG9wcGVkIC0gUmVzZXQgb3IgU3RvcCBUeCBDb21tYW5kIGlzc3VlZCAgKi8NCisgICNkZWZpbmUgRVRIX0RNQVNSX1RQU19GZXRjaGluZyAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgLyogUnVubmluZyAtIGZldGNoaW5nIHRoZSBUeCBkZXNjcmlwdG9yICovDQorICAjZGVmaW5lIEVUSF9ETUFTUl9UUFNfV2FpdGluZyAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgIC8qIFJ1bm5pbmcgLSB3YWl0aW5nIGZvciBzdGF0dXMgKi8NCisgICNkZWZpbmUgRVRIX0RNQVNSX1RQU19SZWFkaW5nICAgICAgICAgKCh1aW50MzJfdCkweDAwMzAwMDAwKSAgLyogUnVubmluZyAtIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBob3N0IG1lbW9yeSAqLw0KKyAgI2RlZmluZSBFVEhfRE1BU1JfVFBTX1N1c3BlbmRlZCAgICAgICAoKHVpbnQzMl90KTB4MDA2MDAwMDApICAvKiBTdXNwZW5kZWQgLSBUeCBEZXNjcmlwdG9yIHVuYXZhaWxhYmUgKi8NCisgICNkZWZpbmUgRVRIX0RNQVNSX1RQU19DbG9zaW5nICAgICAgICAgKCh1aW50MzJfdCkweDAwNzAwMDAwKSAgLyogUnVubmluZyAtIGNsb3NpbmcgUnggZGVzY3JpcHRvciAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX1JQUyAgICAgICAgICgodWludDMyX3QpMHgwMDBFMDAwMCkgIC8qIFJlY2VpdmUgcHJvY2VzcyBzdGF0ZSAqLw0KKyAgI2RlZmluZSBFVEhfRE1BU1JfUlBTX1N0b3BwZWQgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiBTdG9wcGVkIC0gUmVzZXQgb3IgU3RvcCBSeCBDb21tYW5kIGlzc3VlZCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BU1JfUlBTX0ZldGNoaW5nICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApICAvKiBSdW5uaW5nIC0gZmV0Y2hpbmcgdGhlIFJ4IGRlc2NyaXB0b3IgKi8NCisgICNkZWZpbmUgRVRIX0RNQVNSX1JQU19XYWl0aW5nICAgICAgICAgKCh1aW50MzJfdCkweDAwMDYwMDAwKSAgLyogUnVubmluZyAtIHdhaXRpbmcgZm9yIHBhY2tldCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BU1JfUlBTX1N1c3BlbmRlZCAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApICAvKiBTdXNwZW5kZWQgLSBSeCBEZXNjcmlwdG9yIHVuYXZhaWxhYmxlICovDQorICAjZGVmaW5lIEVUSF9ETUFTUl9SUFNfQ2xvc2luZyAgICAgICAgICgodWludDMyX3QpMHgwMDBBMDAwMCkgIC8qIFJ1bm5pbmcgLSBjbG9zaW5nIGRlc2NyaXB0b3IgKi8NCisgICNkZWZpbmUgRVRIX0RNQVNSX1JQU19RdWV1aW5nICAgICAgICAgKCh1aW50MzJfdCkweDAwMEUwMDAwKSAgLyogUnVubmluZyAtIHF1ZXVpbmcgdGhlIHJlY2lldmUgZnJhbWUgaW50byBob3N0IG1lbW9yeSAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX05JUyAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgLyogTm9ybWFsIGludGVycnVwdCBzdW1tYXJ5ICovDQorI2RlZmluZSBFVEhfRE1BU1JfQUlTICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAvKiBBYm5vcm1hbCBpbnRlcnJ1cHQgc3VtbWFyeSAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX0VSUyAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgLyogRWFybHkgcmVjZWl2ZSBzdGF0dXMgKi8NCisjZGVmaW5lIEVUSF9ETUFTUl9GQkVTICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgIC8qIEZhdGFsIGJ1cyBlcnJvciBzdGF0dXMgKi8NCisjZGVmaW5lIEVUSF9ETUFTUl9FVFMgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgIC8qIEVhcmx5IHRyYW5zbWl0IHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX1JXVFMgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgLyogUmVjZWl2ZSB3YXRjaGRvZyB0aW1lb3V0IHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX1JQU1MgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAgLyogUmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWQgc3RhdHVzICovDQorI2RlZmluZSBFVEhfRE1BU1JfUkJVUyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApICAvKiBSZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZSBzdGF0dXMgKi8NCisjZGVmaW5lIEVUSF9ETUFTUl9SUyAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIFJlY2VpdmUgc3RhdHVzICovDQorI2RlZmluZSBFVEhfRE1BU1JfVFVTICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAvKiBUcmFuc21pdCB1bmRlcmZsb3cgc3RhdHVzICovDQorI2RlZmluZSBFVEhfRE1BU1JfUk9TICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAvKiBSZWNlaXZlIG92ZXJmbG93IHN0YXR1cyAqLw0KKyNkZWZpbmUgRVRIX0RNQVNSX1RKVFMgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgLyogVHJhbnNtaXQgamFiYmVyIHRpbWVvdXQgc3RhdHVzICovDQorI2RlZmluZSBFVEhfRE1BU1JfVEJVUyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpICAvKiBUcmFuc21pdCBidWZmZXIgdW5hdmFpbGFibGUgc3RhdHVzICovDQorI2RlZmluZSBFVEhfRE1BU1JfVFBTUyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiBUcmFuc21pdCBwcm9jZXNzIHN0b3BwZWQgc3RhdHVzICovDQorI2RlZmluZSBFVEhfRE1BU1JfVFMgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBUcmFuc21pdCBzdGF0dXMgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIE9wZXJhdGlvbiBNb2RlIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfRE1BT01SX0RUQ0VGRCAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApICAvKiBEaXNhYmxlIERyb3BwaW5nIG9mIFRDUC9JUCBjaGVja3N1bSBlcnJvciBmcmFtZXMgKi8NCisjZGVmaW5lIEVUSF9ETUFPTVJfUlNGICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgIC8qIFJlY2VpdmUgc3RvcmUgYW5kIGZvcndhcmQgKi8NCisjZGVmaW5lIEVUSF9ETUFPTVJfREZSRiAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkgIC8qIERpc2FibGUgZmx1c2hpbmcgb2YgcmVjZWl2ZWQgZnJhbWVzICovDQorI2RlZmluZSBFVEhfRE1BT01SX1RTRiAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICAvKiBUcmFuc21pdCBzdG9yZSBhbmQgZm9yd2FyZCAqLw0KKyNkZWZpbmUgRVRIX0RNQU9NUl9GVEYgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKSAgLyogRmx1c2ggdHJhbnNtaXQgRklGTyAqLw0KKyNkZWZpbmUgRVRIX0RNQU9NUl9UVEMgICAgICAgKCh1aW50MzJfdCkweDAwMDFDMDAwKSAgLyogVHJhbnNtaXQgdGhyZXNob2xkIGNvbnRyb2wgKi8NCisgICNkZWZpbmUgRVRIX0RNQU9NUl9UVENfNjRCeXRlcyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiB0aHJlc2hvbGQgbGV2ZWwgb2YgdGhlIE1UTCBUcmFuc21pdCBGSUZPIGlzIDY0IEJ5dGVzICovDQorICAjZGVmaW5lIEVUSF9ETUFPTVJfVFRDXzEyOEJ5dGVzICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgLyogdGhyZXNob2xkIGxldmVsIG9mIHRoZSBNVEwgVHJhbnNtaXQgRklGTyBpcyAxMjggQnl0ZXMgKi8NCisgICNkZWZpbmUgRVRIX0RNQU9NUl9UVENfMTkyQnl0ZXMgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApICAvKiB0aHJlc2hvbGQgbGV2ZWwgb2YgdGhlIE1UTCBUcmFuc21pdCBGSUZPIGlzIDE5MiBCeXRlcyAqLw0KKyAgI2RlZmluZSBFVEhfRE1BT01SX1RUQ18yNTZCeXRlcyAgICAgICgodWludDMyX3QpMHgwMDAwQzAwMCkgIC8qIHRocmVzaG9sZCBsZXZlbCBvZiB0aGUgTVRMIFRyYW5zbWl0IEZJRk8gaXMgMjU2IEJ5dGVzICovDQorICAjZGVmaW5lIEVUSF9ETUFPTVJfVFRDXzQwQnl0ZXMgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAgLyogdGhyZXNob2xkIGxldmVsIG9mIHRoZSBNVEwgVHJhbnNtaXQgRklGTyBpcyA0MCBCeXRlcyAqLw0KKyAgI2RlZmluZSBFVEhfRE1BT01SX1RUQ18zMkJ5dGVzICAgICAgICgodWludDMyX3QpMHgwMDAxNDAwMCkgIC8qIHRocmVzaG9sZCBsZXZlbCBvZiB0aGUgTVRMIFRyYW5zbWl0IEZJRk8gaXMgMzIgQnl0ZXMgKi8NCisgICNkZWZpbmUgRVRIX0RNQU9NUl9UVENfMjRCeXRlcyAgICAgICAoKHVpbnQzMl90KTB4MDAwMTgwMDApICAvKiB0aHJlc2hvbGQgbGV2ZWwgb2YgdGhlIE1UTCBUcmFuc21pdCBGSUZPIGlzIDI0IEJ5dGVzICovDQorICAjZGVmaW5lIEVUSF9ETUFPTVJfVFRDXzE2Qnl0ZXMgICAgICAgKCh1aW50MzJfdCkweDAwMDFDMDAwKSAgLyogdGhyZXNob2xkIGxldmVsIG9mIHRoZSBNVEwgVHJhbnNtaXQgRklGTyBpcyAxNiBCeXRlcyAqLw0KKyNkZWZpbmUgRVRIX0RNQU9NUl9TVCAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSAgLyogU3RhcnQvc3RvcCB0cmFuc21pc3Npb24gY29tbWFuZCAqLw0KKyNkZWZpbmUgRVRIX0RNQU9NUl9GRUYgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAgLyogRm9yd2FyZCBlcnJvciBmcmFtZXMgKi8NCisjZGVmaW5lIEVUSF9ETUFPTVJfRlVHRiAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIEZvcndhcmQgdW5kZXJzaXplZCBnb29kIGZyYW1lcyAqLw0KKyNkZWZpbmUgRVRIX0RNQU9NUl9SVEMgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDE4KSAgLyogcmVjZWl2ZSB0aHJlc2hvbGQgY29udHJvbCAqLw0KKyAgI2RlZmluZSBFVEhfRE1BT01SX1JUQ182NEJ5dGVzICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgIC8qIHRocmVzaG9sZCBsZXZlbCBvZiB0aGUgTVRMIFJlY2VpdmUgRklGTyBpcyA2NCBCeXRlcyAqLw0KKyAgI2RlZmluZSBFVEhfRE1BT01SX1JUQ18zMkJ5dGVzICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkgIC8qIHRocmVzaG9sZCBsZXZlbCBvZiB0aGUgTVRMIFJlY2VpdmUgRklGTyBpcyAzMiBCeXRlcyAqLw0KKyAgI2RlZmluZSBFVEhfRE1BT01SX1JUQ185NkJ5dGVzICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgIC8qIHRocmVzaG9sZCBsZXZlbCBvZiB0aGUgTVRMIFJlY2VpdmUgRklGTyBpcyA5NiBCeXRlcyAqLw0KKyAgI2RlZmluZSBFVEhfRE1BT01SX1JUQ18xMjhCeXRlcyAgICAgICgodWludDMyX3QpMHgwMDAwMDAxOCkgIC8qIHRocmVzaG9sZCBsZXZlbCBvZiB0aGUgTVRMIFJlY2VpdmUgRklGTyBpcyAxMjggQnl0ZXMgKi8NCisjZGVmaW5lIEVUSF9ETUFPTVJfT1NGICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgIC8qIG9wZXJhdGUgb24gc2Vjb25kIGZyYW1lICovDQorI2RlZmluZSBFVEhfRE1BT01SX1NSICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiBTdGFydC9zdG9wIHJlY2VpdmUgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfTklTRSAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkgIC8qIE5vcm1hbCBpbnRlcnJ1cHQgc3VtbWFyeSBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfQUlTRSAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkgIC8qIEFibm9ybWFsIGludGVycnVwdCBzdW1tYXJ5IGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUlFUl9FUklFICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgLyogRWFybHkgcmVjZWl2ZSBpbnRlcnJ1cHQgZW5hYmxlICovDQorI2RlZmluZSBFVEhfRE1BSUVSX0ZCRUlFICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApICAvKiBGYXRhbCBidXMgZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUlFUl9FVElFICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgLyogRWFybHkgdHJhbnNtaXQgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUlFUl9SV1RJRSAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAgLyogUmVjZWl2ZSB3YXRjaGRvZyB0aW1lb3V0IGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfUlBTSUUgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgIC8qIFJlY2VpdmUgcHJvY2VzcyBzdG9wcGVkIGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfUkJVSUUgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgIC8qIFJlY2VpdmUgYnVmZmVyIHVuYXZhaWxhYmxlIGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfUklFICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgIC8qIFJlY2VpdmUgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUlFUl9UVUlFICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKSAgLyogVHJhbnNtaXQgVW5kZXJmbG93IGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfUk9JRSAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgIC8qIFJlY2VpdmUgT3ZlcmZsb3cgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUlFUl9USlRJRSAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KSAgLyogVHJhbnNtaXQgamFiYmVyIHRpbWVvdXQgaW50ZXJydXB0IGVuYWJsZSAqLw0KKyNkZWZpbmUgRVRIX0RNQUlFUl9UQlVJRSAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgLyogVHJhbnNtaXQgYnVmZmVyIHVuYXZhaWxhYmxlIGludGVycnVwdCBlbmFibGUgKi8NCisjZGVmaW5lIEVUSF9ETUFJRVJfVFBTSUUgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikgIC8qIFRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZCBpbnRlcnJ1cHQgZW5hYmxlICovDQorI2RlZmluZSBFVEhfRE1BSUVSX1RJRSAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpICAvKiBUcmFuc21pdCBpbnRlcnJ1cHQgZW5hYmxlICovDQorDQorLyogQml0IGRlZmluaXRpb24gZm9yIEV0aGVybmV0IERNQSBNaXNzZWQgRnJhbWUgYW5kIEJ1ZmZlciBPdmVyZmxvdyBDb3VudGVyIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfRE1BTUZCT0NSX09GT0MgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApICAvKiBPdmVyZmxvdyBiaXQgZm9yIEZJRk8gb3ZlcmZsb3cgY291bnRlciAqLw0KKyNkZWZpbmUgRVRIX0RNQU1GQk9DUl9NRkEgICAgKCh1aW50MzJfdCkweDBGRkUwMDAwKSAgLyogTnVtYmVyIG9mIGZyYW1lcyBtaXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uICovDQorI2RlZmluZSBFVEhfRE1BTUZCT0NSX09NRkMgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAvKiBPdmVyZmxvdyBiaXQgZm9yIG1pc3NlZCBmcmFtZSBjb3VudGVyICovDQorI2RlZmluZSBFVEhfRE1BTUZCT0NSX01GQyAgICAoKHVpbnQzMl90KTB4MDAwMEZGRkYpICAvKiBOdW1iZXIgb2YgZnJhbWVzIG1pc3NlZCBieSB0aGUgY29udHJvbGxlciAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBETUEgQ3VycmVudCBIb3N0IFRyYW5zbWl0IERlc2NyaXB0b3IgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9ETUFDSFREUl9IVERBUCAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIEhvc3QgdHJhbnNtaXQgZGVzY3JpcHRvciBhZGRyZXNzIHBvaW50ZXIgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIEN1cnJlbnQgSG9zdCBSZWNlaXZlIERlc2NyaXB0b3IgUmVnaXN0ZXIgKi8NCisjZGVmaW5lIEVUSF9ETUFDSFJEUl9IUkRBUCAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIC8qIEhvc3QgcmVjZWl2ZSBkZXNjcmlwdG9yIGFkZHJlc3MgcG9pbnRlciAqLw0KKw0KKy8qIEJpdCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBETUEgQ3VycmVudCBIb3N0IFRyYW5zbWl0IEJ1ZmZlciBBZGRyZXNzIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfRE1BQ0hUQkFSX0hUQkFQICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAvKiBIb3N0IHRyYW5zbWl0IGJ1ZmZlciBhZGRyZXNzIHBvaW50ZXIgKi8NCisNCisvKiBCaXQgZGVmaW5pdGlvbiBmb3IgRXRoZXJuZXQgRE1BIEN1cnJlbnQgSG9zdCBSZWNlaXZlIEJ1ZmZlciBBZGRyZXNzIFJlZ2lzdGVyICovDQorI2RlZmluZSBFVEhfRE1BQ0hSQkFSX0hSQkFQICAoKHVpbnQzMl90KTB4RkZGRkZGRkYpICAvKiBIb3N0IHJlY2VpdmUgYnVmZmVyIGFkZHJlc3MgcG9pbnRlciAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisgLyoqDQorICAqIEB9DQorICAqLyANCisNCisjaWZkZWYgVVNFX1NURFBFUklQSF9EUklWRVINCisgICNpbmNsdWRlICJzdG0zMmYyeHhfY29uZi5oIg0KKyNlbmRpZiAvKiBVU0VfU1REUEVSSVBIX0RSSVZFUiAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBFeHBvcnRlZF9tYWNybw0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNFVF9CSVQoUkVHLCBCSVQpICAgICAoKFJFRykgfD0gKEJJVCkpDQorDQorI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkNCisNCisjZGVmaW5lIFJFQURfQklUKFJFRywgQklUKSAgICAoKFJFRykgJiAoQklUKSkNCisNCisjZGVmaW5lIENMRUFSX1JFRyhSRUcpICAgICAgICAoKFJFRykgPSAoMHgwKSkNCisNCisjZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkNCisNCisjZGVmaW5lIFJFQURfUkVHKFJFRykgICAgICAgICAoKFJFRykpDQorDQorI2RlZmluZSBNT0RJRllfUkVHKFJFRywgQ0xFQVJNQVNLLCBTRVRNQVNLKSAgV1JJVEVfUkVHKChSRUcpLCAoKChSRUFEX1JFRyhSRUcpKSAmICh+KENMRUFSTUFTSykpKSB8IChTRVRNQVNLKSkpDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8NCisNCisjZW5kaWYgLyogX19TVE0zMkYyeHhfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisgIC8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L0NNU0lTL3N5c3RlbV9zdG0zMmYyeHguaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L0NNU0lTL3N5c3RlbV9zdG0zMmYyeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjdiMjIyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvQ01TSVMvc3lzdGVtX3N0bTMyZjJ4eC5oCkBAIC0wLDAgKzEsMTA1IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzeXN0ZW1fc3RtMzJmMnh4LmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4zDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTINCisgICogQGJyaWVmICAgQ01TSVMgQ29ydGV4LU0zIERldmljZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBTeXN0ZW0gSGVhZGVyIEZpbGUuDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQ01TSVMNCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIHN0bTMyZjJ4eF9zeXN0ZW0NCisgICogQHsNCisgICovICANCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbg0KKyAgKi8NCisjaWZuZGVmIF9fU1lTVEVNX1NUTTMyRjJYWF9IDQorI2RlZmluZSBfX1NZU1RFTV9TVE0zMkYyWFhfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYgDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TeXN0ZW1fSW5jbHVkZXMNCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3lzdGVtX0V4cG9ydGVkX3R5cGVzDQorICAqIEB7DQorICAqLw0KKw0KK2V4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7ICAgICAgICAgIC8qITwgU3lzdGVtIENsb2NrIEZyZXF1ZW5jeSAoQ29yZSBDbG9jaykgKi8NCisNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TeXN0ZW1fRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N5c3RlbV9FeHBvcnRlZF9NYWNyb3MNCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3lzdGVtX0V4cG9ydGVkX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisgIA0KK2V4dGVybiB2b2lkIFN5c3RlbUluaXQodm9pZCk7DQorZXh0ZXJuIHZvaWQgU3lzdGVtQ29yZUNsb2NrVXBkYXRlKHZvaWQpOw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TWVNURU1fU1RNMzJGMlhYX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorICANCisvKioNCisgICogQH0NCisgICovICANCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL1JlbGVhc2VfTm90ZXMuaHRtbCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL1JlbGVhc2VfTm90ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTBhOGRlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvUmVsZWFzZV9Ob3Rlcy5odG1sCkBAIC0wLDAgKzEsOTY4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCis8aHRtbCB4bWxuczp2PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj48aGVhZD4NCis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPg0KKzxsaW5rIHJlbD0iRmlsZS1MaXN0IiBocmVmPSJSZWxlYXNlX05vdGVzX2Zvcl9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcl9maWxlcy9maWxlbGlzdC54bWwiPg0KKzxsaW5rIHJlbD0iRWRpdC1UaW1lLURhdGEiIGhyZWY9IlJlbGVhc2VfTm90ZXNfZm9yX1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyX2ZpbGVzL2VkaXRkYXRhLm1zbyI+PCEtLVtpZiAhbXNvXT4NCis8c3R5bGU+DQordlw6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0KK29cOioge2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpO30NCit3XDoqIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQorLnNoYXBlIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQorPC9zdHlsZT4NCis8IVtlbmRpZl0tLT4NCisNCisNCisNCis8dGl0bGU+UmVsZWFzZSBOb3RlcyBmb3IgU1RNMzJGMnh4IFN0YW5kYXJkIFBlcmlwaGVyYWxzIExpYnJhcnkgRHJpdmVyczwvdGl0bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQorIDxvOkRvY3VtZW50UHJvcGVydGllcz4NCisgIDxvOkF1dGhvcj5TVE1pY3JvZWxlY3Ryb25pY3M8L286QXV0aG9yPg0KKyAgPG86TGFzdEF1dGhvcj5SYW91ZiBIb3NuaTwvbzpMYXN0QXV0aG9yPg0KKyAgPG86UmV2aXNpb24+Mzk8L286UmV2aXNpb24+DQorICA8bzpUb3RhbFRpbWU+MTM3PC9vOlRvdGFsVGltZT4NCisgIDxvOkNyZWF0ZWQ+MjAwOS0wMi0yN1QxOToyNjowMFo8L286Q3JlYXRlZD4NCisgIDxvOkxhc3RTYXZlZD4yMDEwLTEwLTE1VDExOjA3OjAwWjwvbzpMYXN0U2F2ZWQ+DQorICA8bzpQYWdlcz4zPC9vOlBhZ2VzPg0KKyAgPG86V29yZHM+OTczPC9vOldvcmRzPg0KKyAgPG86Q2hhcmFjdGVycz41NTQ4PC9vOkNoYXJhY3RlcnM+DQorICA8bzpDb21wYW55PlNUTWljcm9lbGVjdHJvbmljczwvbzpDb21wYW55Pg0KKyAgPG86TGluZXM+NDY8L286TGluZXM+DQorICA8bzpQYXJhZ3JhcGhzPjEzPC9vOlBhcmFncmFwaHM+DQorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz42NTA4PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPg0KKyAgPG86VmVyc2lvbj4xMi4wMDwvbzpWZXJzaW9uPg0KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPg0KKzwveG1sPjwhW2VuZGlmXS0tPjxsaW5rIHJlbD0idGhlbWVEYXRhIiBocmVmPSJSZWxlYXNlX05vdGVzX2Zvcl9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcl9maWxlcy90aGVtZWRhdGEudGhteCI+DQorPGxpbmsgcmVsPSJjb2xvclNjaGVtZU1hcHBpbmciIGhyZWY9IlJlbGVhc2VfTm90ZXNfZm9yX1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyX2ZpbGVzL2NvbG9yc2NoZW1lbWFwcGluZy54bWwiPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KKyA8dzpXb3JkRG9jdW1lbnQ+DQorICA8dzpab29tPjExMDwvdzpab29tPg0KKyAgPHc6VHJhY2tNb3Zlcz5mYWxzZTwvdzpUcmFja01vdmVzPg0KKyAgPHc6VHJhY2tGb3JtYXR0aW5nLz4NCisgIDx3OlZhbGlkYXRlQWdhaW5zdFNjaGVtYXMvPg0KKyAgPHc6U2F2ZUlmWE1MSW52YWxpZD5mYWxzZTwvdzpTYXZlSWZYTUxJbnZhbGlkPg0KKyAgPHc6SWdub3JlTWl4ZWRDb250ZW50PmZhbHNlPC93Oklnbm9yZU1peGVkQ29udGVudD4NCisgIDx3OkFsd2F5c1Nob3dQbGFjZWhvbGRlclRleHQ+ZmFsc2U8L3c6QWx3YXlzU2hvd1BsYWNlaG9sZGVyVGV4dD4NCisgIDx3OkRvTm90UHJvbW90ZVFGLz4NCisgIDx3OkxpZFRoZW1lT3RoZXI+RU4tVVM8L3c6TGlkVGhlbWVPdGhlcj4NCisgIDx3OkxpZFRoZW1lQXNpYW4+WC1OT05FPC93OkxpZFRoZW1lQXNpYW4+DQorICA8dzpMaWRUaGVtZUNvbXBsZXhTY3JpcHQ+WC1OT05FPC93OkxpZFRoZW1lQ29tcGxleFNjcmlwdD4NCisgIDx3OkNvbXBhdGliaWxpdHk+DQorICAgPHc6QnJlYWtXcmFwcGVkVGFibGVzLz4NCisgICA8dzpTbmFwVG9HcmlkSW5DZWxsLz4NCisgICA8dzpXcmFwVGV4dFdpdGhQdW5jdC8+DQorICAgPHc6VXNlQXNpYW5CcmVha1J1bGVzLz4NCisgICA8dzpEb250R3Jvd0F1dG9maXQvPg0KKyAgIDx3OlNwbGl0UGdCcmVha0FuZFBhcmFNYXJrLz4NCisgICA8dzpEb250VmVydEFsaWduQ2VsbFdpdGhTcC8+DQorICAgPHc6RG9udEJyZWFrQ29uc3RyYWluZWRGb3JjZWRUYWJsZXMvPg0KKyAgIDx3OkRvbnRWZXJ0QWxpZ25JblR4YngvPg0KKyAgIDx3OldvcmQxMUtlcm5pbmdQYWlycy8+DQorICAgPHc6Q2FjaGVkQ29sQmFsYW5jZS8+DQorICA8L3c6Q29tcGF0aWJpbGl0eT4NCisgIDx3OkJyb3dzZXJMZXZlbD5NaWNyb3NvZnRJbnRlcm5ldEV4cGxvcmVyNDwvdzpCcm93c2VyTGV2ZWw+DQorICA8bTptYXRoUHI+DQorICAgPG06bWF0aEZvbnQgbTp2YWw9IkNhbWJyaWEgTWF0aCIvPg0KKyAgIDxtOmJya0JpbiBtOnZhbD0iYmVmb3JlIi8+DQorICAgPG06YnJrQmluU3ViIG06dmFsPSImIzQ1Oy0iLz4NCisgICA8bTpzbWFsbEZyYWMgbTp2YWw9Im9mZiIvPg0KKyAgIDxtOmRpc3BEZWYvPg0KKyAgIDxtOmxNYXJnaW4gbTp2YWw9IjAiLz4NCisgICA8bTpyTWFyZ2luIG06dmFsPSIwIi8+DQorICAgPG06ZGVmSmMgbTp2YWw9ImNlbnRlckdyb3VwIi8+DQorICAgPG06d3JhcEluZGVudCBtOnZhbD0iMTQ0MCIvPg0KKyAgIDxtOmludExpbSBtOnZhbD0ic3ViU3VwIi8+DQorICAgPG06bmFyeUxpbSBtOnZhbD0idW5kT3ZyIi8+DQorICA8L206bWF0aFByPjwvdzpXb3JkRG9jdW1lbnQ+DQorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQorIDx3OkxhdGVudFN0eWxlcyBEZWZMb2NrZWRTdGF0ZT0iZmFsc2UiIERlZlVuaGlkZVdoZW5Vc2VkPSJmYWxzZSINCisgIERlZlNlbWlIaWRkZW49ImZhbHNlIiBEZWZRRm9ybWF0PSJmYWxzZSIgTGF0ZW50U3R5bGVDb3VudD0iMjY3Ij4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJOb3JtYWwiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDMiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDQiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDYiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDciLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDgiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJoZWFkaW5nIDkiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBTZW1pSGlkZGVuPSJ0cnVlIiBVbmhpZGVXaGVuVXNlZD0idHJ1ZSINCisgICBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJjYXB0aW9uIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iVGl0bGUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMSIgTmFtZT0iRGVmYXVsdCBQYXJhZ3JhcGggRm9udCIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFFGb3JtYXQ9InRydWUiIE5hbWU9IlN1YnRpdGxlIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iU3Ryb25nIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iRW1waGFzaXMiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOTkiIE5hbWU9Ik5vIExpc3QiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOTkiIFNlbWlIaWRkZW49InRydWUiDQorICAgTmFtZT0iUGxhY2Vob2xkZXIgVGV4dCIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIxIiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJObyBTcGFjaW5nIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBOYW1lPSJMaWdodCBTaGFkaW5nIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBOYW1lPSJMaWdodCBMaXN0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYyIiBOYW1lPSJMaWdodCBHcmlkIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYzIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY0IiBOYW1lPSJNZWRpdW0gU2hhZGluZyAyIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY1IiBOYW1lPSJNZWRpdW0gTGlzdCAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY2IiBOYW1lPSJNZWRpdW0gTGlzdCAyIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY3IiBOYW1lPSJNZWRpdW0gR3JpZCAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBOYW1lPSJNZWRpdW0gR3JpZCAyIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBOYW1lPSJNZWRpdW0gR3JpZCAzIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBOYW1lPSJEYXJrIExpc3QiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIE5hbWU9IkNvbG9yZnVsIFNoYWRpbmciLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzIiIE5hbWU9IkNvbG9yZnVsIExpc3QiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIE5hbWU9IkNvbG9yZnVsIEdyaWQiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIE5hbWU9IkxpZ2h0IExpc3QgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIE5hbWU9IkxpZ2h0IEdyaWQgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iOTkiIFNlbWlIaWRkZW49InRydWUiIE5hbWU9IlJldmlzaW9uIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjM0IiBRRm9ybWF0PSJ0cnVlIg0KKyAgIE5hbWU9Ikxpc3QgUGFyYWdyYXBoIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjI5IiBRRm9ybWF0PSJ0cnVlIiBOYW1lPSJRdW90ZSIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzMCIgUUZvcm1hdD0idHJ1ZSINCisgICBOYW1lPSJJbnRlbnNlIFF1b3RlIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY2IiBOYW1lPSJNZWRpdW0gTGlzdCAyIEFjY2VudCAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY3IiBOYW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2VudCAxIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBOYW1lPSJEYXJrIExpc3QgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIE5hbWU9IkNvbG9yZnVsIFNoYWRpbmcgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzIiIE5hbWU9IkNvbG9yZnVsIExpc3QgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIE5hbWU9IkNvbG9yZnVsIEdyaWQgQWNjZW50IDEiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIE5hbWU9IkxpZ2h0IExpc3QgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIE5hbWU9IkxpZ2h0IEdyaWQgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIE5hbWU9Ik1lZGl1bSBMaXN0IDIgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIE5hbWU9Ik1lZGl1bSBHcmlkIDEgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIE5hbWU9Ik1lZGl1bSBHcmlkIDIgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIE5hbWU9Ik1lZGl1bSBHcmlkIDMgQWNjZW50IDIiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIE5hbWU9IkRhcmsgTGlzdCBBY2NlbnQgMiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MSIgTmFtZT0iQ29sb3JmdWwgU2hhZGluZyBBY2NlbnQgMiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MiIgTmFtZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgMiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MyIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgMiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgTmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIgTmFtZT0iTGlnaHQgTGlzdCBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgTmFtZT0iTGlnaHQgR3JpZCBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MyIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgTmFtZT0iTWVkaXVtIExpc3QgMSBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NiIgTmFtZT0iTWVkaXVtIExpc3QgMiBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NyIgTmFtZT0iTWVkaXVtIEdyaWQgMSBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OCIgTmFtZT0iTWVkaXVtIEdyaWQgMiBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OSIgTmFtZT0iTWVkaXVtIEdyaWQgMyBBY2NlbnQgMyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MCIgTmFtZT0iRGFyayBMaXN0IEFjY2VudCAzIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcxIiBOYW1lPSJDb2xvcmZ1bCBTaGFkaW5nIEFjY2VudCAzIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcyIiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCAzIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjczIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCAzIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYwIiBOYW1lPSJMaWdodCBTaGFkaW5nIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYxIiBOYW1lPSJMaWdodCBMaXN0IEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYyIiBOYW1lPSJMaWdodCBHcmlkIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjYzIiBOYW1lPSJNZWRpdW0gU2hhZGluZyAxIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY0IiBOYW1lPSJNZWRpdW0gU2hhZGluZyAyIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY1IiBOYW1lPSJNZWRpdW0gTGlzdCAxIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY2IiBOYW1lPSJNZWRpdW0gTGlzdCAyIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY3IiBOYW1lPSJNZWRpdW0gR3JpZCAxIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY4IiBOYW1lPSJNZWRpdW0gR3JpZCAyIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjY5IiBOYW1lPSJNZWRpdW0gR3JpZCAzIEFjY2VudCA0Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcwIiBOYW1lPSJEYXJrIExpc3QgQWNjZW50IDQiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzEiIE5hbWU9IkNvbG9yZnVsIFNoYWRpbmcgQWNjZW50IDQiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzIiIE5hbWU9IkNvbG9yZnVsIExpc3QgQWNjZW50IDQiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzMiIE5hbWU9IkNvbG9yZnVsIEdyaWQgQWNjZW50IDQiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjAiIE5hbWU9IkxpZ2h0IFNoYWRpbmcgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjEiIE5hbWU9IkxpZ2h0IExpc3QgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjIiIE5hbWU9IkxpZ2h0IEdyaWQgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjMiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDEgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjQiIE5hbWU9Ik1lZGl1bSBTaGFkaW5nIDIgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjUiIE5hbWU9Ik1lZGl1bSBMaXN0IDEgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjYiIE5hbWU9Ik1lZGl1bSBMaXN0IDIgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjciIE5hbWU9Ik1lZGl1bSBHcmlkIDEgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjgiIE5hbWU9Ik1lZGl1bSBHcmlkIDIgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNjkiIE5hbWU9Ik1lZGl1bSBHcmlkIDMgQWNjZW50IDUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iNzAiIE5hbWU9IkRhcmsgTGlzdCBBY2NlbnQgNSIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MSIgTmFtZT0iQ29sb3JmdWwgU2hhZGluZyBBY2NlbnQgNSIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MiIgTmFtZT0iQ29sb3JmdWwgTGlzdCBBY2NlbnQgNSIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MyIgTmFtZT0iQ29sb3JmdWwgR3JpZCBBY2NlbnQgNSIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MCIgTmFtZT0iTGlnaHQgU2hhZGluZyBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MSIgTmFtZT0iTGlnaHQgTGlzdCBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MiIgTmFtZT0iTGlnaHQgR3JpZCBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2MyIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMSBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NCIgTmFtZT0iTWVkaXVtIFNoYWRpbmcgMiBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NSIgTmFtZT0iTWVkaXVtIExpc3QgMSBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NiIgTmFtZT0iTWVkaXVtIExpc3QgMiBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2NyIgTmFtZT0iTWVkaXVtIEdyaWQgMSBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OCIgTmFtZT0iTWVkaXVtIEdyaWQgMiBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI2OSIgTmFtZT0iTWVkaXVtIEdyaWQgMyBBY2NlbnQgNiIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSI3MCIgTmFtZT0iRGFyayBMaXN0IEFjY2VudCA2Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcxIiBOYW1lPSJDb2xvcmZ1bCBTaGFkaW5nIEFjY2VudCA2Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjcyIiBOYW1lPSJDb2xvcmZ1bCBMaXN0IEFjY2VudCA2Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjczIiBOYW1lPSJDb2xvcmZ1bCBHcmlkIEFjY2VudCA2Ii8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjE5IiBRRm9ybWF0PSJ0cnVlIg0KKyAgIE5hbWU9IlN1YnRsZSBFbXBoYXNpcyIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIyMSIgUUZvcm1hdD0idHJ1ZSINCisgICBOYW1lPSJJbnRlbnNlIEVtcGhhc2lzIi8+DQorICA8dzpMc2RFeGNlcHRpb24gTG9ja2VkPSJmYWxzZSIgUHJpb3JpdHk9IjMxIiBRRm9ybWF0PSJ0cnVlIg0KKyAgIE5hbWU9IlN1YnRsZSBSZWZlcmVuY2UiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzIiIFFGb3JtYXQ9InRydWUiDQorICAgTmFtZT0iSW50ZW5zZSBSZWZlcmVuY2UiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzMiIFFGb3JtYXQ9InRydWUiIE5hbWU9IkJvb2sgVGl0bGUiLz4NCisgIDx3OkxzZEV4Y2VwdGlvbiBMb2NrZWQ9ImZhbHNlIiBQcmlvcml0eT0iMzciIFNlbWlIaWRkZW49InRydWUiDQorICAgVW5oaWRlV2hlblVzZWQ9InRydWUiIE5hbWU9IkJpYmxpb2dyYXBoeSIvPg0KKyAgPHc6THNkRXhjZXB0aW9uIExvY2tlZD0iZmFsc2UiIFByaW9yaXR5PSIzOSIgU2VtaUhpZGRlbj0idHJ1ZSINCisgICBVbmhpZGVXaGVuVXNlZD0idHJ1ZSIgUUZvcm1hdD0idHJ1ZSIgTmFtZT0iVE9DIEhlYWRpbmciLz4NCisgPC93OkxhdGVudFN0eWxlcz4NCis8L3htbD48IVtlbmRpZl0tLT4NCisNCis8c3R5bGU+DQorPCEtLQ0KKyAvKiBGb250IERlZmluaXRpb25zICovDQorIEBmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOw0KKwlwYW5vc2UtMToyIDQgNSAzIDUgNCA2IDMgMiA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjE7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnJvbWFuOw0KKwltc28tZm9udC1mb3JtYXQ6b3RoZXI7DQorCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOw0KKwltc28tZm9udC1zaWduYXR1cmU6MCAwIDAgMCAwIDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OkNhbGlicmk7DQorCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOi0xNjEwNjExOTg1IDEwNzM3NTAxMzkgMCAwIDE1OSAwO30NCitAZm9udC1mYWNlDQorCXtmb250LWZhbWlseTpUYWhvbWE7DQorCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjE2Mjc0MDA4MzkgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQ0KK0Bmb250LWZhY2UNCisJe2ZvbnQtZmFtaWx5OlZlcmRhbmE7DQorCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0Ow0KKwltc28tZm9udC1jaGFyc2V0OjA7DQorCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOw0KKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsNCisJbXNvLWZvbnQtc2lnbmF0dXJlOjUzNjg3MTU1OSAwIDAgMCA0MTUgMDt9DQorIC8qIFN0eWxlIERlZmluaXRpb25zICovDQorIHAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwNCisJe21zby1zdHlsZS11bmhpZGU6bm87DQorCW1zby1zdHlsZS1xZm9ybWF0OnllczsNCisJbXNvLXN0eWxlLXBhcmVudDoiIjsNCisJbWFyZ2luOjBpbjsNCisJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQorCWZvbnQtc2l6ZToxMi4wcHQ7DQorCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLCJzZXJpZiI7DQorCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30NCitoMQ0KKwl7bXNvLXN0eWxlLXVuaGlkZTpubzsNCisJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KKwltc28tc3R5bGUtbGluazoiSGVhZGluZyAxIENoYXIiOw0KKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsNCisJbWFyZ2luLXJpZ2h0OjBpbjsNCisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87DQorCW1hcmdpbi1sZWZ0OjBpbjsNCisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KKwltc28tb3V0bGluZS1sZXZlbDoxOw0KKwlmb250LXNpemU6MjQuMHB0Ow0KKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiOw0KKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCisJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0Ow0KKwlmb250LXdlaWdodDpib2xkO30NCitoMg0KKwl7bXNvLXN0eWxlLXVuaGlkZTpubzsNCisJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KKwltc28tc3R5bGUtbGluazoiSGVhZGluZyAyIENoYXIiOw0KKwltc28tc3R5bGUtbmV4dDpOb3JtYWw7DQorCW1hcmdpbi10b3A6MTIuMHB0Ow0KKwltYXJnaW4tcmlnaHQ6MGluOw0KKwltYXJnaW4tYm90dG9tOjMuMHB0Ow0KKwltYXJnaW4tbGVmdDowaW47DQorCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsNCisJcGFnZS1icmVhay1hZnRlcjphdm9pZDsNCisJbXNvLW91dGxpbmUtbGV2ZWw6MjsNCisJZm9udC1zaXplOjE0LjBwdDsNCisJZm9udC1mYW1pbHk6IkFyaWFsIiwic2Fucy1zZXJpZiI7DQorCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KKwltc28tZmFyZWFzdC10aGVtZS1mb250Om1pbm9yLWZhcmVhc3Q7DQorCWZvbnQtd2VpZ2h0OmJvbGQ7DQorCWZvbnQtc3R5bGU6aXRhbGljO30NCitoMw0KKwl7bXNvLXN0eWxlLXVuaGlkZTpubzsNCisJbXNvLXN0eWxlLXFmb3JtYXQ6eWVzOw0KKwltc28tc3R5bGUtbGluazoiSGVhZGluZyAzIENoYXIiOw0KKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsNCisJbWFyZ2luLXJpZ2h0OjBpbjsNCisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87DQorCW1hcmdpbi1sZWZ0OjBpbjsNCisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KKwltc28tb3V0bGluZS1sZXZlbDozOw0KKwlmb250LXNpemU6MTMuNXB0Ow0KKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiOw0KKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCisJbXNvLWZhcmVhc3QtdGhlbWUtZm9udDptaW5vci1mYXJlYXN0Ow0KKwlmb250LXdlaWdodDpib2xkO30NCithOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQorCXttc28tc3R5bGUtdW5oaWRlOm5vOw0KKwljb2xvcjpibHVlOw0KKwl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOw0KKwl0ZXh0LXVuZGVybGluZTpzaW5nbGU7fQ0KK2E6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZA0KKwl7bXNvLXN0eWxlLXVuaGlkZTpubzsNCisJY29sb3I6Ymx1ZTsNCisJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsNCisJdGV4dC11bmRlcmxpbmU6c2luZ2xlO30NCitwDQorCXttc28tc3R5bGUtdW5oaWRlOm5vOw0KKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsNCisJbWFyZ2luLXJpZ2h0OjBpbjsNCisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87DQorCW1hcmdpbi1sZWZ0OjBpbjsNCisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOw0KKwlmb250LXNpemU6MTIuMHB0Ow0KKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIiwic2VyaWYiOw0KKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9DQorcC5Nc29BY2V0YXRlLCBsaS5Nc29BY2V0YXRlLCBkaXYuTXNvQWNldGF0ZQ0KKwl7bXNvLXN0eWxlLXVuaGlkZTpubzsNCisJbXNvLXN0eWxlLWxpbms6IkJhbGxvb24gVGV4dCBDaGFyIjsNCisJbWFyZ2luOjBpbjsNCisJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47DQorCWZvbnQtc2l6ZTo4LjBwdDsNCisJZm9udC1mYW1pbHk6IlRhaG9tYSIsInNhbnMtc2VyaWYiOw0KKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9DQorc3Bhbi5IZWFkaW5nMUNoYXINCisJe21zby1zdHlsZS1uYW1lOiJIZWFkaW5nIDEgQ2hhciI7DQorCW1zby1zdHlsZS11bmhpZGU6bm87DQorCW1zby1zdHlsZS1sb2NrZWQ6eWVzOw0KKwltc28tc3R5bGUtbGluazoiSGVhZGluZyAxIjsNCisJbXNvLWFuc2ktZm9udC1zaXplOjE0LjBwdDsNCisJbXNvLWJpZGktZm9udC1zaXplOjE0LjBwdDsNCisJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQorCW1zby1hc2NpaS1mb250LWZhbWlseTpDYW1icmlhOw0KKwltc28tYXNjaWktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQorCW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWFqb3ItZmFyZWFzdDsNCisJbXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQorCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KKwltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCisJbXNvLWJpZGktdGhlbWUtZm9udDptYWpvci1iaWRpOw0KKwljb2xvcjojMzY1RjkxOw0KKwltc28tdGhlbWVjb2xvcjphY2NlbnQxOw0KKwltc28tdGhlbWVzaGFkZToxOTE7DQorCWZvbnQtd2VpZ2h0OmJvbGQ7fQ0KK3NwYW4uSGVhZGluZzJDaGFyDQorCXttc28tc3R5bGUtbmFtZToiSGVhZGluZyAyIENoYXIiOw0KKwltc28tc3R5bGUtdW5oaWRlOm5vOw0KKwltc28tc3R5bGUtbG9ja2VkOnllczsNCisJbXNvLXN0eWxlLWxpbms6IkhlYWRpbmcgMiI7DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMy4wcHQ7DQorCW1zby1iaWRpLWZvbnQtc2l6ZToxMy4wcHQ7DQorCWZvbnQtZmFtaWx5OiJDYW1icmlhIiwic2VyaWYiOw0KKwltc28tYXNjaWktZm9udC1mYW1pbHk6Q2FtYnJpYTsNCisJbXNvLWFzY2lpLXRoZW1lLWZvbnQ6bWFqb3ItbGF0aW47DQorCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOw0KKwltc28tZmFyZWFzdC10aGVtZS1mb250Om1ham9yLWZhcmVhc3Q7DQorCW1zby1oYW5zaS1mb250LWZhbWlseTpDYW1icmlhOw0KKwltc28taGFuc2ktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCisJbXNvLWJpZGktZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQorCW1zby1iaWRpLXRoZW1lLWZvbnQ6bWFqb3ItYmlkaTsNCisJY29sb3I6IzRGODFCRDsNCisJbXNvLXRoZW1lY29sb3I6YWNjZW50MTsNCisJZm9udC13ZWlnaHQ6Ym9sZDt9DQorc3Bhbi5IZWFkaW5nM0NoYXINCisJe21zby1zdHlsZS1uYW1lOiJIZWFkaW5nIDMgQ2hhciI7DQorCW1zby1zdHlsZS11bmhpZGU6bm87DQorCW1zby1zdHlsZS1sb2NrZWQ6eWVzOw0KKwltc28tc3R5bGUtbGluazoiSGVhZGluZyAzIjsNCisJbXNvLWFuc2ktZm9udC1zaXplOjEyLjBwdDsNCisJbXNvLWJpZGktZm9udC1zaXplOjEyLjBwdDsNCisJZm9udC1mYW1pbHk6IkNhbWJyaWEiLCJzZXJpZiI7DQorCW1zby1hc2NpaS1mb250LWZhbWlseTpDYW1icmlhOw0KKwltc28tYXNjaWktdGhlbWUtZm9udDptYWpvci1sYXRpbjsNCisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7DQorCW1zby1mYXJlYXN0LXRoZW1lLWZvbnQ6bWFqb3ItZmFyZWFzdDsNCisJbXNvLWhhbnNpLWZvbnQtZmFtaWx5OkNhbWJyaWE7DQorCW1zby1oYW5zaS10aGVtZS1mb250Om1ham9yLWxhdGluOw0KKwltc28tYmlkaS1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsNCisJbXNvLWJpZGktdGhlbWUtZm9udDptYWpvci1iaWRpOw0KKwljb2xvcjojNEY4MUJEOw0KKwltc28tdGhlbWVjb2xvcjphY2NlbnQxOw0KKwlmb250LXdlaWdodDpib2xkO30NCitzcGFuLkJhbGxvb25UZXh0Q2hhcg0KKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCBDaGFyIjsNCisJbXNvLXN0eWxlLXVuaGlkZTpubzsNCisJbXNvLXN0eWxlLWxvY2tlZDp5ZXM7DQorCW1zby1zdHlsZS1saW5rOiJCYWxsb29uIFRleHQiOw0KKwltc28tYW5zaS1mb250LXNpemU6OC4wcHQ7DQorCW1zby1iaWRpLWZvbnQtc2l6ZTo4LjBwdDsNCisJZm9udC1mYW1pbHk6IlRhaG9tYSIsInNhbnMtc2VyaWYiOw0KKwltc28tYXNjaWktZm9udC1mYW1pbHk6VGFob21hOw0KKwltc28taGFuc2ktZm9udC1mYW1pbHk6VGFob21hOw0KKwltc28tYmlkaS1mb250LWZhbWlseTpUYWhvbWE7fQ0KKy5Nc29DaHBEZWZhdWx0DQorCXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCisJbXNvLWRlZmF1bHQtcHJvcHM6eWVzOw0KKwlmb250LXNpemU6MTAuMHB0Ow0KKwltc28tYW5zaS1mb250LXNpemU6MTAuMHB0Ow0KKwltc28tYmlkaS1mb250LXNpemU6MTAuMHB0O30NCitAcGFnZSBXb3JkU2VjdGlvbjENCisJe3NpemU6OC41aW4gMTEuMGluOw0KKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsNCisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsNCisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsNCisJbXNvLXBhcGVyLXNvdXJjZTowO30NCitkaXYuV29yZFNlY3Rpb24xDQorCXtwYWdlOldvcmRTZWN0aW9uMTt9DQorIC8qIExpc3QgRGVmaW5pdGlvbnMgKi8NCisgQGxpc3QgbDANCisJe21zby1saXN0LWlkOjYyMDY3MzU4Ow0KKwltc28tbGlzdC10ZW1wbGF0ZS1pZHM6LTE3NDk0MzA2Mjt9DQorQGxpc3QgbDA6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEI3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMC4wcHQ7DQorCWZvbnQtZmFtaWx5OlN5bWJvbDt9DQorQGxpc3QgbDA6bGV2ZWwyDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MS4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMDpsZXZlbDMNCisJe21zby1sZXZlbC10YWItc3RvcDoxLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwwOmxldmVsNA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDA6bGV2ZWw1DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6Mi41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMDpsZXZlbDYNCisJe21zby1sZXZlbC10YWItc3RvcDozLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwwOmxldmVsNw0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjMuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDA6bGV2ZWw4DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMDpsZXZlbDkNCisJe21zby1sZXZlbC10YWItc3RvcDo0LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwxDQorCXttc28tbGlzdC1pZDoxMjgwMTU5NDI7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczotOTA2ODEyMTQ7fQ0KK0BsaXN0IGwxOmxldmVsMQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOi41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMTpsZXZlbDINCisJe21zby1sZXZlbC10YWItc3RvcDoxLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwxOmxldmVsMw0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjEuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDE6bGV2ZWw0DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6Mi4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMTpsZXZlbDUNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwxOmxldmVsNg0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjMuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDE6bGV2ZWw3DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMTpsZXZlbDgNCisJe21zby1sZXZlbC10YWItc3RvcDo0LjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwxOmxldmVsOQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDINCisJe21zby1saXN0LWlkOjIxNjU1NjAwMDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOjkyNTkyNDQxMjt9DQorQGxpc3QgbDI6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEI3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMC4wcHQ7DQorCWZvbnQtZmFtaWx5OlN5bWJvbDt9DQorQGxpc3QgbDI6bGV2ZWwyDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEI3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6MS4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluOw0KKwltc28tYW5zaS1mb250LXNpemU6MTAuMHB0Ow0KKwlmb250LWZhbWlseTpTeW1ib2w7fQ0KK0BsaXN0IGwyOmxldmVsMw0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjEuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDI6bGV2ZWw0DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6Mi4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMjpsZXZlbDUNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwyOmxldmVsNg0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjMuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDI6bGV2ZWw3DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMjpsZXZlbDgNCisJe21zby1sZXZlbC10YWItc3RvcDo0LjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwyOmxldmVsOQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDMNCisJe21zby1saXN0LWlkOjU2MjQ0NjY5NDsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOjkxMzg5ODM2Njt9DQorQGxpc3QgbDM6bGV2ZWwxDQorCXttc28tbGV2ZWwtbnVtYmVyLWZvcm1hdDpidWxsZXQ7DQorCW1zby1sZXZlbC10ZXh0OlxGMEI3Ow0KKwltc28tbGV2ZWwtdGFiLXN0b3A6LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMC4wcHQ7DQorCWZvbnQtZmFtaWx5OlN5bWJvbDt9DQorQGxpc3QgbDM6bGV2ZWwyDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MS4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMzpsZXZlbDMNCisJe21zby1sZXZlbC10YWItc3RvcDoxLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwzOmxldmVsNA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDM6bGV2ZWw1DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6Mi41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMzpsZXZlbDYNCisJe21zby1sZXZlbC10YWItc3RvcDozLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGwzOmxldmVsNw0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjMuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDM6bGV2ZWw4DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsMzpsZXZlbDkNCisJe21zby1sZXZlbC10YWItc3RvcDo0LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw0DQorCXttc28tbGlzdC1pZDo3OTc4MDIxMzI7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczotMTk3MTE5MTMzNjt9DQorQGxpc3QgbDQ6bGV2ZWwxDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw0OmxldmVsMg0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjEuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDQ6bGV2ZWwzDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MS41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNDpsZXZlbDQNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw0OmxldmVsNQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDQ6bGV2ZWw2DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNDpsZXZlbDcNCisJe21zby1sZXZlbC10YWItc3RvcDozLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw0OmxldmVsOA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDQ6bGV2ZWw5DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNQ0KKwl7bXNvLWxpc3QtaWQ6OTA3MzA0MDY2Ow0KKwltc28tbGlzdC10ZW1wbGF0ZS1pZHM6MTk2OTc4MTUzMjt9DQorQGxpc3QgbDU6bGV2ZWwxDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw1OmxldmVsMg0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjEuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDU6bGV2ZWwzDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MS41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNTpsZXZlbDQNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw1OmxldmVsNQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDU6bGV2ZWw2DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNTpsZXZlbDcNCisJe21zby1sZXZlbC10YWItc3RvcDozLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw1OmxldmVsOA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDU6bGV2ZWw5DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNg0KKwl7bXNvLWxpc3QtaWQ6MTA1MDYxMzYxNjsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOi0xMDA5ODg2NzQ4O30NCitAbGlzdCBsNjpsZXZlbDENCisJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCisJbXNvLWxldmVsLXRleHQ6XEYwQjc7DQorCW1zby1sZXZlbC10YWItc3RvcDouNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjsNCisJbXNvLWFuc2ktZm9udC1zaXplOjEwLjBwdDsNCisJZm9udC1mYW1pbHk6U3ltYm9sO30NCitAbGlzdCBsNjpsZXZlbDINCisJe21zby1sZXZlbC1udW1iZXItZm9ybWF0OmJ1bGxldDsNCisJbXNvLWxldmVsLXRleHQ6XEYwQjc7DQorCW1zby1sZXZlbC10YWItc3RvcDoxLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47DQorCW1zby1hbnNpLWZvbnQtc2l6ZToxMC4wcHQ7DQorCWZvbnQtZmFtaWx5OlN5bWJvbDt9DQorQGxpc3QgbDY6bGV2ZWwzDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MS41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNjpsZXZlbDQNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw2OmxldmVsNQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDY6bGV2ZWw2DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNjpsZXZlbDcNCisJe21zby1sZXZlbC10YWItc3RvcDozLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw2OmxldmVsOA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDY6bGV2ZWw5DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNw0KKwl7bXNvLWxpc3QtaWQ6MTIzNDk3MDE5MzsNCisJbXNvLWxpc3QtdGVtcGxhdGUtaWRzOjIwNTU5MDQwMDI7fQ0KK0BsaXN0IGw3OmxldmVsMQ0KKwl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KKwltc28tbGV2ZWwtdGV4dDpcRjBCNzsNCisJbXNvLWxldmVsLXRhYi1zdG9wOi41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluOw0KKwltc28tYW5zaS1mb250LXNpemU6MTAuMHB0Ow0KKwlmb250LWZhbWlseTpTeW1ib2w7fQ0KK0BsaXN0IGw3OmxldmVsMg0KKwl7bXNvLWxldmVsLW51bWJlci1mb3JtYXQ6YnVsbGV0Ow0KKwltc28tbGV2ZWwtdGV4dDpcRjBCNzsNCisJbXNvLWxldmVsLXRhYi1zdG9wOjEuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjsNCisJbXNvLWFuc2ktZm9udC1zaXplOjEwLjBwdDsNCisJZm9udC1mYW1pbHk6U3ltYm9sO30NCitAbGlzdCBsNzpsZXZlbDMNCisJe21zby1sZXZlbC10YWItc3RvcDoxLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw3OmxldmVsNA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDc6bGV2ZWw1DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6Mi41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNzpsZXZlbDYNCisJe21zby1sZXZlbC10YWItc3RvcDozLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw3OmxldmVsNw0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjMuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDc6bGV2ZWw4DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsNzpsZXZlbDkNCisJe21zby1sZXZlbC10YWItc3RvcDo0LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw4DQorCXttc28tbGlzdC1pZDoxODQ2MDkyMjkwOw0KKwltc28tbGlzdC10ZW1wbGF0ZS1pZHM6LTc2ODU5MDg0Njt9DQorQGxpc3QgbDg6bGV2ZWwxDQorCXttc28tbGV2ZWwtc3RhcnQtYXQ6MjsNCisJbXNvLWxldmVsLXRhYi1zdG9wOi41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsODpsZXZlbDINCisJe21zby1sZXZlbC10YWItc3RvcDoxLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw4OmxldmVsMw0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjEuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDg6bGV2ZWw0DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6Mi4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsODpsZXZlbDUNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw4OmxldmVsNg0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjMuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDg6bGV2ZWw3DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsODpsZXZlbDgNCisJe21zby1sZXZlbC10YWItc3RvcDo0LjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw4OmxldmVsOQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDkNCisJe21zby1saXN0LWlkOjE4OTQ2NTY1NjY7DQorCW1zby1saXN0LXRlbXBsYXRlLWlkczoxMTk5OTgzODEyO30NCitAbGlzdCBsOTpsZXZlbDENCisJe21zby1sZXZlbC1zdGFydC1hdDoyOw0KKwltc28tbGV2ZWwtdGFiLXN0b3A6LjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw5OmxldmVsMg0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjEuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDk6bGV2ZWwzDQorCXttc28tbGV2ZWwtdGFiLXN0b3A6MS41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsOTpsZXZlbDQNCisJe21zby1sZXZlbC10YWItc3RvcDoyLjBpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw5OmxldmVsNQ0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjIuNWluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDk6bGV2ZWw2DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6My4waW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitAbGlzdCBsOTpsZXZlbDcNCisJe21zby1sZXZlbC10YWItc3RvcDozLjVpbjsNCisJbXNvLWxldmVsLW51bWJlci1wb3NpdGlvbjpsZWZ0Ow0KKwl0ZXh0LWluZGVudDotLjI1aW47fQ0KK0BsaXN0IGw5OmxldmVsOA0KKwl7bXNvLWxldmVsLXRhYi1zdG9wOjQuMGluOw0KKwltc28tbGV2ZWwtbnVtYmVyLXBvc2l0aW9uOmxlZnQ7DQorCXRleHQtaW5kZW50Oi0uMjVpbjt9DQorQGxpc3QgbDk6bGV2ZWw5DQorCXttc28tbGV2ZWwtdGFiLXN0b3A6NC41aW47DQorCW1zby1sZXZlbC1udW1iZXItcG9zaXRpb246bGVmdDsNCisJdGV4dC1pbmRlbnQ6LS4yNWluO30NCitvbA0KKwl7bWFyZ2luLWJvdHRvbTowaW47fQ0KK3VsDQorCXttYXJnaW4tYm90dG9tOjBpbjt9DQorLS0+DQorPC9zdHlsZT48IS0tW2lmIGd0ZSBtc28gMTBdPg0KKzxzdHlsZT4NCisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCisgdGFibGUuTXNvTm9ybWFsVGFibGUNCisJe21zby1zdHlsZS1uYW1lOiJUYWJsZSBOb3JtYWwiOw0KKwltc28tdHN0eWxlLXJvd2JhbmQtc2l6ZTowOw0KKwltc28tdHN0eWxlLWNvbGJhbmQtc2l6ZTowOw0KKwltc28tc3R5bGUtbm9zaG93OnllczsNCisJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KKwltc28tc3R5bGUtcWZvcm1hdDp5ZXM7DQorCW1zby1zdHlsZS1wYXJlbnQ6IiI7DQorCW1zby1wYWRkaW5nLWFsdDowaW4gNS40cHQgMGluIDUuNHB0Ow0KKwltc28tcGFyYS1tYXJnaW46MGluOw0KKwltc28tcGFyYS1tYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQorCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsNCisJZm9udC1zaXplOjEwLjBwdDsNCisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsInNlcmlmIjt9DQorPC9zdHlsZT4NCis8IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4NCisgPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3BpZG1heD0iNzE3MCIvPg0KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KKyA8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+DQorICA8bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIvPg0KKyA8L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+PC9oZWFkPg0KKzxib2R5IHN0eWxlPSIiIGxhbmc9IkVOLVVTIiBsaW5rPSJibHVlIiB2bGluaz0iYmx1ZSI+DQorDQorPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4NCisNCis8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICZxdW90O0FyaWFsJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorDQorPGRpdiBhbGlnbj0iY2VudGVyIj4NCisNCis8dGFibGUgY2xhc3M9Ik1zb05vcm1hbFRhYmxlIiBzdHlsZT0id2lkdGg6IDY3NXB0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI5MDAiPg0KKyA8dGJvZHk+PHRyIHN0eWxlPSIiPg0KKyAgPHRkIHN0eWxlPSJwYWRkaW5nOiAwaW47IiB2YWxpZ249InRvcCI+DQorICA8dGFibGUgY2xhc3M9Ik1zb05vcm1hbFRhYmxlIiBzdHlsZT0id2lkdGg6IDY3NXB0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI5MDAiPg0KKyAgIDx0Ym9keT48dHIgc3R5bGU9IiI+DQorICAgIDx0ZCBzdHlsZT0icGFkZGluZzogMGluIDUuNHB0OyIgdmFsaWduPSJ0b3AiPg0KKyAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA4cHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtBcmlhbCZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyBjb2xvcjogYmx1ZTsiPjxhIGhyZWY9Ii4uLy4uL1JlbGVhc2VfTm90ZXMuaHRtbCI+QmFjayB0byBSZWxlYXNlIHBhZ2U8L2E+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7Ij48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQorICAgIDwvdGQ+DQorICAgPC90cj4NCisgICA8dHIgc3R5bGU9IiI+DQorICAgIDx0ZCBzdHlsZT0icGFkZGluZzogMS41cHQ7Ij4NCisgICAgPGgxIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwLjI1aW47IHRleHQtYWxpZ246IGNlbnRlcjsiIGFsaWduPSJjZW50ZXIiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDIwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiByZ2IoNTEsIDEwMiwgMjU1KTsiPlJlbGVhc2UgTm90ZXMgZm9yIFNUTTMyRjJ4eCBTdGFuZGFyZA0KKyAgICBQZXJpcGhlcmFscyBMaWJyYXJ5IERyaXZlcnM8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMjBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPjxvOnA+PC9vOnA+PC9zcGFuPjwvaDE+DQorICAgIDxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IiBhbGlnbj0iY2VudGVyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7QXJpYWwmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsgY29sb3I6IGJsYWNrOyI+Q29weXJpZ2h0DQorICAgIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij48dTE6cD48L3UxOnA+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyIgYWxpZ249ImNlbnRlciI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O0FyaWFsJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPjxpbWcgaWQ9Il94MDAwMF9pMTAyNiIgc3JjPSIuLi8uLi9faHRtcmVzYy9sb2dvLmJtcCIgYm9yZGVyPSIwIiBoZWlnaHQ9IjY1IiB3aWR0aD0iODYiPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyI+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgICA8L3RkPg0KKyAgIDwvdHI+DQorICA8L3Rib2R5PjwvdGFibGU+DQorICA8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6ICZxdW90O0FyaWFsJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGRpc3BsYXk6IG5vbmU7Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQorICA8dGFibGUgY2xhc3M9Ik1zb05vcm1hbFRhYmxlIiBzdHlsZT0id2lkdGg6IDY3NXB0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjkwMCI+DQorICAgPHRib2R5Pjx0ciBzdHlsZT0iIj4NCisgICAgPHRkIHN0eWxlPSJwYWRkaW5nOiAwaW47IiB2YWxpZ249InRvcCI+DQorICAgIDxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJwdDsgY29sb3I6IHdoaXRlOyI+Q29udGVudHM8bzpwPjwvbzpwPjwvc3Bhbj48L2gyPg0KKyAgICA8b2wgc3R5bGU9Im1hcmdpbi10b3A6IDBpbjsiIHN0YXJ0PSIxIiB0eXBlPSIxIj4NCisgICAgIDxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyI+PGEgaHJlZj0iI0hpc3RvcnkiPlNUTTMyRjJ4eCZuYnNwO1N0YW5kYXJkIFBlcmlwaGVyYWxzIExpYnJhcnkgRHJpdmVycw0KKyAgICAgICAgIHVwZGF0ZSBIaXN0b3J5PC9hPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+DQorICAgICA8bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsiPjxhIGhyZWY9IiNMaWNlbnNlIj5MaWNlbnNlPC9hPjxvOnA+PC9vOnA+PC9zcGFuPjwvbGk+DQorICAgIDwvb2w+DQorICAgIDxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyI+PGEgbmFtZT0iSGlzdG9yeSI+PC9hPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiB3aGl0ZTsiPlNUTTMyRjJ4eA0KKyAgICBTdGFuZGFyZCBQZXJpcGhlcmFscyBMaWJyYXJ5IERyaXZlcnMmbmJzcDsgdXBkYXRlIEhpc3Rvcnk8L3NwYW4+PC9oMj48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE2N3B4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS4xLjIgLyAwNS1NYXJjaC0yMDEyPG86cD48L286cD48L3NwYW4+PC9oMz4NCisgICAgICAgICAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluDQorQ2hhbmdlczxvOnA+PC9vOnA+PC9zcGFuPjwvdT48L2I+PC9wPg0KKw0KKyAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BbGwgc291cmNlIGZpbGVzOiZuYnNwO2xpY2Vuc2UgZGlzY2xhaW1lciB0ZXh0IHVwZGF0ZSBhbmQgYWRkIGxpbmsgdG8gdGhlIExpY2Vuc2UgZmlsZSBvbiBTVCBJbnRlcm5ldC48L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfZGNtaS5jPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5EQ01JX0dldEZsYWdTdGF0dXMoKTwvc3Bhbj4gZnVuY3Rpb246IGZpeCB0ZXN0IGNvbmRpdGlvbiBvbiBSSVNSIHJlZ2lzdGVyLCB1c2UmbmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aWYgKGRjbWlyZWcgPT0gMHgwMCk8L3NwYW4+IGluc3RlYWQgb2YmbmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+aWYgKGRjbWlyZWcgPT0gMHgwMSk8L3NwYW4+PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfcHdyLmM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlBXUl9QVkRMZXZlbENvbmZpZygpPC9zcGFuPg0KK2Z1bmN0aW9uOiByZW1vdmUgdmFsdWUgb2YgdGhlIHZvbHRhZ2UgdGhyZXNob2xkIGNvcnJlc3BvbmRpbmcgdG8gZWFjaA0KK1BWRCBkZXRlY3Rpb24gbGV2ZWwsIHVzZXIgc2hvdWxkIHJlZmVyIHRvIHRoZSBlbGVjdHJpY2FsDQorY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBTVE0zMiBkZXZpY2UmbmJzcDtkYXRhc2hlZXQgdG8gaGF2ZSB0aGUgY29ycmVjdA0KK3ZhbHVlPC9zcGFuPjwvbGk+PC91bD48L3VsPjxoMyBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyBtYXJnaW4tcmlnaHQ6IDUwMHB0OyB3aWR0aDogMTc2cHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogQXJpYWw7IGNvbG9yOiB3aGl0ZTsiPlYxLjEuMSAvIDI4LURlY2VtYmVyLTIwMTE8bzpwPjwvbzpwPjwvc3Bhbj48L2gzPjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW46IDQuNXB0IDBjbSA0LjVwdCAxOHB0OyI+PGIgc3R5bGU9IiI+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPk1haW4NCitDaGFuZ2VzPG86cD48L286cD48L3NwYW4+PC91PjwvYj48L3A+DQorPHVsIHN0eWxlPSJtYXJnaW4tdG9wOiAwY207IiB0eXBlPSJzcXVhcmUiPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFsbCBzb3VyY2UgZmlsZXM6IHVwZGF0ZSBkaXNjbGFpbWVyIHRvIGFkZCByZWZlcmVuY2UgdG8gdGhlJm5ic3A7bmV3IGxpY2Vuc2UgYWdyZWVtZW50PC9zcGFuPjwvbGk+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4NnB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS4xLjAgLyAwNy1PY3RvYmVyLTIwMTE8L3NwYW4+PC9oMz48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluDQorQ2hhbmdlczxvOnA+PC9vOnA+PC9zcGFuPjwvdT48L2I+PC9wPg0KKzx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfc2Rpby5oLy5jPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5TRElPX1NldFBvd2VyU3RhdGUoKTwvc3Bhbj4gZnVuY3Rpb246IGZpeCBQT1dFUiByZWdpc3RlciBjb25maWd1cmF0aW9uLCBvbmx5IG9uZSBhY2Nlc3MgKGZvciByZWFkIG9yIHdyaXRlKSBpcyBhbGxvd2VkPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfdXNhcnQuaC8uYzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5VcGRhdGUgcHJvY2VkdXJlIHRvIGNoZWNrIG9uJm5ic3A7b3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgcGVuZGluZyBiaXQsIGRlZmluZXMgZm9yIHRoZSBmb2xsb3dpbmcgZmxhZyBhcmUgYWRkZWQ6PC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5VU0FSVF9JVF9PUkVfUlg6PC9zcGFuPiB0aGlzIGZsYWcgaXMgc2V0IGlmJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+b3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQ8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij4gb2NjdXJzIGFuZCZuYnNwO1JYTkVJRSBiaXQgaXMgc2V0PC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlVTQVJUX0lUX09SRV9FUjo8L3NwYW4+IDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPnRoaXMgZmxhZyBpcyZuYnNwO3NldCBpZiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPm92ZXJydW4gZXJyb3IgaW50ZXJydXB0PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+IG9jY3VycyBhbmQgRUlFIGJpdCBpcyBzZXQ8L3NwYW4+PC9saT48L3VsPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2kyYy5oPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFkZCB0ZXN0IG9uIEkyQzMgaW4gPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPklTX0kyQ19BTExfUEVSSVBIKCk8L3NwYW4+IG1hY3JvPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfdGltLmM8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlRJTV9VcGRhdGVSZXF1ZXN0Q29uZmlnKCk6Jm5ic3A7PC9zcGFuPmNvcnJlY3QgZnVuY3Rpb24gaGVhZGVyJ3MgY29tbWVudCZuYnNwOzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5USU1fSUNJbml0KCk6IDwvc3Bhbj5hZGQmbmJzcDthc3NlcnQgbWFjcm9zIHRvIHRlc3QmbmJzcDtpZiB0aGUgcGFzc2VkIFRJTSBwYXJhbWV0ZXIgaGFzIGNoYW5uZWwgMiwgMyBvciA0PC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfcnRjLmM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+UmVtb3ZlIHVzZWxlc3MgY29kZSBmcm9tIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5SVENfR2V0RGF0ZSgpPC9zcGFuPiBmdW5jdGlvbjwvc3Bhbj48L2xpPjwvdWw+PC91bD48aDMgc3R5bGU9ImJhY2tncm91bmQ6IHJnYig1MSwgMTAyLCAyNTUpIG5vbmUgcmVwZWF0IHNjcm9sbCAwJSA1MCU7IC1tb3otYmFja2dyb3VuZC1jbGlwOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyAtbW96LWJhY2tncm91bmQtaW5saW5lLXBvbGljeTogaW5pdGlhbDsgbWFyZ2luLXJpZ2h0OiA1MDBwdDsgd2lkdGg6IDE4NnB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IEFyaWFsOyBjb2xvcjogd2hpdGU7Ij5WMS4wLjAgLyAxOC1BcHJpbC0yMDExPC9zcGFuPjwvaDM+PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGNtIDQuNXB0IDE4cHQ7Ij48YiBzdHlsZT0iIj48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TWFpbg0KK0NoYW5nZXM8bzpwPjwvbzpwPjwvc3Bhbj48L3U+PC9iPjwvcD4NCis8dWwgc3R5bGU9Im1hcmdpbi10b3A6IDBjbTsiIHR5cGU9InNxdWFyZSI+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+Rmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZSZuYnNwO2ZvciA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc3R5bGU6IGl0YWxpYzsiPlNUTTMyRjJ4eCBkZXZpY2VzPC9zcGFuPjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFsbCBkcml2ZXJzPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPlVwZGF0ZSBmaWxlIGFuZCBmdW5jdGlvbidzIGhlYWRlciBjb21tZW50cyB0byBhZGQgbW9yZSBleHBsYW5hdGlvbiBhbmQgZml4IERveHlnZW4gdGFncyBmb3JtYXR0aW5nPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3lzY2ZnPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+LmgvLmM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+QWRkIDIgZnVuY3Rpb25zIGZvciZuYnNwO0NvbXBlbnNhdGlvbiBDZWxsIG1hbmFnZW1lbnQ6PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPjxicj48L3NwYW4+PC9zcGFuPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+dm9pZCBTWVNDRkdfQ29tcGVuc2F0aW9uQ2VsbENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOyA8YnI+RmxhZ1N0YXR1cyBTWVNDRkdfR2V0Q29tcGVuc2F0aW9uQ2VsbFN0YXR1cyh2b2lkKTs8L3NwYW4+PC9zcGFuPjwvZGl2PjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfcnRjLmg8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlJUQ19EYXRlVHlwZURlZiA8L3NwYW4+c3RydWN0dXJlOiZuYnNwO2NoYW5nZSA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+UlRDX01vbnRoPC9zcGFuPiBhbmQgPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlJUQ19XZWVrRGF5PC9zcGFuPiBtZW1iZXJzIHNpemUgdG8gOGJpdCAoaW5zdGVhZCBvZiAzMmJpdCk8L3NwYW4+PC9saT48L3VsPjwvdWw+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48L3NwYW4+PGgzIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2IoNTEsIDEwMiwgMjU1KSBub25lIHJlcGVhdCBzY3JvbGwgMCUgNTAlOyAtbW96LWJhY2tncm91bmQtY2xpcDogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLW9yaWdpbjogaW5pdGlhbDsgLW1vei1iYWNrZ3JvdW5kLWlubGluZS1wb2xpY3k6IGluaXRpYWw7IG1hcmdpbi1yaWdodDogNTAwcHQ7IHdpZHRoOiAxODZweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+VjEuMC4wUkMxIC8gMTgtTWFyY2gtMjAxMTwvc3Bhbj48L2gzPjxiIHN0eWxlPSIiPjwvYj48cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luOiA0LjVwdCAwY20gNC41cHQgMThwdDsiPjxiIHN0eWxlPSIiPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5NYWluDQorQ2hhbmdlczxvOnA+PC9vOnA+PC9zcGFuPjwvdT48L2I+PC9wPg0KKzx1bCBzdHlsZT0ibWFyZ2luLXRvcDogMGNtOyIgdHlwZT0ic3F1YXJlIj48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5PZmZpY2lhbCB2ZXJzaW9uIChWMS4wLjApIFJlbGVhc2UgQ2FuZGlkYXRlIDE8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BbGwgZHJpdmVyczwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BZGQgbW9yZSBjb21tZW50cyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVzZSB0aGUgZHJpdmVyIGFuZCB0aGUgZnVuY3Rpb25zIEFQSTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkRlbGV0ZSZuYnNwO3JlZ2lzdGVycyBkZWZpbml0aW9uIGZyb20gPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPnN0bTMyZjJ4eF9wcHAuYzwvc3Bhbj4gYW5kIHVzZSBkZWZpbmVzIHdpdGhpbiA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+c3RtMzJmMnh4LmggPC9zcGFuPmZpbGU8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPnN0bTMyZjJ4eF9yY2MuaC8uYzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+UkNDX1BMTENvbmZpZygpPC9zcGFuPiBmdW5jdGlvbiB1cGRhdGVkIHRvIHN1cHBvcnQgb25seSBTaWxpY29uJm5ic3A7UmV2aXNpb25CIGFuZCBSZXZpc2lvblkgKFBMTFIgcGFyYW1ldGVyIHJlbW92ZWQpPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfc3BpLmM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPkkyU19Jbml0KCk8L3NwYW4+IGZ1bmN0aW9uIHVwZGF0ZWQgdG8gc3VwcG9ydCZuYnNwO29ubHkgdGhlIEkyUyBjbG9jayBzY2hlbWUgYXZhaWxhYmxlIGluIFNpbGljb24gUmV2aXNpb25CIGFuZCBSZXZpc2lvblk8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPnN0bTMyZjJ4eF9jYW4uaC8uYzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BZGQgNSBuZXcgZnVuY3Rpb25zPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjMNCituZXcgZnVuY3Rpb25zIGNvbnRyb2xsaW5nIHRoZSBjb3VudGVyIGVycm9yczogPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPkNBTl9HZXRMYXN0RXJyb3JDb2RlKCk8L3NwYW4+LA0KKzxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5DQU5fR2V0UmVjZWl2ZUVycm9yQ291bnRlcigpPC9zcGFuPiBhbmQgPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPkNBTl9HZXRMU0JUcmFuc21pdEVycm9yQ291bnRlcigpPC9zcGFuPjwvc3Bhbj48L2xpPjwvdWw+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjEgbmV3IGZ1bmN0aW9uIHRvIHNlbGVjdCB0aGUgQ0FOIG9wZXJhdGluZyBtb2RlOiA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+Q0FOX09wZXJhdGluZ01vZGVSZXF1ZXN0KCk8L3NwYW4+PC9zcGFuPjwvbGk+PC91bD48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+MSBuZXcgZnVuY3Rpb24gdG8gc3VwcG9ydCBDQU4gVFQgbW9kZTogPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPkNBTl9UVENvbU1vZGVDbWQoKTwvc3Bhbj48L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48YnI+DQorICA8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5DQU5fVHJhbnNtaXRTdGF0dXMoKTwvc3Bhbj4gZnVuY3Rpb24gdXBkYXRlZCB0byBzdXBwb3J0IGFsbCBDQU4gdHJhbnNtaXQgaW50ZXJtZWRpYXRlIHN0YXRlczwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2FkYy5oLy5jPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPk5hbWUgb2YgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiZuYnNwOzxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5BRENfRE1BQWNjZXNzTW9kZTwvc3Bhbj4gcGFyYW1ldGVyIG1vZGlmaWVkIGFzIGJlbG93Ojxicj48L3NwYW4+PGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDQwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFEQ19ETUFBY2Nlc3NNb2RlX0hhbGZXb3JkICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0mZ3Q7IEFEQ19ETUFBY2Nlc3NNb2RlXzEmbmJzcDsgPC9zcGFuPjxicj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFEQ19ETUFBY2Nlc3NNb2RlX1R3b0hhbGZXb3JkcyAtJmd0OyBBRENfRE1BQWNjZXNzTW9kZV8yIDwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BRENfRE1BQWNjZXNzTW9kZV9Ud29CeXRlcyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtJmd0OyBBRENfRE1BQWNjZXNzTW9kZV8zPC9zcGFuPjxicj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjwvc3Bhbj48L2Rpdj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5BRENfTXVsdGlNb2RlRE1BUmVxdWVzdEFmdGVyTGFzdFRyYW5zZmVyQ21kKCk6IDwvc3Bhbj50aGUgMXN0IHBhcmFtZXRlciA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+QURDeDwvc3Bhbj4gcmVtb3ZlZCZuYnNwOzwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2NyeXAuaC8uYzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+Q1JZUF9HZXRJVFN0YXR1cygpIDwvc3Bhbj5mdW5jdGlvbiBjb2RpbmcgdXBkYXRlZDwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFkZCAyIGZ1bmN0aW9ucyBmb3IgQ1JZUCBDb250ZXh0IHN3YXBwaW5nOjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48YnI+PC9zcGFuPjwvc3Bhbj48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogNDBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPkVycm9yU3RhdHVzIENSWVBfU2F2ZUNvbnRleHQoQ1JZUF9Db250ZXh0KiBDUllQX0NvbnRleHRTYXZlLCBDUllQX0tleUluaXRUeXBlRGVmKiBDUllQX0tleUluaXRTdHJ1Y3QpOzwvc3Bhbj48L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPnZvaWQgQ1JZUF9SZXN0b3JlQ29udGV4dChDUllQX0NvbnRleHQqIENSWVBfQ29udGV4dFJlc3RvcmUpOzwvc3Bhbj48L3NwYW4+PC9kaXY+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5OYW1lIG9mIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YmbmJzcDs8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+Q1JZUF9ETUFSZXE8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+IHBhcmFtZXRlciBtb2RpZmllZCBhcyBiZWxvdzo8L3NwYW4+PGJyPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+Q1JZUF9ETUFSZXFfUnggLSZndDsgQ1JZUF9ETUFSZXFfRGF0YUlOPC9zcGFuPjwvc3Bhbj48YnI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+Q1JZUF9ETUFSZXFfVHggLSZndDsgQ1JZUF9ETUFSZXFfRGF0YU9VVCZuYnNwOzwvc3Bhbj48L3NwYW4+PC9kaXY+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFkZCB0aHJlZSBkcml2ZXJzIHRvIHByb3ZpZGUgaGlnaCBsZXZlbCBmdW5jdGlvbnMgZm9yIEFFUywgREVTIGFuZCBUREVTOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfY3J5cF9hZXMuYzogcHJvdmlkZXMgaGlnaCBsZXZlbCBmdW5jdGlvbnMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdCBhbiZuYnNwO2lucHV0IG1lc3NhZ2UgdXNpbmcgQUVTIGluIEVDQi9DQkMvQ1RSIG1vZGVzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2NyeXBfZGVzLmM6IHByb3ZpZGVzIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQgYW4mbmJzcDtpbnB1dCBtZXNzYWdlIHVzaW5nIERFUyBpbiBFQ0IvQ0JDIG1vZGVzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2NyeXBfdGRlcy5jOiBwcm92aWRlcyBoaWdoIGxldmVsIGZ1bmN0aW9ucyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0IGFuJm5ic3A7aW5wdXQgbWVzc2FnZSB1c2luZyBUREVTIGluIEVDQi9DQkMgbW9kZXM8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5UaGVzZSBkcml2ZXJzJm5ic3A7dXNlcyB0aGUgc3RtMzJmMnh4X2NyeXAuYy8uaCBkcml2ZXIgdG8gYWNjZXNzIHRoZSBTVE0zMkYyeHggQ1JZUCBwZXJpcGhlcmFsPGJyPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2hhc2guaC8uYzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+SEFTSF9HZXRJVFN0YXR1cygpPC9zcGFuPiBmdW5jdGlvbiBjb2RpbmcgdXBkYXRlZDwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFkZCAyIGZ1bmN0aW9ucyBmb3IgSEFTSCBDb250ZXh0IHN3YXBwaW5nOjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48YnI+PC9zcGFuPjwvc3Bhbj48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogNDBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPnZvaWQgSEFTSF9Db250ZXh0U2F2aW5nKEhBU0hfQ29udGV4dCogSEFTSF9Db250ZXh0U2F2ZSk7PGJyPnZvaWQgSEFTSF9Db250ZXh0UmVzdG9yaW5nKEhBU0hfQ29udGV4dCogSEFTSF9Db250ZXh0UmVzdG9yZSk8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPjwvc3Bhbj48L3NwYW4+PC9kaXY+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkFkZCB0d28gZHJpdmVycyB0byBwcm92aWRlIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIGZvciZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPlNIQTE8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij4gYW5kJm5ic3A7PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+TUQ1PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+Ojwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfaGFzaF9zaGExLmM6IHByb3ZpZGVzIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIHRvIGNvbXB1dGUgdGhlIEhBU0ggU0hBMSBhbmQgSE1BQyBTSEExIERpZ2VzdCBvZiBhbiBpbnB1dCBtZXNzYWdlPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2hhc2hfbWQ1LmM6IHByb3ZpZGVzIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIHRvIGNvbXB1dGUgdGhlIEhBU0ggTUQ1IGFuZCBITUFDIE1ENSBEaWdlc3Qgb2YgYW4gaW5wdXQgbWVzc2FnZTwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPlRoZXNlIGRyaXZlcnMmbmJzcDt1c2VzIHRoZSBzdG0zMmYyeHhfaGFzaC5jLy5oIGRyaXZlciB0byBhY2Nlc3MgdGhlIFNUTTMyRjJ4eCBIQVNIIHBlcmlwaGVyYWw8L3NwYW4+PC9saT48L3VsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPnN0bTMyZjJ4eF9ybmcuaC8uYzwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+Uk5HX0dldElUU3RhdHVzKCkmbmJzcDs8L3NwYW4+ZnVuY3Rpb24gY29kaW5nIHVwZGF0ZWQ8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5BZGQgbmV3IGZ1bmN0aW9uOjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48YnI+PC9zcGFuPjwvc3Bhbj48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogNDBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPnZvaWQgUk5HX0NsZWFyRmxhZyh1aW50OF90IFJOR19GTEFHKTs8L3NwYW4+PC9zcGFuPjwvZGl2PjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfZ3Bpby5oPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPkNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5HUElPX01vZGVfQUlOIDwvc3Bhbj5ieSA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+R1BJT19Nb2RlX0FOPC9zcGFuPjwvc3Bhbj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X3J0Yy5oLy5jPC9zcGFuPjwvbGk+PHVsPjxsaSBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0iY29sb3I6IGJsYWNrOyBtYXJnaW4tdG9wOiA0LjVwdDsgbWFyZ2luLWJvdHRvbTogNC41cHQ7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPlJlbmFtZSB0aGUgZnVuY3Rpb24gPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlJUQ19EaWdpdGFsQ2FsaWJDb25maWcoKTwvc3Bhbj4gdG8gPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlJUQ19Db2Fyc2VDYWxpYkNvbmZpZygpIDwvc3Bhbj4obm8gY2hhbmdlIG9uIHRoZSBwYXJhbWV0ZXIgbmFtZSk8L3NwYW4+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5SZW5hbWUgdGhlIGZ1bmN0aW9uIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5SVENfRGlnaXRhbENhbGliQ21kKCk8L3NwYW4+IHRvIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5SVENfQ29hcnNlQ2FsaWJDbWQoKSA8L3NwYW4+KG5vIGNoYW5nZSBvbiB0aGUgcGFyYW1ldGVyIG5hbWUpPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+QWRkIDMgZnVuY3Rpb25zOjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij48YnI+PC9zcGFuPjwvc3Bhbj48ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogNDBweDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPnZvaWQgUlRDX0RhdGVTdHJ1Y3RJbml0KFJUQ19EYXRlVHlwZURlZiogUlRDX0RhdGVTdHJ1Y3QpOzxicj52b2lkIFJUQ19UaW1lU3RydWN0SW5pdChSVENfVGltZVR5cGVEZWYqIFJUQ19UaW1lU3RydWN0KTs8YnI+dm9pZCBSVENfQWxhcm1TdHJ1Y3RJbml0KFJUQ19BbGFybVR5cGVEZWYqIFJUQ19BbGFybVN0cnVjdCk7PC9zcGFuPjwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPiZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsiPjwvc3Bhbj48L2Rpdj48L2xpPjwvdWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+c3RtMzJmMnh4X2ZsYXNoLmgvLmM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+TmFtZSBvZiB0aGUgcG9zc2libGUgdmFsdWVzIG9mIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5PQl9CT1I8L3NwYW4+IHBhcmFtZXRlciBtb2RpZmllZCBhcyBiZWxvdzo8YnI+PC9zcGFuPjxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0MHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5PQl9CT1JfTGV2ZWxfMyZuYnNwOyZuYnNwOyAmbmJzcDstJmd0OyBPQl9CT1JfTEVWRUwzPGJyPk9CX0JPUl9MZXZlbF8yJm5ic3A7Jm5ic3A7ICZuYnNwOy0mZ3Q7IE9CX0JPUl9MRVZFTDI8YnI+T0JfQk9SX0xldmVsXzEmbmJzcDsmbmJzcDsgJm5ic3A7LSZndDsgT0JfQk9SX0xFVkVMMTxicj5PQl9CT1JfTGV2ZWxfT2ZmICZuYnNwOy0mZ3Q7IE9CX0JPUl9PRkY8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48L3NwYW4+PC9kaXY+PC9saT48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+RkxBU0hfT0JfR2V0Qk9SKCk8L3NwYW4+Jm5ic3A7ZnVuY3Rpb24gdXBkYXRlZCB0byByZXR1cm4gdGhlIEJPUiBsZXZlbCB2YWx1ZSBhcyBkZWZpbmVkIGluIE9QVENSIHJlZ2lzdGVyPC9zcGFuPjwvbGk+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHg8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5faTJjLmgvLmM8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+QWRkIDEgbmV3IGZ1bmN0aW9uOjwvc3Bhbj48L2xpPjx1bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+STJDX05BQ0tQb3NpdGlvbkNvbmZpZygpPC9zcGFuPjoNCitUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHNhbWUgYml0IChQT1MpIGFzIDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5JMkNfUEVDUG9zaXRpb25Db25maWcoKTwvc3Bhbj4NCitidXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiBJMkMgbW9kZSB3aGlsZSA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+STJDX1BFQ1Bvc2l0aW9uQ29uZmlnKCk8L3NwYW4+IGlzDQoraW50ZW5kZWQgdG8gdXNlZCBpbiBTTUJVUyBtb2RlLjwvc3Bhbj48L2xpPjwvdWw+PC91bD48bGkgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9ImNvbG9yOiBibGFjazsgbWFyZ2luLXRvcDogNC41cHQ7IG1hcmdpbi1ib3R0b206IDQuNXB0OyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ij5zdG0zMmYyeHhfdGltLmg8L3NwYW4+PC9saT48dWw+PGxpIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJjb2xvcjogYmxhY2s7IG1hcmdpbi10b3A6IDQuNXB0OyBtYXJnaW4tYm90dG9tOiA0LjVwdDsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyI+Q2hhbmdlIHRoZSA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+VElNX0RNQUJ1cnN0TGVuZ3RoX3hCeXRlczwvc3Bhbj4gZGVmaW5pdGlvbnMgdG8gPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlRJTV9ETUFCdXJzdExlbmd0aF94VGFuc2ZlcnM8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBBcmlhbDsgY29sb3I6IHdoaXRlOyI+PG86cD48L286cD48L3NwYW4+PC9saT48L3VsPjwvdWw+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAmcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssJnF1b3Q7c2VyaWYmcXVvdDs7Ij48L3NwYW4+DQorICAgIDxoMiBzdHlsZT0iYmFja2dyb3VuZDogcmdiKDUxLCAxMDIsIDI1NSkgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDUwJTsgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1vcmlnaW46IGluaXRpYWw7IC1tb3otYmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiBpbml0aWFsOyI+PGEgbmFtZT0iTGljZW5zZSI+PC9hPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHQ7IGNvbG9yOiB3aGl0ZTsiPkxpY2Vuc2U8bzpwPjwvbzpwPjwvc3Bhbj48L2gyPg0KKyAgICA8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyBjb2xvcjogYmxhY2s7Ij5MaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyZuYnNwOzwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyBjb2xvcjogYmxhY2s7Ij5wYWNrYWdlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPiBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6PGJyPjxicj48L3NwYW4+PC9wPjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92MiI+aHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92MjwvYT48L3NwYW4+PGJyPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7IGNvbG9yOiBibGFjazsiPjwvc3Bhbj48L2Rpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogJnF1b3Q7VmVyZGFuYSZxdW90OywmcXVvdDtzYW5zLXNlcmlmJnF1b3Q7OyBjb2xvcjogYmxhY2s7Ij48YnI+VW5sZXNzDQorcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgPGJyPldJVEhPVVQNCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQ0KK3RoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLjwvc3Bhbj48ZGl2IGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IiBhbGlnbj0iY2VudGVyIj48c3BhbiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+DQorICAgIDxociBhbGlnbj0iY2VudGVyIiBzaXplPSIyIiB3aWR0aD0iMTAwJSI+DQorICAgIDwvc3Bhbj48L2Rpdj4NCisgICAgPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbjogNC41cHQgMGluIDQuNXB0IDAuMjVpbjsgdGV4dC1hbGlnbjogY2VudGVyOyIgYWxpZ249ImNlbnRlciI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6ICZxdW90O1ZlcmRhbmEmcXVvdDssJnF1b3Q7c2Fucy1zZXJpZiZxdW90OzsgY29sb3I6IGJsYWNrOyI+Rm9yDQorICAgIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gb24gPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiAmcXVvdDtWZXJkYW5hJnF1b3Q7LCZxdW90O3NhbnMtc2VyaWYmcXVvdDs7Ij5TVE0zMjxzcGFuIHN0eWxlPSJjb2xvcjogYmxhY2s7Ij4NCisgICAgTWljcm9jb250cm9sbGVycyB2aXNpdCA8L3NwYW4+PHU+PHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+PGEgaHJlZj0iaHR0cDovL3d3dy5zdC5jb20vaW50ZXJuZXQvbWN1L2ZhbWlseS8xNDEuanNwIiB0YXJnZXQ9Il9ibGFuayI+d3d3LnN0LmNvbS9TVE0zMjwvYT48L3NwYW4+PC91Pjwvc3Bhbj48c3BhbiBzdHlsZT0iY29sb3I6IGJsYWNrOyI+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgICA8L3RkPg0KKyAgIDwvdHI+DQorICA8L3Rib2R5PjwvdGFibGU+DQorICA8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyI+PG86cD48L286cD48L3NwYW4+PC9wPg0KKyAgPC90ZD4NCisgPC90cj4NCis8L3Rib2R5PjwvdGFibGU+DQorDQorPC9kaXY+DQorDQorPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQorDQorPC9kaXY+DQorDQorPC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvbWlzYy5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM0YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL21pc2MuaApAQCAtMCwwICsxLDE3OCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgbWlzYy5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIG1pc2NlbGxhbmVvdXMNCisgICogICAgICAgICAgZmlybXdhcmUgbGlicmFyeSBmdW5jdGlvbnMgKGFkZC1vbiB0byBDTVNJUyBmdW5jdGlvbnMpLg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fTUlTQ19IDQorI2RlZmluZSBfX01JU0NfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIE1JU0MNCisgICogQHsNCisgICovDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogDQorICAqIEBicmllZiAgTlZJQyBJbml0IFN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50OF90IE5WSUNfSVJRQ2hhbm5lbDsgICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBJUlEgY2hhbm5lbCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbiBlbnVtZXJhdG9yIG9mIEByZWYgSVJRbl9UeXBlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0aW9uIChGb3IgdGhlIGNvbXBsZXRlIFNUTTMyIERldmljZXMgSVJRIENoYW5uZWxzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCwgcGxlYXNlIHJlZmVyIHRvIHN0bTMyZjJ4eC5oIGZpbGUpICovDQorDQorICB1aW50OF90IE5WSUNfSVJRQ2hhbm5lbFByZWVtcHRpb25Qcmlvcml0eTsgIC8qITwgU3BlY2lmaWVzIHRoZSBwcmUtZW1wdGlvbiBwcmlvcml0eSBmb3IgdGhlIElSUSBjaGFubmVsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGluIE5WSUNfSVJRQ2hhbm5lbC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIDAgYW5kIDE1IGFzIGRlc2NyaWJlZCBpbiB0aGUgdGFibGUgQHJlZiBNSVNDX05WSUNfUHJpb3JpdHlfVGFibGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGxvd2VyIHByaW9yaXR5IHZhbHVlIGluZGljYXRlcyBhIGhpZ2hlciBwcmlvcml0eSAqLw0KKw0KKyAgdWludDhfdCBOVklDX0lSUUNoYW5uZWxTdWJQcmlvcml0eTsgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc3VicHJpb3JpdHkgbGV2ZWwgZm9yIHRoZSBJUlEgY2hhbm5lbCBzcGVjaWZpZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBOVklDX0lSUUNoYW5uZWwuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiAwIGFuZCAxNSBhcyBkZXNjcmliZWQgaW4gdGhlIHRhYmxlIEByZWYgTUlTQ19OVklDX1ByaW9yaXR5X1RhYmxlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBsb3dlciBwcmlvcml0eSB2YWx1ZSBpbmRpY2F0ZXMgYSBoaWdoZXIgcHJpb3JpdHkgKi8NCisNCisgIEZ1bmN0aW9uYWxTdGF0ZSBOVklDX0lSUUNoYW5uZWxDbWQ7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgSVJRIGNoYW5uZWwgZGVmaW5lZCBpbiBOVklDX0lSUUNoYW5uZWwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgZWl0aGVyIHRvIEVOQUJMRSBvciBESVNBQkxFICovICAgDQorfSBOVklDX0luaXRUeXBlRGVmOw0KKyANCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgTUlTQ19FeHBvcnRlZF9Db25zdGFudHMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBNSVNDX1ZlY3Rvcl9UYWJsZV9CYXNlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIE5WSUNfVmVjdFRhYl9SQU0gICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKyNkZWZpbmUgTlZJQ19WZWN0VGFiX0ZMQVNIICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApDQorI2RlZmluZSBJU19OVklDX1ZFQ1RUQUIoVkVDVFRBQikgKCgoVkVDVFRBQikgPT0gTlZJQ19WZWN0VGFiX1JBTSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZFQ1RUQUIpID09IE5WSUNfVmVjdFRhYl9GTEFTSCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgTUlTQ19TeXN0ZW1fTG93X1Bvd2VyIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIE5WSUNfTFBfU0VWT05QRU5EICAgICAgICAgICAgKCh1aW50OF90KTB4MTApDQorI2RlZmluZSBOVklDX0xQX1NMRUVQREVFUCAgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgTlZJQ19MUF9TTEVFUE9ORVhJVCAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikNCisjZGVmaW5lIElTX05WSUNfTFAoTFApICgoKExQKSA9PSBOVklDX0xQX1NFVk9OUEVORCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICgoTFApID09IE5WSUNfTFBfU0xFRVBERUVQKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgKChMUCkgPT0gTlZJQ19MUF9TTEVFUE9ORVhJVCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgTUlTQ19QcmVlbXB0aW9uX1ByaW9yaXR5X0dyb3VwIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIE5WSUNfUHJpb3JpdHlHcm91cF8wICAgICAgICAgKCh1aW50MzJfdCkweDcwMCkgLyohPCAwIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCBiaXRzIGZvciBzdWJwcmlvcml0eSAqLw0KKyNkZWZpbmUgTlZJQ19Qcmlvcml0eUdyb3VwXzEgICAgICAgICAoKHVpbnQzMl90KTB4NjAwKSAvKiE8IDEgYml0cyBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIGJpdHMgZm9yIHN1YnByaW9yaXR5ICovDQorI2RlZmluZSBOVklDX1ByaW9yaXR5R3JvdXBfMiAgICAgICAgICgodWludDMyX3QpMHg1MDApIC8qITwgMiBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgYml0cyBmb3Igc3VicHJpb3JpdHkgKi8NCisjZGVmaW5lIE5WSUNfUHJpb3JpdHlHcm91cF8zICAgICAgICAgKCh1aW50MzJfdCkweDQwMCkgLyohPCAzIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBiaXRzIGZvciBzdWJwcmlvcml0eSAqLw0KKyNkZWZpbmUgTlZJQ19Qcmlvcml0eUdyb3VwXzQgICAgICAgICAoKHVpbnQzMl90KTB4MzAwKSAvKiE8IDQgYml0cyBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGJpdHMgZm9yIHN1YnByaW9yaXR5ICovDQorDQorI2RlZmluZSBJU19OVklDX1BSSU9SSVRZX0dST1VQKEdST1VQKSAoKChHUk9VUCkgPT0gTlZJQ19Qcmlvcml0eUdyb3VwXzApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdST1VQKSA9PSBOVklDX1ByaW9yaXR5R3JvdXBfMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoR1JPVVApID09IE5WSUNfUHJpb3JpdHlHcm91cF8yKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChHUk9VUCkgPT0gTlZJQ19Qcmlvcml0eUdyb3VwXzMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEdST1VQKSA9PSBOVklDX1ByaW9yaXR5R3JvdXBfNCkpDQorDQorI2RlZmluZSBJU19OVklDX1BSRUVNUFRJT05fUFJJT1JJVFkoUFJJT1JJVFkpICAoKFBSSU9SSVRZKSA8IDB4MTApDQorDQorI2RlZmluZSBJU19OVklDX1NVQl9QUklPUklUWShQUklPUklUWSkgICgoUFJJT1JJVFkpIDwgMHgxMCkNCisNCisjZGVmaW5lIElTX05WSUNfT0ZGU0VUKE9GRlNFVCkgICgoT0ZGU0VUKSA8IDB4MDAwRkZGRkYpDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgTUlTQ19TeXNUaWNrX2Nsb2NrX3NvdXJjZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTeXNUaWNrX0NMS1NvdXJjZV9IQ0xLX0RpdjggICAgKCh1aW50MzJfdCkweEZGRkZGRkZCKQ0KKyNkZWZpbmUgU3lzVGlja19DTEtTb3VyY2VfSENMSyAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIElTX1NZU1RJQ0tfQ0xLX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gU3lzVGlja19DTEtTb3VyY2VfSENMSykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBTeXNUaWNrX0NMS1NvdXJjZV9IQ0xLX0RpdjgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK3ZvaWQgTlZJQ19Qcmlvcml0eUdyb3VwQ29uZmlnKHVpbnQzMl90IE5WSUNfUHJpb3JpdHlHcm91cCk7DQordm9pZCBOVklDX0luaXQoTlZJQ19Jbml0VHlwZURlZiogTlZJQ19Jbml0U3RydWN0KTsNCit2b2lkIE5WSUNfU2V0VmVjdG9yVGFibGUodWludDMyX3QgTlZJQ19WZWN0VGFiLCB1aW50MzJfdCBPZmZzZXQpOw0KK3ZvaWQgTlZJQ19TeXN0ZW1MUENvbmZpZyh1aW50OF90IExvd1Bvd2VyTW9kZSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFN5c1RpY2tfQ0xLU291cmNlQ29uZmlnKHVpbnQzMl90IFN5c1RpY2tfQ0xLU291cmNlKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fTUlTQ19IICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfYWRjLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2FkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTUyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2FkYy5oCkBAIC0wLDAgKzEsNjQ5IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfYWRjLmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgQURDIGZpcm13YXJlIA0KKyAgKiAgICAgICAgICBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0FEQ19IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9BRENfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEFEQw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEFEQyBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3QgQURDX1Jlc29sdXRpb247ICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgQURDIHJlc29sdXRpb24gZHVhbCBtb2RlLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX3Jlc29sdXRpb24gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgRnVuY3Rpb25hbFN0YXRlIEFEQ19TY2FuQ29udk1vZGU7ICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnZlcnNpb24gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBwZXJmb3JtZWQgaW4gU2NhbiAobXVsdGljaGFubmVscykgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBTaW5nbGUgKG9uZSBjaGFubmVsKSBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCB0byBFTkFCTEUgb3IgRElTQUJMRSAqLyANCisgIEZ1bmN0aW9uYWxTdGF0ZSBBRENfQ29udGludW91c0NvbnZNb2RlOyAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb252ZXJzaW9uIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcGVyZm9ybWVkIGluIENvbnRpbnVvdXMgb3IgU2luZ2xlIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIEVOQUJMRSBvciBESVNBQkxFLiAqLw0KKyAgdWludDMyX3QgQURDX0V4dGVybmFsVHJpZ0NvbnZFZGdlOyAgICAgIC8qITwgU2VsZWN0IHRoZSBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgYW5kDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgdGhlIHRyaWdnZXIgb2YgYSByZWd1bGFyIGdyb3VwLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBBRENfZXh0ZXJuYWxfdHJpZ2dlcl9lZGdlX2Zvcl9yZWd1bGFyX2NoYW5uZWxzX2NvbnZlcnNpb24gKi8NCisgIHVpbnQzMl90IEFEQ19FeHRlcm5hbFRyaWdDb252OyAgICAgICAgICAvKiE8IFNlbGVjdCB0aGUgZXh0ZXJuYWwgZXZlbnQgdXNlZCB0byB0cmlnZ2VyIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHN0YXJ0IG9mIGNvbnZlcnNpb24gb2YgYSByZWd1bGFyIGdyb3VwLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEFEQ19leHRyZW5hbF90cmlnZ2VyX3NvdXJjZXNfZm9yX3JlZ3VsYXJfY2hhbm5lbHNfY29udmVyc2lvbiAqLw0KKyAgdWludDMyX3QgQURDX0RhdGFBbGlnbjsgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEFEQyBkYXRhICBhbGlnbm1lbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGxlZnQgb3IgcmlnaHQuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgdmFsdWUgb2YgQHJlZiBBRENfZGF0YV9hbGlnbiAqLw0KKyAgdWludDhfdCAgQURDX05ick9mQ29udmVyc2lvbjsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgQURDIGNvbnZlcnNpb25zDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdpbGwgYmUgZG9uZSB1c2luZyB0aGUgc2VxdWVuY2VyIGZvcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhciBjaGFubmVsIGdyb3VwLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCByYW5nZSBmcm9tIDEgdG8gMTYuICovDQorfUFEQ19Jbml0VHlwZURlZjsNCisgIA0KKy8qKiANCisgICogQGJyaWVmICAgQURDIENvbW1vbiBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovIA0KK3R5cGVkZWYgc3RydWN0IA0KK3sNCisgIHVpbnQzMl90IEFEQ19Nb2RlOyAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIEFEQyB0byBvcGVyYXRlIGluIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXBlbmRlbnQgb3IgbXVsdGkgbW9kZS4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19Db21tb25fbW9kZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgIHVpbnQzMl90IEFEQ19QcmVzY2FsZXI7ICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjbG9jayANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBBREMuIFRoZSBjbG9jayBpcyBjb21tb24gZm9yIGFsbCB0aGUgQURDcy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX1ByZXNjYWxlciAqLw0KKyAgdWludDMyX3QgQURDX0RNQUFjY2Vzc01vZGU7ICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgRGlyZWN0IG1lbW9yeSBhY2Nlc3MgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgZm9yIG11bHRpIEFEQyBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEFEQ19EaXJlY3RfbWVtb3J5X2FjY2Vzc19tb2RlX2Zvcl9tdWx0aV9tb2RlICovDQorICB1aW50MzJfdCBBRENfVHdvU2FtcGxpbmdEZWxheTsgICAgICAgICAgLyohPCBDb25maWd1cmVzIHRoZSBEZWxheSBiZXR3ZWVuIDIgc2FtcGxpbmcgcGhhc2VzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEFEQ19kZWxheV9iZXR3ZWVuXzJfc2FtcGxpbmdfcGhhc2VzICovDQorICANCit9QURDX0NvbW1vbkluaXRUeXBlRGVmOw0KKw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBBRENfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIElTX0FEQ19BTExfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBBREMxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gQURDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IEFEQzMpKSAgDQorDQorLyoqIEBkZWZncm91cCBBRENfQ29tbW9uX21vZGUgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEFEQ19Nb2RlX0luZGVwZW5kZW50ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAgICAgIA0KKyNkZWZpbmUgQURDX0R1YWxNb2RlX1JlZ1NpbXVsdF9JbmplY1NpbXVsdCAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIEFEQ19EdWFsTW9kZV9SZWdTaW11bHRfQWx0ZXJUcmlnICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBBRENfRHVhbE1vZGVfSW5qZWNTaW11bHQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA1KQ0KKyNkZWZpbmUgQURDX0R1YWxNb2RlX1JlZ1NpbXVsdCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNikNCisjZGVmaW5lIEFEQ19EdWFsTW9kZV9JbnRlcmwgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDcpDQorI2RlZmluZSBBRENfRHVhbE1vZGVfQWx0ZXJUcmlnICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA5KQ0KKyNkZWZpbmUgQURDX1RyaXBsZU1vZGVfUmVnU2ltdWx0X0luamVjU2ltdWx0ICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMSkNCisjZGVmaW5lIEFEQ19UcmlwbGVNb2RlX1JlZ1NpbXVsdF9BbHRlclRyaWcgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTIpDQorI2RlZmluZSBBRENfVHJpcGxlTW9kZV9JbmplY1NpbXVsdCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDE1KQ0KKyNkZWZpbmUgQURDX1RyaXBsZU1vZGVfUmVnU2ltdWx0ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxNikNCisjZGVmaW5lIEFEQ19UcmlwbGVNb2RlX0ludGVybCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTcpDQorI2RlZmluZSBBRENfVHJpcGxlTW9kZV9BbHRlclRyaWcgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDE5KQ0KKyNkZWZpbmUgSVNfQURDX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gQURDX01vZGVfSW5kZXBlbmRlbnQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19EdWFsTW9kZV9SZWdTaW11bHRfSW5qZWNTaW11bHQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19EdWFsTW9kZV9SZWdTaW11bHRfQWx0ZXJUcmlnKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBBRENfRHVhbE1vZGVfSW5qZWNTaW11bHQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19EdWFsTW9kZV9SZWdTaW11bHQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19EdWFsTW9kZV9JbnRlcmwpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19EdWFsTW9kZV9BbHRlclRyaWcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19UcmlwbGVNb2RlX1JlZ1NpbXVsdF9JbmplY1NpbXVsdCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQURDX1RyaXBsZU1vZGVfUmVnU2ltdWx0X0FsdGVyVHJpZykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQURDX1RyaXBsZU1vZGVfSW5qZWNTaW11bHQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19UcmlwbGVNb2RlX1JlZ1NpbXVsdCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQURDX1RyaXBsZU1vZGVfSW50ZXJsKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBBRENfVHJpcGxlTW9kZV9BbHRlclRyaWcpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBBRENfUHJlc2NhbGVyIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfUHJlc2NhbGVyX0RpdjIgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgQURDX1ByZXNjYWxlcl9EaXY0ICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIEFEQ19QcmVzY2FsZXJfRGl2NiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBBRENfUHJlc2NhbGVyX0RpdjggICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDAwKQ0KKyNkZWZpbmUgSVNfQURDX1BSRVNDQUxFUihQUkVTQ0FMRVIpICgoKFBSRVNDQUxFUikgPT0gQURDX1ByZXNjYWxlcl9EaXYyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBBRENfUHJlc2NhbGVyX0RpdjQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IEFEQ19QcmVzY2FsZXJfRGl2NikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gQURDX1ByZXNjYWxlcl9EaXY4KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX0RpcmVjdF9tZW1vcnlfYWNjZXNzX21vZGVfZm9yX211bHRpX21vZGUgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEFEQ19ETUFBY2Nlc3NNb2RlX0Rpc2FibGVkICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSAgICAgLyogRE1BIG1vZGUgZGlzYWJsZWQgKi8NCisjZGVmaW5lIEFEQ19ETUFBY2Nlc3NNb2RlXzEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKSAgICAgLyogRE1BIG1vZGUgMSBlbmFibGVkICgyIC8gMyBoYWxmLXdvcmRzIG9uZSBieSBvbmUgLSAxIHRoZW4gMiB0aGVuIDMpKi8NCisjZGVmaW5lIEFEQ19ETUFBY2Nlc3NNb2RlXzIgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAgICAgLyogRE1BIG1vZGUgMiBlbmFibGVkICgyIC8gMyBoYWxmLXdvcmRzIGJ5IHBhaXJzIC0gMiYxIHRoZW4gMSYzIHRoZW4gMyYyKSovDQorI2RlZmluZSBBRENfRE1BQWNjZXNzTW9kZV8zICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwQzAwMCkgICAgIC8qIERNQSBtb2RlIDMgZW5hYmxlZCAoMiAvIDMgYnl0ZXMgYnkgcGFpcnMgLSAyJjEgdGhlbiAxJjMgdGhlbiAzJjIpICovDQorI2RlZmluZSBJU19BRENfRE1BX0FDQ0VTU19NT0RFKE1PREUpICgoKE1PREUpID09IEFEQ19ETUFBY2Nlc3NNb2RlX0Rpc2FibGVkKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEFEQ19ETUFBY2Nlc3NNb2RlXzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQURDX0RNQUFjY2Vzc01vZGVfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBBRENfRE1BQWNjZXNzTW9kZV8zKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19kZWxheV9iZXR3ZWVuXzJfc2FtcGxpbmdfcGhhc2VzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfVHdvU2FtcGxpbmdEZWxheV81Q3ljbGVzICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgQURDX1R3b1NhbXBsaW5nRGVsYXlfNkN5Y2xlcyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIEFEQ19Ud29TYW1wbGluZ0RlbGF5XzdDeWNsZXMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBBRENfVHdvU2FtcGxpbmdEZWxheV84Q3ljbGVzICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMzAwKQ0KKyNkZWZpbmUgQURDX1R3b1NhbXBsaW5nRGVsYXlfOUN5Y2xlcyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIEFEQ19Ud29TYW1wbGluZ0RlbGF5XzEwQ3ljbGVzICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA1MDApDQorI2RlZmluZSBBRENfVHdvU2FtcGxpbmdEZWxheV8xMUN5Y2xlcyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNjAwKQ0KKyNkZWZpbmUgQURDX1R3b1NhbXBsaW5nRGVsYXlfMTJDeWNsZXMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDcwMCkNCisjZGVmaW5lIEFEQ19Ud29TYW1wbGluZ0RlbGF5XzEzQ3ljbGVzICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBBRENfVHdvU2FtcGxpbmdEZWxheV8xNEN5Y2xlcyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwOTAwKQ0KKyNkZWZpbmUgQURDX1R3b1NhbXBsaW5nRGVsYXlfMTVDeWNsZXMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEEwMCkNCisjZGVmaW5lIEFEQ19Ud29TYW1wbGluZ0RlbGF5XzE2Q3ljbGVzICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBCMDApDQorI2RlZmluZSBBRENfVHdvU2FtcGxpbmdEZWxheV8xN0N5Y2xlcyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwQzAwKQ0KKyNkZWZpbmUgQURDX1R3b1NhbXBsaW5nRGVsYXlfMThDeWNsZXMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEQwMCkNCisjZGVmaW5lIEFEQ19Ud29TYW1wbGluZ0RlbGF5XzE5Q3ljbGVzICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBFMDApDQorI2RlZmluZSBBRENfVHdvU2FtcGxpbmdEZWxheV8yMEN5Y2xlcyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwRjAwKQ0KKyNkZWZpbmUgSVNfQURDX1NBTVBMSU5HX0RFTEFZKERFTEFZKSAoKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfNUN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfNkN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfN0N5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfOEN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfOUN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfMTBDeWNsZXMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVMQVkpID09IEFEQ19Ud29TYW1wbGluZ0RlbGF5XzExQ3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERFTEFZKSA9PSBBRENfVHdvU2FtcGxpbmdEZWxheV8xMkN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfMTNDeWNsZXMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVMQVkpID09IEFEQ19Ud29TYW1wbGluZ0RlbGF5XzE0Q3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERFTEFZKSA9PSBBRENfVHdvU2FtcGxpbmdEZWxheV8xNUN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfMTZDeWNsZXMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVMQVkpID09IEFEQ19Ud29TYW1wbGluZ0RlbGF5XzE3Q3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERFTEFZKSA9PSBBRENfVHdvU2FtcGxpbmdEZWxheV8xOEN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERUxBWSkgPT0gQURDX1R3b1NhbXBsaW5nRGVsYXlfMTlDeWNsZXMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVMQVkpID09IEFEQ19Ud29TYW1wbGluZ0RlbGF5XzIwQ3ljbGVzKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19yZXNvbHV0aW9uIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfUmVzb2x1dGlvbl8xMmIgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgQURDX1Jlc29sdXRpb25fMTBiICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIEFEQ19SZXNvbHV0aW9uXzhiICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBBRENfUmVzb2x1dGlvbl82YiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAzMDAwMDAwKQ0KKyNkZWZpbmUgSVNfQURDX1JFU09MVVRJT04oUkVTT0xVVElPTikgKCgoUkVTT0xVVElPTikgPT0gQURDX1Jlc29sdXRpb25fMTJiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVNPTFVUSU9OKSA9PSBBRENfUmVzb2x1dGlvbl8xMGIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFU09MVVRJT04pID09IEFEQ19SZXNvbHV0aW9uXzhiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVNPTFVUSU9OKSA9PSBBRENfUmVzb2x1dGlvbl82YikpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2V4dGVybmFsX3RyaWdnZXJfZWRnZV9mb3JfcmVndWxhcl9jaGFubmVsc19jb252ZXJzaW9uIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2VfTm9uZSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2VfUmlzaW5nICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2VfRmFsbGluZyAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2VfUmlzaW5nRmFsbGluZyAoKHVpbnQzMl90KTB4MzAwMDAwMDApDQorI2RlZmluZSBJU19BRENfRVhUX1RSSUdfRURHRShFREdFKSAoKChFREdFKSA9PSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2VfTm9uZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFREdFKSA9PSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2VfUmlzaW5nKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IEFEQ19FeHRlcm5hbFRyaWdDb252RWRnZV9GYWxsaW5nKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IEFEQ19FeHRlcm5hbFRyaWdDb252RWRnZV9SaXNpbmdGYWxsaW5nKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2V4dHJlbmFsX3RyaWdnZXJfc291cmNlc19mb3JfcmVndWxhcl9jaGFubmVsc19jb252ZXJzaW9uIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UMV9DQzEgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0NvbnZfVDFfQ0MyICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdDb252X1QxX0NDMyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UMl9DQzIgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAzMDAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0NvbnZfVDJfQ0MzICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdDb252X1QyX0NDNCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDUwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UMl9UUkdPICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA2MDAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0NvbnZfVDNfQ0MxICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNzAwMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdDb252X1QzX1RSR08gICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDgwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UNF9DQzQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA5MDAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0NvbnZfVDVfQ0MxICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwQTAwMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdDb252X1Q1X0NDMiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEIwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UNV9DQzMgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBDMDAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0NvbnZfVDhfQ0MxICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwRDAwMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdDb252X1Q4X1RSR08gICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEUwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnQ29udl9FeHRfSVQxMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBGMDAwMDAwKQ0KKyNkZWZpbmUgSVNfQURDX0VYVF9UUklHKFJFR1RSSUcpICgoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QxX0NDMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QxX0NDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QxX0NDMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QyX0NDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QyX0NDMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QyX0NDNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X1QyX1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRUdUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UM19DQzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRUdUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnQ29udl9UM19UUkdPKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0NvbnZfVDRfQ0M0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0NvbnZfVDVfQ0MxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0NvbnZfVDVfQ0MyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0NvbnZfVDVfQ0MzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0NvbnZfVDhfQ0MxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0NvbnZfVDhfVFJHTykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR1RSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdDb252X0V4dF9JVDExKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2RhdGFfYWxpZ24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEFEQ19EYXRhQWxpZ25fUmlnaHQgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBBRENfRGF0YUFsaWduX0xlZnQgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgSVNfQURDX0RBVEFfQUxJR04oQUxJR04pICgoKEFMSUdOKSA9PSBBRENfRGF0YUFsaWduX1JpZ2h0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxJR04pID09IEFEQ19EYXRhQWxpZ25fTGVmdCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19jaGFubmVscyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgQURDX0NoYW5uZWxfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisjZGVmaW5lIEFEQ19DaGFubmVsXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpDQorI2RlZmluZSBBRENfQ2hhbm5lbF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykNCisjZGVmaW5lIEFEQ19DaGFubmVsXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDQpDQorI2RlZmluZSBBRENfQ2hhbm5lbF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA1KQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNikNCisjZGVmaW5lIEFEQ19DaGFubmVsXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDcpDQorI2RlZmluZSBBRENfQ2hhbm5lbF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkNCisjZGVmaW5lIEFEQ19DaGFubmVsXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MEEpDQorI2RlZmluZSBBRENfQ2hhbm5lbF8xMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDBCKQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwQykNCisjZGVmaW5lIEFEQ19DaGFubmVsXzEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MEQpDQorI2RlZmluZSBBRENfQ2hhbm5lbF8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDBFKQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwRikNCisjZGVmaW5lIEFEQ19DaGFubmVsXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MTApDQorI2RlZmluZSBBRENfQ2hhbm5lbF8xNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDExKQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxMikNCisNCisjZGVmaW5lIEFEQ19DaGFubmVsX1RlbXBTZW5zb3IgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KUFEQ19DaGFubmVsXzE2KQ0KKyNkZWZpbmUgQURDX0NoYW5uZWxfVnJlZmludCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpQURDX0NoYW5uZWxfMTcpDQorI2RlZmluZSBBRENfQ2hhbm5lbF9WYmF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdClBRENfQ2hhbm5lbF8xOCkNCisNCisjZGVmaW5lIElTX0FEQ19DSEFOTkVMKENIQU5ORUwpICgoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzEwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDSEFOTkVMKSA9PSBBRENfQ2hhbm5lbF8xMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gQURDX0NoYW5uZWxfMTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzEzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDSEFOTkVMKSA9PSBBRENfQ2hhbm5lbF8xNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gQURDX0NoYW5uZWxfMTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19DaGFubmVsXzE2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDSEFOTkVMKSA9PSBBRENfQ2hhbm5lbF8xNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gQURDX0NoYW5uZWxfMTgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBBRENfc2FtcGxpbmdfdGltZXMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEFEQ19TYW1wbGVUaW1lXzNDeWNsZXMgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAwKQ0KKyNkZWZpbmUgQURDX1NhbXBsZVRpbWVfMTVDeWNsZXMgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpDQorI2RlZmluZSBBRENfU2FtcGxlVGltZV8yOEN5Y2xlcyAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikNCisjZGVmaW5lIEFEQ19TYW1wbGVUaW1lXzU2Q3ljbGVzICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAzKQ0KKyNkZWZpbmUgQURDX1NhbXBsZVRpbWVfODRDeWNsZXMgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDQpDQorI2RlZmluZSBBRENfU2FtcGxlVGltZV8xMTJDeWNsZXMgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNSkNCisjZGVmaW5lIEFEQ19TYW1wbGVUaW1lXzE0NEN5Y2xlcyAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA2KQ0KKyNkZWZpbmUgQURDX1NhbXBsZVRpbWVfNDgwQ3ljbGVzICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDcpDQorI2RlZmluZSBJU19BRENfU0FNUExFX1RJTUUoVElNRSkgKCgoVElNRSkgPT0gQURDX1NhbXBsZVRpbWVfM0N5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTUUpID09IEFEQ19TYW1wbGVUaW1lXzE1Q3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNRSkgPT0gQURDX1NhbXBsZVRpbWVfMjhDeWNsZXMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1FKSA9PSBBRENfU2FtcGxlVGltZV81NkN5Y2xlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTUUpID09IEFEQ19TYW1wbGVUaW1lXzg0Q3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNRSkgPT0gQURDX1NhbXBsZVRpbWVfMTEyQ3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNRSkgPT0gQURDX1NhbXBsZVRpbWVfMTQ0Q3ljbGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNRSkgPT0gQURDX1NhbXBsZVRpbWVfNDgwQ3ljbGVzKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2V4dGVybmFsX3RyaWdnZXJfZWRnZV9mb3JfaW5qZWN0ZWRfY2hhbm5lbHNfY29udmVyc2lvbiANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udkVkZ2VfTm9uZSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZV9SaXNpbmcgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlX0ZhbGxpbmcgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udkVkZ2VfUmlzaW5nRmFsbGluZyAoKHVpbnQzMl90KTB4MDAzMDAwMDApDQorI2RlZmluZSBJU19BRENfRVhUX0lOSkVDX1RSSUdfRURHRShFREdFKSAoKChFREdFKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZV9Ob25lKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFREdFKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZV9SaXNpbmcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlX0ZhbGxpbmcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlX1Jpc2luZ0ZhbGxpbmcpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19leHRyZW5hbF90cmlnZ2VyX3NvdXJjZXNfZm9yX2luamVjdGVkX2NoYW5uZWxzX2NvbnZlcnNpb24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDFfQ0M0ICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UMV9UUkdPICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1QyX0NDMSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDJfVFJHTyAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UM19DQzIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1QzX0NDNCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA1MDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDRfQ0MxICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDYwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNF9DQzIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNzAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q0X0NDMyAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDRfVFJHTyAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDkwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNV9DQzQgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwQTAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q1X1RSR08gICAgICAgICAgICgodWludDMyX3QpMHgwMDBCMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDhfQ0MyICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEMwMDAwKQ0KKyNkZWZpbmUgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UOF9DQzMgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwRDAwMDApDQorI2RlZmluZSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q4X0NDNCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDBFMDAwMCkNCisjZGVmaW5lIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfRXh0X0lUMTUgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEYwMDAwKQ0KKyNkZWZpbmUgSVNfQURDX0VYVF9JTkpFQ19UUklHKElOSlRSSUcpICgoKElOSlRSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDFfQ0M0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5KVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UMV9UUkdPKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5KVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UMl9DQzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTkpUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1QyX1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTkpUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1QzX0NDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOSlRSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDNfQ0M0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5KVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNF9DQzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTkpUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q0X0NDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOSlRSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDRfQ0MzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5KVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNF9UUkdPKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5KVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNV9DQzQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTkpUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q1X1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTkpUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q4X0NDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElOSlRSSUcpID09IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDhfQ0MzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSU5KVFJJRykgPT0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UOF9DQzQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTkpUUklHKSA9PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X0V4dF9JVDE1KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2luamVjdGVkX2NoYW5uZWxfc2VsZWN0aW9uIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfSW5qZWN0ZWRDaGFubmVsXzEgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDE0KQ0KKyNkZWZpbmUgQURDX0luamVjdGVkQ2hhbm5lbF8yICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxOCkNCisjZGVmaW5lIEFEQ19JbmplY3RlZENoYW5uZWxfMyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MUMpDQorI2RlZmluZSBBRENfSW5qZWN0ZWRDaGFubmVsXzQgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDIwKQ0KKyNkZWZpbmUgSVNfQURDX0lOSkVDVEVEX0NIQU5ORUwoQ0hBTk5FTCkgKCgoQ0hBTk5FTCkgPT0gQURDX0luamVjdGVkQ2hhbm5lbF8xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDSEFOTkVMKSA9PSBBRENfSW5qZWN0ZWRDaGFubmVsXzIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IEFEQ19JbmplY3RlZENoYW5uZWxfMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gQURDX0luamVjdGVkQ2hhbm5lbF80KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2FuYWxvZ193YXRjaGRvZ19zZWxlY3Rpb24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEFEQ19BbmFsb2dXYXRjaGRvZ19TaW5nbGVSZWdFbmFibGUgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAyMDApDQorI2RlZmluZSBBRENfQW5hbG9nV2F0Y2hkb2dfU2luZ2xlSW5qZWNFbmFibGUgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMjAwKQ0KKyNkZWZpbmUgQURDX0FuYWxvZ1dhdGNoZG9nX1NpbmdsZVJlZ09ySW5qZWNFbmFibGUgICgodWludDMyX3QpMHgwMEMwMDIwMCkNCisjZGVmaW5lIEFEQ19BbmFsb2dXYXRjaGRvZ19BbGxSZWdFbmFibGUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBBRENfQW5hbG9nV2F0Y2hkb2dfQWxsSW5qZWNFbmFibGUgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgQURDX0FuYWxvZ1dhdGNoZG9nX0FsbFJlZ0FsbEluamVjRW5hYmxlICAgICgodWludDMyX3QpMHgwMEMwMDAwMCkNCisjZGVmaW5lIEFEQ19BbmFsb2dXYXRjaGRvZ19Ob25lICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBJU19BRENfQU5BTE9HX1dBVENIRE9HKFdBVENIRE9HKSAoKChXQVRDSERPRykgPT0gQURDX0FuYWxvZ1dhdGNoZG9nX1NpbmdsZVJlZ0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FUQ0hET0cpID09IEFEQ19BbmFsb2dXYXRjaGRvZ19TaW5nbGVJbmplY0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FUQ0hET0cpID09IEFEQ19BbmFsb2dXYXRjaGRvZ19TaW5nbGVSZWdPckluamVjRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVRDSERPRykgPT0gQURDX0FuYWxvZ1dhdGNoZG9nX0FsbFJlZ0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FUQ0hET0cpID09IEFEQ19BbmFsb2dXYXRjaGRvZ19BbGxJbmplY0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FUQ0hET0cpID09IEFEQ19BbmFsb2dXYXRjaGRvZ19BbGxSZWdBbGxJbmplY0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FUQ0hET0cpID09IEFEQ19BbmFsb2dXYXRjaGRvZ19Ob25lKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX2ludGVycnVwdHNfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgQURDX0lUX0VPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjA1KSAgDQorI2RlZmluZSBBRENfSVRfQVdEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDYpICANCisjZGVmaW5lIEFEQ19JVF9KRU9DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwNykgIA0KKyNkZWZpbmUgQURDX0lUX09WUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDFBKSAgDQorI2RlZmluZSBJU19BRENfSVQoSVQpICgoKElUKSA9PSBBRENfSVRfRU9DKSB8fCAoKElUKSA9PSBBRENfSVRfQVdEKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBBRENfSVRfSkVPQyl8fCAoKElUKSA9PSBBRENfSVRfT1ZSKSkgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19mbGFnc19kZWZpbml0aW9uIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBBRENfRkxBR19BV0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpDQorI2RlZmluZSBBRENfRkxBR19FT0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBBRENfRkxBR19KRU9DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDQpDQorI2RlZmluZSBBRENfRkxBR19KU1RSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpDQorI2RlZmluZSBBRENfRkxBR19TVFJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MTApDQorI2RlZmluZSBBRENfRkxBR19PVlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAgDQorICANCisjZGVmaW5lIElTX0FEQ19DTEVBUl9GTEFHKEZMQUcpICgoKChGTEFHKSAmICh1aW50OF90KTB4QzApID09IDB4MDApICYmICgoRkxBRykgIT0gMHgwMCkpICAgDQorI2RlZmluZSBJU19BRENfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gQURDX0ZMQUdfQVdEKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gQURDX0ZMQUdfRU9DKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gQURDX0ZMQUdfSkVPQykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpPT0gQURDX0ZMQUdfSlNUUlQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBBRENfRkxBR19TVFJUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRyk9PSBBRENfRkxBR19PVlIpKSAgICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ190aHJlc2hvbGRzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBJU19BRENfVEhSRVNIT0xEKFRIUkVTSE9MRCkgKChUSFJFU0hPTEQpIDw9IDB4RkZGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBBRENfaW5qZWN0ZWRfb2Zmc2V0IA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBJU19BRENfT0ZGU0VUKE9GRlNFVCkgKChPRkZTRVQpIDw9IDB4RkZGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBBRENfaW5qZWN0ZWRfbGVuZ3RoIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBJU19BRENfSU5KRUNURURfTEVOR1RIKExFTkdUSCkgKCgoTEVOR1RIKSA+PSAweDEpICYmICgoTEVOR1RIKSA8PSAweDQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBBRENfaW5qZWN0ZWRfcmFuayANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgSVNfQURDX0lOSkVDVEVEX1JBTksoUkFOSykgKCgoUkFOSykgPj0gMHgxKSAmJiAoKFJBTkspIDw9IDB4NCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19yZWd1bGFyX2xlbmd0aCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgSVNfQURDX1JFR1VMQVJfTEVOR1RIKExFTkdUSCkgKCgoTEVOR1RIKSA+PSAweDEpICYmICgoTEVOR1RIKSA8PSAweDEwKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX3JlZ3VsYXJfcmFuayANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgSVNfQURDX1JFR1VMQVJfUkFOSyhSQU5LKSAoKChSQU5LKSA+PSAweDEpICYmICgoUkFOSykgPD0gMHgxMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIEFEQ19yZWd1bGFyX2Rpc2NvbnRpbnVvdXNfbW9kZV9udW1iZXIgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIElTX0FEQ19SRUdVTEFSX0RJU0NfTlVNQkVSKE5VTUJFUikgKCgoTlVNQkVSKSA+PSAweDEpICYmICgoTlVNQkVSKSA8PSAweDgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovICANCisNCisvKiAgRnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIEFEQyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKioqLyAgDQordm9pZCBBRENfRGVJbml0KHZvaWQpOw0KKw0KKy8qIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBBRENfSW5pdChBRENfVHlwZURlZiogQURDeCwgQURDX0luaXRUeXBlRGVmKiBBRENfSW5pdFN0cnVjdCk7DQordm9pZCBBRENfU3RydWN0SW5pdChBRENfSW5pdFR5cGVEZWYqIEFEQ19Jbml0U3RydWN0KTsNCit2b2lkIEFEQ19Db21tb25Jbml0KEFEQ19Db21tb25Jbml0VHlwZURlZiogQURDX0NvbW1vbkluaXRTdHJ1Y3QpOw0KK3ZvaWQgQURDX0NvbW1vblN0cnVjdEluaXQoQURDX0NvbW1vbkluaXRUeXBlRGVmKiBBRENfQ29tbW9uSW5pdFN0cnVjdCk7DQordm9pZCBBRENfQ21kKEFEQ19UeXBlRGVmKiBBREN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEFuYWxvZyBXYXRjaGRvZyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBBRENfQW5hbG9nV2F0Y2hkb2dDbWQoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQzMl90IEFEQ19BbmFsb2dXYXRjaGRvZyk7DQordm9pZCBBRENfQW5hbG9nV2F0Y2hkb2dUaHJlc2hvbGRzQ29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50MTZfdCBIaWdoVGhyZXNob2xkLHVpbnQxNl90IExvd1RocmVzaG9sZCk7DQordm9pZCBBRENfQW5hbG9nV2F0Y2hkb2dTaW5nbGVDaGFubmVsQ29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IEFEQ19DaGFubmVsKTsNCisNCisvKiBUZW1wZXJhdHVyZSBTZW5zb3IsIFZyZWZpbnQgYW5kIFZCQVQgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgQURDX1RlbXBTZW5zb3JWcmVmaW50Q21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBBRENfVkJBVENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIFJlZ3VsYXIgQ2hhbm5lbHMgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBBRENfUmVndWxhckNoYW5uZWxDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgQURDX0NoYW5uZWwsIHVpbnQ4X3QgUmFuaywgdWludDhfdCBBRENfU2FtcGxlVGltZSk7DQordm9pZCBBRENfU29mdHdhcmVTdGFydENvbnYoQURDX1R5cGVEZWYqIEFEQ3gpOw0KK0ZsYWdTdGF0dXMgQURDX0dldFNvZnR3YXJlU3RhcnRDb252U3RhdHVzKEFEQ19UeXBlRGVmKiBBREN4KTsNCit2b2lkIEFEQ19FT0NPbkVhY2hSZWd1bGFyQ2hhbm5lbENtZChBRENfVHlwZURlZiogQURDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEFEQ19Db250aW51b3VzTW9kZUNtZChBRENfVHlwZURlZiogQURDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEFEQ19EaXNjTW9kZUNoYW5uZWxDb3VudENvbmZpZyhBRENfVHlwZURlZiogQURDeCwgdWludDhfdCBOdW1iZXIpOw0KK3ZvaWQgQURDX0Rpc2NNb2RlQ21kKEFEQ19UeXBlRGVmKiBBREN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3VpbnQxNl90IEFEQ19HZXRDb252ZXJzaW9uVmFsdWUoQURDX1R5cGVEZWYqIEFEQ3gpOw0KK3VpbnQzMl90IEFEQ19HZXRNdWx0aU1vZGVDb252ZXJzaW9uVmFsdWUodm9pZCk7DQorDQorLyogUmVndWxhciBDaGFubmVscyBETUEgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIEFEQ19ETUFDbWQoQURDX1R5cGVEZWYqIEFEQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBBRENfRE1BUmVxdWVzdEFmdGVyTGFzdFRyYW5zZmVyQ21kKEFEQ19UeXBlRGVmKiBBREN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgQURDX011bHRpTW9kZURNQVJlcXVlc3RBZnRlckxhc3RUcmFuc2ZlckNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEluamVjdGVkIGNoYW5uZWxzIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBBRENfSW5qZWN0ZWRDaGFubmVsQ29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IEFEQ19DaGFubmVsLCB1aW50OF90IFJhbmssIHVpbnQ4X3QgQURDX1NhbXBsZVRpbWUpOw0KK3ZvaWQgQURDX0luamVjdGVkU2VxdWVuY2VyTGVuZ3RoQ29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IExlbmd0aCk7DQordm9pZCBBRENfU2V0SW5qZWN0ZWRPZmZzZXQoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgQURDX0luamVjdGVkQ2hhbm5lbCwgdWludDE2X3QgT2Zmc2V0KTsNCit2b2lkIEFEQ19FeHRlcm5hbFRyaWdJbmplY3RlZENvbnZDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQzMl90IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnYpOw0KK3ZvaWQgQURDX0V4dGVybmFsVHJpZ0luamVjdGVkQ29udkVkZ2VDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQzMl90IEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlKTsNCit2b2lkIEFEQ19Tb2Z0d2FyZVN0YXJ0SW5qZWN0ZWRDb252KEFEQ19UeXBlRGVmKiBBREN4KTsNCitGbGFnU3RhdHVzIEFEQ19HZXRTb2Z0d2FyZVN0YXJ0SW5qZWN0ZWRDb252Q21kU3RhdHVzKEFEQ19UeXBlRGVmKiBBREN4KTsNCit2b2lkIEFEQ19BdXRvSW5qZWN0ZWRDb252Q21kKEFEQ19UeXBlRGVmKiBBREN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgQURDX0luamVjdGVkRGlzY01vZGVDbWQoQURDX1R5cGVEZWYqIEFEQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordWludDE2X3QgQURDX0dldEluamVjdGVkQ29udmVyc2lvblZhbHVlKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IEFEQ19JbmplY3RlZENoYW5uZWwpOw0KKw0KKy8qIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBBRENfSVRDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQxNl90IEFEQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCitGbGFnU3RhdHVzIEFEQ19HZXRGbGFnU3RhdHVzKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IEFEQ19GTEFHKTsNCit2b2lkIEFEQ19DbGVhckZsYWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgQURDX0ZMQUcpOw0KK0lUU3RhdHVzIEFEQ19HZXRJVFN0YXR1cyhBRENfVHlwZURlZiogQURDeCwgdWludDE2X3QgQURDX0lUKTsNCit2b2lkIEFEQ19DbGVhcklUUGVuZGluZ0JpdChBRENfVHlwZURlZiogQURDeCwgdWludDE2X3QgQURDX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfQURDX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2Nhbi5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9jYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNmZGVkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9jYW4uaApAQCAtMCwwICsxLDY0NCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2Nhbi5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIENBTiBmaXJtd2FyZSANCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9DQU5fSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfQ0FOX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBDQU4NCisgICogQHsNCisgICovDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIElTX0NBTl9BTExfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBDQU4xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gQ0FOMikpDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIENBTiBpbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uDQorICAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgQ0FOX1ByZXNjYWxlcjsgICAvKiE8IFNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIGEgdGltZSBxdWFudHVtLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCByYW5nZXMgZnJvbSAxIHRvIDEwMjQuICovDQorICANCisgIHVpbnQ4X3QgQ0FOX01vZGU7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIENBTiBvcGVyYXRpbmcgbW9kZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENBTl9vcGVyYXRpbmdfbW9kZSAqLw0KKw0KKyAgdWludDhfdCBDQU5fU0pXOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZSBxdWFudGEgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIENBTiBoYXJkd2FyZSBpcyBhbGxvd2VkIHRvIGxlbmd0aGVuIG9yIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0ZW4gYSBiaXQgdG8gcGVyZm9ybSByZXN5bmNocm9uaXphdGlvbi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENBTl9zeW5jaHJvbmlzYXRpb25fanVtcF93aWR0aCAqLw0KKw0KKyAgdWludDhfdCBDQU5fQlMxOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWUgcXVhbnRhIGluIEJpdCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdtZW50IDEuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgQ0FOX3RpbWVfcXVhbnR1bV9pbl9iaXRfc2VnbWVudF8xICovDQorDQorICB1aW50OF90IENBTl9CUzI7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZSBxdWFudGEgaW4gQml0IFNlZ21lbnQgMi4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENBTl90aW1lX3F1YW50dW1faW5fYml0X3NlZ21lbnRfMiAqLw0KKyAgDQorICBGdW5jdGlvbmFsU3RhdGUgQ0FOX1RUQ007IC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHRpbWUgdHJpZ2dlcmVkIGNvbW11bmljYXRpb24gbW9kZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgZWl0aGVyIHRvIEVOQUJMRSBvciBESVNBQkxFLiAqLw0KKyAgDQorICBGdW5jdGlvbmFsU3RhdGUgQ0FOX0FCT007ICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgYnVzLW9mZiBtYW5hZ2VtZW50Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IGVpdGhlciB0byBFTkFCTEUgb3IgRElTQUJMRS4gKi8NCisNCisgIEZ1bmN0aW9uYWxTdGF0ZSBDQU5fQVdVTTsgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIGF1dG9tYXRpYyB3YWtlLXVwIG1vZGUuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IGVpdGhlciB0byBFTkFCTEUgb3IgRElTQUJMRS4gKi8NCisNCisgIEZ1bmN0aW9uYWxTdGF0ZSBDQU5fTkFSVDsgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIG5vbi1hdXRvbWF0aWMgcmV0cmFuc21pc3Npb24gbW9kZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCBlaXRoZXIgdG8gRU5BQkxFIG9yIERJU0FCTEUuICovDQorDQorICBGdW5jdGlvbmFsU3RhdGUgQ0FOX1JGTE07ICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBSZWNlaXZlIEZJRk8gTG9ja2VkIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgZWl0aGVyIHRvIEVOQUJMRSBvciBESVNBQkxFLiAqLw0KKw0KKyAgRnVuY3Rpb25hbFN0YXRlIENBTl9UWEZQOyAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdHJhbnNtaXQgRklGTyBwcmlvcml0eS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCBlaXRoZXIgdG8gRU5BQkxFIG9yIERJU0FCTEUuICovDQorfSBDQU5fSW5pdFR5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIENBTiBmaWx0ZXIgaW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IENBTl9GaWx0ZXJJZEhpZ2g7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBpZGVudGlmaWNhdGlvbiBudW1iZXIgKE1TQnMgZm9yIGEgMzItYml0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIGZpcnN0IG9uZSBmb3IgYSAxNi1iaXQgY29uZmlndXJhdGlvbikuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYgKi8NCisNCisgIHVpbnQxNl90IENBTl9GaWx0ZXJJZExvdzsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBpZGVudGlmaWNhdGlvbiBudW1iZXIgKExTQnMgZm9yIGEgMzItYml0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24sIHNlY29uZCBvbmUgZm9yIGEgMTYtYml0IGNvbmZpZ3VyYXRpb24pLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGICovDQorDQorICB1aW50MTZfdCBDQU5fRmlsdGVyTWFza0lkSGlnaDsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgbWFzayBudW1iZXIgb3IgaWRlbnRpZmljYXRpb24gbnVtYmVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIG1vZGUgKE1TQnMgZm9yIGEgMzItYml0IGNvbmZpZ3VyYXRpb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0IG9uZSBmb3IgYSAxNi1iaXQgY29uZmlndXJhdGlvbikuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYgKi8NCisNCisgIHVpbnQxNl90IENBTl9GaWx0ZXJNYXNrSWRMb3c7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBtYXNrIG51bWJlciBvciBpZGVudGlmaWNhdGlvbiBudW1iZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgbW9kZSAoTFNCcyBmb3IgYSAzMi1iaXQgY29uZmlndXJhdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kIG9uZSBmb3IgYSAxNi1iaXQgY29uZmlndXJhdGlvbikuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYgKi8NCisNCisgIHVpbnQxNl90IENBTl9GaWx0ZXJGSUZPQXNzaWdubWVudDsgLyohPCBTcGVjaWZpZXMgdGhlIEZJRk8gKDAgb3IgMSkgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZmlsdGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENBTl9maWx0ZXJfRklGTyAqLw0KKyAgDQorICB1aW50OF90IENBTl9GaWx0ZXJOdW1iZXI7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4gSXQgcmFuZ2VzIGZyb20gMCB0byAxMy4gKi8NCisNCisgIHVpbnQ4X3QgQ0FOX0ZpbHRlck1vZGU7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBtb2RlIHRvIGJlIGluaXRpYWxpemVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENBTl9maWx0ZXJfbW9kZSAqLw0KKw0KKyAgdWludDhfdCBDQU5fRmlsdGVyU2NhbGU7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZmlsdGVyIHNjYWxlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENBTl9maWx0ZXJfc2NhbGUgKi8NCisNCisgIEZ1bmN0aW9uYWxTdGF0ZSBDQU5fRmlsdGVyQWN0aXZhdGlvbjsgLyohPCBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZmlsdGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IGVpdGhlciB0byBFTkFCTEUgb3IgRElTQUJMRS4gKi8NCit9IENBTl9GaWx0ZXJJbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgQ0FOIFR4IG1lc3NhZ2Ugc3RydWN0dXJlIGRlZmluaXRpb24gIA0KKyAgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IFN0ZElkOyAgLyohPCBTcGVjaWZpZXMgdGhlIHN0YW5kYXJkIGlkZW50aWZpZXIuDQorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIHRvIDB4N0ZGLiAqLw0KKw0KKyAgdWludDMyX3QgRXh0SWQ7ICAvKiE8IFNwZWNpZmllcyB0aGUgZXh0ZW5kZWQgaWRlbnRpZmllci4NCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgdG8gMHgxRkZGRkZGRi4gKi8NCisNCisgIHVpbnQ4X3QgSURFOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgaWRlbnRpZmllciBmb3IgdGhlIG1lc3NhZ2UgdGhhdCANCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHRyYW5zbWl0dGVkLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSANCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBAcmVmIENBTl9pZGVudGlmaWVyX3R5cGUgKi8NCisNCisgIHVpbnQ4X3QgUlRSOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgZnJhbWUgZm9yIHRoZSBtZXNzYWdlIHRoYXQgd2lsbCANCisgICAgICAgICAgICAgICAgICAgICAgICBiZSB0cmFuc21pdHRlZC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgDQorICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBDQU5fcmVtb3RlX3RyYW5zbWlzc2lvbl9yZXF1ZXN0ICovDQorDQorICB1aW50OF90IERMQzsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIHRoYXQgd2lsbCBiZSANCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiANCisgICAgICAgICAgICAgICAgICAgICAgICAwIHRvIDggKi8NCisNCisgIHVpbnQ4X3QgRGF0YVs4XTsgLyohPCBDb250YWlucyB0aGUgZGF0YSB0byBiZSB0cmFuc21pdHRlZC4gSXQgcmFuZ2VzIGZyb20gMCANCisgICAgICAgICAgICAgICAgICAgICAgICB0byAweEZGLiAqLw0KK30gQ2FuVHhNc2c7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIENBTiBSeCBtZXNzYWdlIHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBTdGRJZDsgIC8qITwgU3BlY2lmaWVzIHRoZSBzdGFuZGFyZCBpZGVudGlmaWVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCB0byAweDdGRi4gKi8NCisNCisgIHVpbnQzMl90IEV4dElkOyAgLyohPCBTcGVjaWZpZXMgdGhlIGV4dGVuZGVkIGlkZW50aWZpZXIuDQorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIHRvIDB4MUZGRkZGRkYuICovDQorDQorICB1aW50OF90IElERTsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGlkZW50aWZpZXIgZm9yIHRoZSBtZXNzYWdlIHRoYXQgDQorICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSByZWNlaXZlZC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgDQorICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBDQU5faWRlbnRpZmllcl90eXBlICovDQorDQorICB1aW50OF90IFJUUjsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGZyYW1lIGZvciB0aGUgcmVjZWl2ZWQgbWVzc2FnZS4NCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiANCisgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIENBTl9yZW1vdGVfdHJhbnNtaXNzaW9uX3JlcXVlc3QgKi8NCisNCisgIHVpbnQ4X3QgRExDOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgdGhhdCB3aWxsIGJlIHJlY2VpdmVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCB0byA4ICovDQorDQorICB1aW50OF90IERhdGFbOF07IC8qITwgQ29udGFpbnMgdGhlIGRhdGEgdG8gYmUgcmVjZWl2ZWQuIEl0IHJhbmdlcyBmcm9tIDAgdG8gDQorICAgICAgICAgICAgICAgICAgICAgICAgMHhGRi4gKi8NCisNCisgIHVpbnQ4X3QgRk1JOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBmaWx0ZXIgdGhlIG1lc3NhZ2Ugc3RvcmVkIGluIA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYWlsYm94IHBhc3NlcyB0aHJvdWdoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSANCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBiZXR3ZWVuIDAgdG8gMHhGRiAqLw0KK30gQ2FuUnhNc2c7DQorDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl9FeHBvcnRlZF9Db25zdGFudHMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fSW5pdFN0YXR1cyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBDQU5fSW5pdFN0YXR1c19GYWlsZWQgICAgICAgICAgICAgICgodWludDhfdCkweDAwKSAvKiE8IENBTiBpbml0aWFsaXphdGlvbiBmYWlsZWQgKi8NCisjZGVmaW5lIENBTl9Jbml0U3RhdHVzX1N1Y2Nlc3MgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpIC8qITwgQ0FOIGluaXRpYWxpemF0aW9uIE9LICovDQorDQorDQorLyogTGVnYWN5IGRlZmluZXMgKi8NCisjZGVmaW5lIENBTklOSVRGQUlMRUQgICAgQ0FOX0luaXRTdGF0dXNfRmFpbGVkDQorI2RlZmluZSBDQU5JTklUT0sgICAgICAgIENBTl9Jbml0U3RhdHVzX1N1Y2Nlc3MNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fb3BlcmF0aW5nX21vZGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgQ0FOX01vZGVfTm9ybWFsICAgICAgICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCBub3JtYWwgbW9kZSAqLw0KKyNkZWZpbmUgQ0FOX01vZGVfTG9vcEJhY2sgICAgICAgICAgICgodWludDhfdCkweDAxKSAgLyohPCBsb29wYmFjayBtb2RlICovDQorI2RlZmluZSBDQU5fTW9kZV9TaWxlbnQgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiE8IHNpbGVudCBtb2RlICovDQorI2RlZmluZSBDQU5fTW9kZV9TaWxlbnRfTG9vcEJhY2sgICAgKCh1aW50OF90KTB4MDMpICAvKiE8IGxvb3BiYWNrIGNvbWJpbmVkIHdpdGggc2lsZW50IG1vZGUgKi8NCisNCisjZGVmaW5lIElTX0NBTl9NT0RFKE1PREUpICgoKE1PREUpID09IENBTl9Nb2RlX05vcm1hbCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQ0FOX01vZGVfTG9vcEJhY2spfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQ0FOX01vZGVfU2lsZW50KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBDQU5fTW9kZV9TaWxlbnRfTG9vcEJhY2spKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisNCisgLyoqDQorICAqIEBkZWZncm91cCBDQU5fb3BlcmF0aW5nX21vZGUgDQorICAqIEB7DQorICAqLyAgDQorI2RlZmluZSBDQU5fT3BlcmF0aW5nTW9kZV9Jbml0aWFsaXphdGlvbiAgKCh1aW50OF90KTB4MDApIC8qITwgSW5pdGlhbGl6YXRpb24gbW9kZSAqLw0KKyNkZWZpbmUgQ0FOX09wZXJhdGluZ01vZGVfTm9ybWFsICAgICAgICAgICgodWludDhfdCkweDAxKSAvKiE8IE5vcm1hbCBtb2RlICovDQorI2RlZmluZSBDQU5fT3BlcmF0aW5nTW9kZV9TbGVlcCAgICAgICAgICAgKCh1aW50OF90KTB4MDIpIC8qITwgc2xlZXAgbW9kZSAqLw0KKw0KKw0KKyNkZWZpbmUgSVNfQ0FOX09QRVJBVElOR19NT0RFKE1PREUpICgoKE1PREUpID09IENBTl9PcGVyYXRpbmdNb2RlX0luaXRpYWxpemF0aW9uKSB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IENBTl9PcGVyYXRpbmdNb2RlX05vcm1hbCl8fCBcDQorCQkJCQkJCQkJCQkJCQkJCQkJKChNT0RFKSA9PSBDQU5fT3BlcmF0aW5nTW9kZV9TbGVlcCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKyAgDQorLyoqDQorICAqIEBkZWZncm91cCBDQU5fb3BlcmF0aW5nX21vZGVfc3RhdHVzDQorICAqIEB7DQorICAqLyAgDQorDQorI2RlZmluZSBDQU5fTW9kZVN0YXR1c19GYWlsZWQgICAgKCh1aW50OF90KTB4MDApICAgICAgICAgICAgICAgIC8qITwgQ0FOIGVudGVyaW5nIHRoZSBzcGVjaWZpYyBtb2RlIGZhaWxlZCAqLw0KKyNkZWZpbmUgQ0FOX01vZGVTdGF0dXNfU3VjY2VzcyAgICgodWludDhfdCkhQ0FOX01vZGVTdGF0dXNfRmFpbGVkKSAgIC8qITwgQ0FOIGVudGVyaW5nIHRoZSBzcGVjaWZpYyBtb2RlIFN1Y2NlZWQgKi8NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fc3luY2hyb25pc2F0aW9uX2p1bXBfd2lkdGggDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ0FOX1NKV18xdHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCAxIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX1NKV18ydHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgLyohPCAyIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX1NKV18zdHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKSAgLyohPCAzIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX1NKV180dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAzKSAgLyohPCA0IHRpbWUgcXVhbnR1bSAqLw0KKw0KKyNkZWZpbmUgSVNfQ0FOX1NKVyhTSlcpICgoKFNKVykgPT0gQ0FOX1NKV18xdHEpIHx8ICgoU0pXKSA9PSBDQU5fU0pXXzJ0cSl8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICgoU0pXKSA9PSBDQU5fU0pXXzN0cSkgfHwgKChTSlcpID09IENBTl9TSldfNHRxKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fdGltZV9xdWFudHVtX2luX2JpdF9zZWdtZW50XzEgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ0FOX0JTMV8xdHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCAxIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV8ydHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKSAgLyohPCAyIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV8zdHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKSAgLyohPCAzIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV80dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAzKSAgLyohPCA0IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV81dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KSAgLyohPCA1IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV82dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA1KSAgLyohPCA2IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV83dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA2KSAgLyohPCA3IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV84dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA3KSAgLyohPCA4IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV85dHEgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KSAgLyohPCA5IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV8xMHRxICAgICAgICAgICAgICAgICgodWludDhfdCkweDA5KSAgLyohPCAxMCB0aW1lIHF1YW50dW0gKi8NCisjZGVmaW5lIENBTl9CUzFfMTF0cSAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwQSkgIC8qITwgMTEgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMxXzEydHEgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MEIpICAvKiE8IDEyIHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV8xM3RxICAgICAgICAgICAgICAgICgodWludDhfdCkweDBDKSAgLyohPCAxMyB0aW1lIHF1YW50dW0gKi8NCisjZGVmaW5lIENBTl9CUzFfMTR0cSAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwRCkgIC8qITwgMTQgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMxXzE1dHEgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MEUpICAvKiE8IDE1IHRpbWUgcXVhbnR1bSAqLw0KKyNkZWZpbmUgQ0FOX0JTMV8xNnRxICAgICAgICAgICAgICAgICgodWludDhfdCkweDBGKSAgLyohPCAxNiB0aW1lIHF1YW50dW0gKi8NCisNCisjZGVmaW5lIElTX0NBTl9CUzEoQlMxKSAoKEJTMSkgPD0gQ0FOX0JTMV8xNnRxKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl90aW1lX3F1YW50dW1faW5fYml0X3NlZ21lbnRfMiANCisgICogQHsNCisgICovDQorI2RlZmluZSBDQU5fQlMyXzF0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IDEgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzJ0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IDIgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzN0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiE8IDMgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzR0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDMpICAvKiE8IDQgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzV0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiE8IDUgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzZ0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDUpICAvKiE8IDYgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzd0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IDcgdGltZSBxdWFudHVtICovDQorI2RlZmluZSBDQU5fQlMyXzh0cSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDcpICAvKiE8IDggdGltZSBxdWFudHVtICovDQorDQorI2RlZmluZSBJU19DQU5fQlMyKEJTMikgKChCUzIpIDw9IENBTl9CUzJfOHRxKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl9jbG9ja19wcmVzY2FsZXIgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgSVNfQ0FOX1BSRVNDQUxFUihQUkVTQ0FMRVIpICgoKFBSRVNDQUxFUikgPj0gMSkgJiYgKChQUkVTQ0FMRVIpIDw9IDEwMjQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl9maWx0ZXJfbnVtYmVyIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0NBTl9GSUxURVJfTlVNQkVSKE5VTUJFUikgKChOVU1CRVIpIDw9IDI3KQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl9maWx0ZXJfbW9kZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBDQU5fRmlsdGVyTW9kZV9JZE1hc2sgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IGlkZW50aWZpZXIvbWFzayBtb2RlICovDQorI2RlZmluZSBDQU5fRmlsdGVyTW9kZV9JZExpc3QgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IGlkZW50aWZpZXIgbGlzdCBtb2RlICovDQorDQorI2RlZmluZSBJU19DQU5fRklMVEVSX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gQ0FOX0ZpbHRlck1vZGVfSWRNYXNrKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gQ0FOX0ZpbHRlck1vZGVfSWRMaXN0KSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fZmlsdGVyX3NjYWxlIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIENBTl9GaWx0ZXJTY2FsZV8xNmJpdCAgICAgICAoKHVpbnQ4X3QpMHgwMCkgLyohPCBUd28gMTYtYml0IGZpbHRlcnMgKi8NCisjZGVmaW5lIENBTl9GaWx0ZXJTY2FsZV8zMmJpdCAgICAgICAoKHVpbnQ4X3QpMHgwMSkgLyohPCBPbmUgMzItYml0IGZpbHRlciAqLw0KKw0KKyNkZWZpbmUgSVNfQ0FOX0ZJTFRFUl9TQ0FMRShTQ0FMRSkgKCgoU0NBTEUpID09IENBTl9GaWx0ZXJTY2FsZV8xNmJpdCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0NBTEUpID09IENBTl9GaWx0ZXJTY2FsZV8zMmJpdCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX2ZpbHRlcl9GSUZPDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ0FOX0ZpbHRlcl9GSUZPMCAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgRmlsdGVyIEZJRk8gMCBhc3NpZ25tZW50IGZvciBmaWx0ZXIgeCAqLw0KKyNkZWZpbmUgQ0FOX0ZpbHRlcl9GSUZPMSAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgIC8qITwgRmlsdGVyIEZJRk8gMSBhc3NpZ25tZW50IGZvciBmaWx0ZXIgeCAqLw0KKyNkZWZpbmUgSVNfQ0FOX0ZJTFRFUl9GSUZPKEZJRk8pICgoKEZJRk8pID09IENBTl9GaWx0ZXJGSUZPMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJRk8pID09IENBTl9GaWx0ZXJGSUZPMSkpDQorDQorLyogTGVnYWN5IGRlZmluZXMgKi8NCisjZGVmaW5lIENBTl9GaWx0ZXJGSUZPMCAgQ0FOX0ZpbHRlcl9GSUZPMA0KKyNkZWZpbmUgQ0FOX0ZpbHRlckZJRk8xICBDQU5fRmlsdGVyX0ZJRk8xDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX1N0YXJ0X2JhbmtfZmlsdGVyX2Zvcl9zbGF2ZV9DQU4gDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgSVNfQ0FOX0JBTktOVU1CRVIoQkFOS05VTUJFUikgKCgoQkFOS05VTUJFUikgPj0gMSkgJiYgKChCQU5LTlVNQkVSKSA8PSAyNykpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX1R4IA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0NBTl9UUkFOU01JVE1BSUxCT1goVFJBTlNNSVRNQUlMQk9YKSAoKFRSQU5TTUlUTUFJTEJPWCkgPD0gKCh1aW50OF90KTB4MDIpKQ0KKyNkZWZpbmUgSVNfQ0FOX1NURElEKFNURElEKSAgICgoU1RESUQpIDw9ICgodWludDMyX3QpMHg3RkYpKQ0KKyNkZWZpbmUgSVNfQ0FOX0VYVElEKEVYVElEKSAgICgoRVhUSUQpIDw9ICgodWludDMyX3QpMHgxRkZGRkZGRikpDQorI2RlZmluZSBJU19DQU5fRExDKERMQykgICAgICAgKChETEMpIDw9ICgodWludDhfdCkweDA4KSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5faWRlbnRpZmllcl90eXBlIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIENBTl9JZF9TdGFuZGFyZCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiE8IFN0YW5kYXJkIElkICovDQorI2RlZmluZSBDQU5fSWRfRXh0ZW5kZWQgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAgLyohPCBFeHRlbmRlZCBJZCAqLw0KKyNkZWZpbmUgSVNfQ0FOX0lEVFlQRShJRFRZUEUpICgoKElEVFlQRSkgPT0gQ0FOX0lkX1N0YW5kYXJkKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSURUWVBFKSA9PSBDQU5fSWRfRXh0ZW5kZWQpKQ0KKw0KKy8qIExlZ2FjeSBkZWZpbmVzICovDQorI2RlZmluZSBDQU5fSURfU1REICAgICAgQ0FOX0lkX1N0YW5kYXJkICAgICAgICAgICANCisjZGVmaW5lIENBTl9JRF9FWFQgICAgICBDQU5fSWRfRXh0ZW5kZWQNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fcmVtb3RlX3RyYW5zbWlzc2lvbl9yZXF1ZXN0IA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIENBTl9SVFJfRGF0YSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiE8IERhdGEgZnJhbWUgKi8NCisjZGVmaW5lIENBTl9SVFJfUmVtb3RlICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpICAvKiE8IFJlbW90ZSBmcmFtZSAqLw0KKyNkZWZpbmUgSVNfQ0FOX1JUUihSVFIpICgoKFJUUikgPT0gQ0FOX1JUUl9EYXRhKSB8fCAoKFJUUikgPT0gQ0FOX1JUUl9SZW1vdGUpKQ0KKw0KKy8qIExlZ2FjeSBkZWZpbmVzICovDQorI2RlZmluZSBDQU5fUlRSX0RBVEEgICAgIENBTl9SVFJfRGF0YSAgICAgICAgIA0KKyNkZWZpbmUgQ0FOX1JUUl9SRU1PVEUgICBDQU5fUlRSX1JlbW90ZQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl90cmFuc21pdF9jb25zdGFudHMgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ0FOX1R4U3RhdHVzX0ZhaWxlZCAgICAgICAgICgodWludDhfdCkweDAwKS8qITwgQ0FOIHRyYW5zbWlzc2lvbiBmYWlsZWQgKi8NCisjZGVmaW5lIENBTl9UeFN0YXR1c19PayAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgLyohPCBDQU4gdHJhbnNtaXNzaW9uIHN1Y2NlZWRlZCAqLw0KKyNkZWZpbmUgQ0FOX1R4U3RhdHVzX1BlbmRpbmcgICAgICAgICgodWludDhfdCkweDAyKSAvKiE8IENBTiB0cmFuc21pc3Npb24gcGVuZGluZyAqLw0KKyNkZWZpbmUgQ0FOX1R4U3RhdHVzX05vTWFpbEJveCAgICAgICgodWludDhfdCkweDA0KSAvKiE8IENBTiBjZWxsIGRpZCBub3QgcHJvdmlkZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBlbXB0eSBtYWlsYm94ICovDQorLyogTGVnYWN5IGRlZmluZXMgKi8JDQorI2RlZmluZSBDQU5UWEZBSUxFRCAgICAgICAgICAgICAgICAgIENBTl9UeFN0YXR1c19GYWlsZWQNCisjZGVmaW5lIENBTlRYT0sgICAgICAgICAgICAgICAgICAgICAgQ0FOX1R4U3RhdHVzX09rDQorI2RlZmluZSBDQU5UWFBFTkRJTkcgICAgICAgICAgICAgICAgIENBTl9UeFN0YXR1c19QZW5kaW5nDQorI2RlZmluZSBDQU5fTk9fTUIgICAgICAgICAgICAgICAgICAgIENBTl9UeFN0YXR1c19Ob01haWxCb3gNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fcmVjZWl2ZV9GSUZPX251bWJlcl9jb25zdGFudHMgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ0FOX0ZJRk8wICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgLyohPCBDQU4gRklGTyAwIHVzZWQgdG8gcmVjZWl2ZSAqLw0KKyNkZWZpbmUgQ0FOX0ZJRk8xICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgLyohPCBDQU4gRklGTyAxIHVzZWQgdG8gcmVjZWl2ZSAqLw0KKw0KKyNkZWZpbmUgSVNfQ0FOX0ZJRk8oRklGTykgKCgoRklGTykgPT0gQ0FOX0ZJRk8wKSB8fCAoKEZJRk8pID09IENBTl9GSUZPMSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX3NsZWVwX2NvbnN0YW50cyANCisgICogQHsNCisgICovDQorI2RlZmluZSBDQU5fU2xlZXBfRmFpbGVkICAgICAoKHVpbnQ4X3QpMHgwMCkgLyohPCBDQU4gZGlkIG5vdCBlbnRlciB0aGUgc2xlZXAgbW9kZSAqLw0KKyNkZWZpbmUgQ0FOX1NsZWVwX09rICAgICAgICAgKCh1aW50OF90KTB4MDEpIC8qITwgQ0FOIGVudGVyZWQgdGhlIHNsZWVwIG1vZGUgKi8NCisNCisvKiBMZWdhY3kgZGVmaW5lcyAqLwkNCisjZGVmaW5lIENBTlNMRUVQRkFJTEVEICAgQ0FOX1NsZWVwX0ZhaWxlZA0KKyNkZWZpbmUgQ0FOU0xFRVBPSyAgICAgICBDQU5fU2xlZXBfT2sNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU5fd2FrZV91cF9jb25zdGFudHMgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ0FOX1dha2VVcF9GYWlsZWQgICAgICAgICgodWludDhfdCkweDAwKSAvKiE8IENBTiBkaWQgbm90IGxlYXZlIHRoZSBzbGVlcCBtb2RlICovDQorI2RlZmluZSBDQU5fV2FrZVVwX09rICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpIC8qITwgQ0FOIGxlYXZlZCB0aGUgc2xlZXAgbW9kZSAqLw0KKw0KKy8qIExlZ2FjeSBkZWZpbmVzICovDQorI2RlZmluZSBDQU5XQUtFVVBGQUlMRUQgICBDQU5fV2FrZVVwX0ZhaWxlZCAgICAgICAgDQorI2RlZmluZSBDQU5XQUtFVVBPSyAgICAgICBDQU5fV2FrZVVwX09rICAgICAgICANCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEBkZWZncm91cCBDQU5fRXJyb3JfQ29kZV9jb25zdGFudHMNCisgICogQHsNCisgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorI2RlZmluZSBDQU5fRXJyb3JDb2RlX05vRXJyICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgLyohPCBObyBFcnJvciAqLyANCisjZGVmaW5lCUNBTl9FcnJvckNvZGVfU3R1ZmZFcnIgICAgICAgICgodWludDhfdCkweDEwKSAvKiE8IFN0dWZmIEVycm9yICovIA0KKyNkZWZpbmUJQ0FOX0Vycm9yQ29kZV9Gb3JtRXJyICAgICAgICAgKCh1aW50OF90KTB4MjApIC8qITwgRm9ybSBFcnJvciAqLyANCisjZGVmaW5lCUNBTl9FcnJvckNvZGVfQUNLRXJyICAgICAgICAgICgodWludDhfdCkweDMwKSAvKiE8IEFja25vd2xlZGdtZW50IEVycm9yICovIA0KKyNkZWZpbmUJQ0FOX0Vycm9yQ29kZV9CaXRSZWNlc3NpdmVFcnIgKCh1aW50OF90KTB4NDApIC8qITwgQml0IFJlY2Vzc2l2ZSBFcnJvciAqLyANCisjZGVmaW5lCUNBTl9FcnJvckNvZGVfQml0RG9taW5hbnRFcnIgICgodWludDhfdCkweDUwKSAvKiE8IEJpdCBEb21pbmFudCBFcnJvciAqLyANCisjZGVmaW5lCUNBTl9FcnJvckNvZGVfQ1JDRXJyICAgICAgICAgICgodWludDhfdCkweDYwKSAvKiE8IENSQyBFcnJvciAgKi8gDQorI2RlZmluZQlDQU5fRXJyb3JDb2RlX1NvZnR3YXJlU2V0RXJyICAoKHVpbnQ4X3QpMHg3MCkgLyohPCBTb2Z0d2FyZSBTZXQgRXJyb3IgKi8gDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX2ZsYWdzIA0KKyAgKiBAew0KKyAgKi8NCisvKiBJZiB0aGUgZmxhZyBpcyAweDNYWFhYWFhYLCBpdCBtZWFucyB0aGF0IGl0IGNhbiBiZSB1c2VkIHdpdGggQ0FOX0dldEZsYWdTdGF0dXMoKQ0KKyAgIGFuZCBDQU5fQ2xlYXJGbGFnKCkgZnVuY3Rpb25zLiAqLw0KKy8qIElmIHRoZSBmbGFnIGlzIDB4MVhYWFhYWFgsIGl0IG1lYW5zIHRoYXQgaXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIA0KKyAgIENBTl9HZXRGbGFnU3RhdHVzKCkgZnVuY3Rpb24uICAqLw0KKw0KKy8qIFRyYW5zbWl0IEZsYWdzICovDQorI2RlZmluZSBDQU5fRkxBR19SUUNQMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzgwMDAwMDEpIC8qITwgUmVxdWVzdCBNYWlsQm94MCBGbGFnICovDQorI2RlZmluZSBDQU5fRkxBR19SUUNQMSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzgwMDAxMDApIC8qITwgUmVxdWVzdCBNYWlsQm94MSBGbGFnICovDQorI2RlZmluZSBDQU5fRkxBR19SUUNQMiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzgwMTAwMDApIC8qITwgUmVxdWVzdCBNYWlsQm94MiBGbGFnICovDQorDQorLyogUmVjZWl2ZSBGbGFncyAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRk1QMCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEyMDAwMDAzKSAvKiE8IEZJRk8gMCBNZXNzYWdlIFBlbmRpbmcgRmxhZyAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRkYwICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMyMDAwMDA4KSAvKiE8IEZJRk8gMCBGdWxsIEZsYWcgICAgICAgICAgICAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRk9WMCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMyMDAwMDEwKSAvKiE8IEZJRk8gMCBPdmVycnVuIEZsYWcgICAgICAgICAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRk1QMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDE0MDAwMDAzKSAvKiE8IEZJRk8gMSBNZXNzYWdlIFBlbmRpbmcgRmxhZyAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRkYxICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDM0MDAwMDA4KSAvKiE8IEZJRk8gMSBGdWxsIEZsYWcgICAgICAgICAgICAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRk9WMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDM0MDAwMDEwKSAvKiE8IEZJRk8gMSBPdmVycnVuIEZsYWcgICAgICAgICAqLw0KKw0KKy8qIE9wZXJhdGluZyBNb2RlIEZsYWdzICovDQorI2RlZmluZSBDQU5fRkxBR19XS1UgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzEwMDAwMDgpIC8qITwgV2FrZSB1cCBGbGFnICovDQorI2RlZmluZSBDQU5fRkxBR19TTEFLICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzEwMDAwMTIpIC8qITwgU2xlZXAgYWNrbm93bGVkZ2UgRmxhZyAqLw0KKy8qIEBub3RlIFdoZW4gU0xBSyBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKFNMS0lFPTApLCBubyBwb2xsaW5nIG9uIFNMQUtJIGlzIHBvc3NpYmxlLiANCisgICAgICAgICBJbiB0aGlzIGNhc2UgdGhlIFNMQUsgYml0IGNhbiBiZSBwb2xsZWQuKi8NCisNCisvKiBFcnJvciBGbGFncyAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfRVdHICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwRjAwMDAxKSAvKiE8IEVycm9yIFdhcm5pbmcgRmxhZyAgICovDQorI2RlZmluZSBDQU5fRkxBR19FUFYgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTBGMDAwMDIpIC8qITwgRXJyb3IgUGFzc2l2ZSBGbGFnICAgKi8NCisjZGVmaW5lIENBTl9GTEFHX0JPRiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMEYwMDAwNCkgLyohPCBCdXMtT2ZmIEZsYWcgICAgICAgICAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdfTEVDICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDMwRjAwMDcwKSAvKiE8IExhc3QgZXJyb3IgY29kZSBGbGFnICovDQorDQorI2RlZmluZSBJU19DQU5fR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gQ0FOX0ZMQUdfTEVDKSAgfHwgKChGTEFHKSA9PSBDQU5fRkxBR19CT0YpICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IENBTl9GTEFHX0VQVikgIHx8ICgoRkxBRykgPT0gQ0FOX0ZMQUdfRVdHKSAgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDQU5fRkxBR19XS1UpICB8fCAoKEZMQUcpID09IENBTl9GTEFHX0ZPVjApICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gQ0FOX0ZMQUdfRkYwKSAgfHwgKChGTEFHKSA9PSBDQU5fRkxBR19GTVAwKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IENBTl9GTEFHX0ZPVjEpIHx8ICgoRkxBRykgPT0gQ0FOX0ZMQUdfRkYxKSAgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDQU5fRkxBR19GTVAxKSB8fCAoKEZMQUcpID09IENBTl9GTEFHX1JRQ1AyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gQ0FOX0ZMQUdfUlFDUDEpfHwgKChGTEFHKSA9PSBDQU5fRkxBR19SUUNQMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IENBTl9GTEFHX1NMQUsgKSkNCisNCisjZGVmaW5lIElTX0NBTl9DTEVBUl9GTEFHKEZMQUcpKCgoRkxBRykgPT0gQ0FOX0ZMQUdfTEVDKSB8fCAoKEZMQUcpID09IENBTl9GTEFHX1JRQ1AyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IENBTl9GTEFHX1JRQ1AxKSAgfHwgKChGTEFHKSA9PSBDQU5fRkxBR19SUUNQMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDQU5fRkxBR19GRjApICB8fCAoKEZMQUcpID09IENBTl9GTEFHX0ZPVjApIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDQU5fRkxBR19GRjEpIHx8ICgoRkxBRykgPT0gQ0FOX0ZMQUdfRk9WMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDQU5fRkxBR19XS1UpIHx8ICgoRkxBRykgPT0gQ0FOX0ZMQUdfU0xBSykpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKyAgDQorLyoqIEBkZWZncm91cCBDQU5faW50ZXJydXB0cyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgQ0FOX0lUX1RNRSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgLyohPCBUcmFuc21pdCBtYWlsYm94IGVtcHR5IEludGVycnVwdCovDQorDQorLyogUmVjZWl2ZSBJbnRlcnJ1cHRzICovDQorI2RlZmluZSBDQU5fSVRfRk1QMCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAvKiE8IEZJRk8gMCBtZXNzYWdlIHBlbmRpbmcgSW50ZXJydXB0Ki8NCisjZGVmaW5lIENBTl9JVF9GRjAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpIC8qITwgRklGTyAwIGZ1bGwgSW50ZXJydXB0Ki8NCisjZGVmaW5lIENBTl9JVF9GT1YwICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpIC8qITwgRklGTyAwIG92ZXJydW4gSW50ZXJydXB0Ki8NCisjZGVmaW5lIENBTl9JVF9GTVAxICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApIC8qITwgRklGTyAxIG1lc3NhZ2UgcGVuZGluZyBJbnRlcnJ1cHQqLw0KKyNkZWZpbmUgQ0FOX0lUX0ZGMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgLyohPCBGSUZPIDEgZnVsbCBJbnRlcnJ1cHQqLw0KKyNkZWZpbmUgQ0FOX0lUX0ZPVjEgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkgLyohPCBGSUZPIDEgb3ZlcnJ1biBJbnRlcnJ1cHQqLw0KKw0KKy8qIE9wZXJhdGluZyBNb2RlIEludGVycnVwdHMgKi8NCisjZGVmaW5lIENBTl9JVF9XS1UgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApIC8qITwgV2FrZS11cCBJbnRlcnJ1cHQqLw0KKyNkZWZpbmUgQ0FOX0lUX1NMSyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkgLyohPCBTbGVlcCBhY2tub3dsZWRnZSBJbnRlcnJ1cHQqLw0KKw0KKy8qIEVycm9yIEludGVycnVwdHMgKi8NCisjZGVmaW5lIENBTl9JVF9FV0cgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApIC8qITwgRXJyb3Igd2FybmluZyBJbnRlcnJ1cHQqLw0KKyNkZWZpbmUgQ0FOX0lUX0VQViAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgLyohPCBFcnJvciBwYXNzaXZlIEludGVycnVwdCovDQorI2RlZmluZSBDQU5fSVRfQk9GICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAvKiE8IEJ1cy1vZmYgSW50ZXJydXB0Ki8NCisjZGVmaW5lIENBTl9JVF9MRUMgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApIC8qITwgTGFzdCBlcnJvciBjb2RlIEludGVycnVwdCovDQorI2RlZmluZSBDQU5fSVRfRVJSICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKSAvKiE8IEVycm9yIEludGVycnVwdCovDQorDQorLyogRmxhZ3MgbmFtZWQgYXMgSW50ZXJydXB0cyA6IGtlcHQgb25seSBmb3IgRlcgY29tcGF0aWJpbGl0eSAqLw0KKyNkZWZpbmUgQ0FOX0lUX1JRQ1AwICAgQ0FOX0lUX1RNRQ0KKyNkZWZpbmUgQ0FOX0lUX1JRQ1AxICAgQ0FOX0lUX1RNRQ0KKyNkZWZpbmUgQ0FOX0lUX1JRQ1AyICAgQ0FOX0lUX1RNRQ0KKw0KKw0KKyNkZWZpbmUgSVNfQ0FOX0lUKElUKSAgICAgICAgKCgoSVQpID09IENBTl9JVF9UTUUpIHx8ICgoSVQpID09IENBTl9JVF9GTVAwKSAgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBDQU5fSVRfRkYwKSAgfHwgKChJVCkgPT0gQ0FOX0lUX0ZPVjApICB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IENBTl9JVF9GTVAxKSB8fCAoKElUKSA9PSBDQU5fSVRfRkYxKSAgIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gQ0FOX0lUX0ZPVjEpIHx8ICgoSVQpID09IENBTl9JVF9FV0cpICAgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBDQU5fSVRfRVBWKSAgfHwgKChJVCkgPT0gQ0FOX0lUX0JPRikgICB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IENBTl9JVF9MRUMpICB8fCAoKElUKSA9PSBDQU5fSVRfRVJSKSAgIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gQ0FOX0lUX1dLVSkgIHx8ICgoSVQpID09IENBTl9JVF9TTEspKQ0KKw0KKyNkZWZpbmUgSVNfQ0FOX0NMRUFSX0lUKElUKSAoKChJVCkgPT0gQ0FOX0lUX1RNRSkgfHwgKChJVCkgPT0gQ0FOX0lUX0ZGMCkgICAgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBDQU5fSVRfRk9WMCl8fCAoKElUKSA9PSBDQU5fSVRfRkYxKSAgICB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IENBTl9JVF9GT1YxKXx8ICgoSVQpID09IENBTl9JVF9FV0cpICAgIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gQ0FOX0lUX0VQVikgfHwgKChJVCkgPT0gQ0FOX0lUX0JPRikgICAgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBDQU5fSVRfTEVDKSB8fCAoKElUKSA9PSBDQU5fSVRfRVJSKSAgICB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IENBTl9JVF9XS1UpIHx8ICgoSVQpID09IENBTl9JVF9TTEspKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyAgDQorDQorLyogIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSBDQU4gY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdCByZXNldCBzdGF0ZSAqKioqKi8gDQordm9pZCBDQU5fRGVJbml0KENBTl9UeXBlRGVmKiBDQU54KTsNCisNCisvKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit1aW50OF90IENBTl9Jbml0KENBTl9UeXBlRGVmKiBDQU54LCBDQU5fSW5pdFR5cGVEZWYqIENBTl9Jbml0U3RydWN0KTsNCit2b2lkIENBTl9GaWx0ZXJJbml0KENBTl9GaWx0ZXJJbml0VHlwZURlZiogQ0FOX0ZpbHRlckluaXRTdHJ1Y3QpOw0KK3ZvaWQgQ0FOX1N0cnVjdEluaXQoQ0FOX0luaXRUeXBlRGVmKiBDQU5fSW5pdFN0cnVjdCk7DQordm9pZCBDQU5fU2xhdmVTdGFydEJhbmsodWludDhfdCBDQU5fQmFua051bWJlcik7IA0KK3ZvaWQgQ0FOX0RCR0ZyZWV6ZShDQU5fVHlwZURlZiogQ0FOeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIENBTl9UVENvbU1vZGVDbWQoQ0FOX1R5cGVEZWYqIENBTngsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogQ0FOIEZyYW1lcyBUcmFuc21pc3Npb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit1aW50OF90IENBTl9UcmFuc21pdChDQU5fVHlwZURlZiogQ0FOeCwgQ2FuVHhNc2cqIFR4TWVzc2FnZSk7DQordWludDhfdCBDQU5fVHJhbnNtaXRTdGF0dXMoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQ4X3QgVHJhbnNtaXRNYWlsYm94KTsNCit2b2lkIENBTl9DYW5jZWxUcmFuc21pdChDQU5fVHlwZURlZiogQ0FOeCwgdWludDhfdCBNYWlsYm94KTsNCisNCisvKiBDQU4gRnJhbWVzIFJlY2VwdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgQ0FOX1JlY2VpdmUoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQ4X3QgRklGT051bWJlciwgQ2FuUnhNc2cqIFJ4TWVzc2FnZSk7DQordm9pZCBDQU5fRklGT1JlbGVhc2UoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQ4X3QgRklGT051bWJlcik7DQordWludDhfdCBDQU5fTWVzc2FnZVBlbmRpbmcoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQ4X3QgRklGT051bWJlcik7DQorDQorLyogT3BlcmF0aW9uIG1vZGVzIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit1aW50OF90IENBTl9PcGVyYXRpbmdNb2RlUmVxdWVzdChDQU5fVHlwZURlZiogQ0FOeCwgdWludDhfdCBDQU5fT3BlcmF0aW5nTW9kZSk7DQordWludDhfdCBDQU5fU2xlZXAoQ0FOX1R5cGVEZWYqIENBTngpOw0KK3VpbnQ4X3QgQ0FOX1dha2VVcChDQU5fVHlwZURlZiogQ0FOeCk7DQorDQorLyogQ0FOIEJ1cyBFcnJvciBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit1aW50OF90IENBTl9HZXRMYXN0RXJyb3JDb2RlKENBTl9UeXBlRGVmKiBDQU54KTsNCit1aW50OF90IENBTl9HZXRSZWNlaXZlRXJyb3JDb3VudGVyKENBTl9UeXBlRGVmKiBDQU54KTsNCit1aW50OF90IENBTl9HZXRMU0JUcmFuc21pdEVycm9yQ291bnRlcihDQU5fVHlwZURlZiogQ0FOeCk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIENBTl9JVENvbmZpZyhDQU5fVHlwZURlZiogQ0FOeCwgdWludDMyX3QgQ0FOX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK0ZsYWdTdGF0dXMgQ0FOX0dldEZsYWdTdGF0dXMoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQzMl90IENBTl9GTEFHKTsNCit2b2lkIENBTl9DbGVhckZsYWcoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQzMl90IENBTl9GTEFHKTsNCitJVFN0YXR1cyBDQU5fR2V0SVRTdGF0dXMoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQzMl90IENBTl9JVCk7DQordm9pZCBDQU5fQ2xlYXJJVFBlbmRpbmdCaXQoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQzMl90IENBTl9JVCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9DQU5fSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2NyYy5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9jcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjVjNTgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9jcmMuaApAQCAtMCwwICsxLDgzIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfY3JjLmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgQ1JDIGZpcm13YXJlIA0KKyAgKiAgICAgICAgICBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0NSQ19IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9DUkNfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIENSQw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBDUkNfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovICANCisNCit2b2lkIENSQ19SZXNldERSKHZvaWQpOw0KK3VpbnQzMl90IENSQ19DYWxjQ1JDKHVpbnQzMl90IERhdGEpOw0KK3VpbnQzMl90IENSQ19DYWxjQmxvY2tDUkModWludDMyX3QgcEJ1ZmZlcltdLCB1aW50MzJfdCBCdWZmZXJMZW5ndGgpOw0KK3VpbnQzMl90IENSQ19HZXRDUkModm9pZCk7DQordm9pZCBDUkNfU2V0SURSZWdpc3Rlcih1aW50OF90IElEVmFsdWUpOw0KK3VpbnQ4X3QgQ1JDX0dldElEUmVnaXN0ZXIodm9pZCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9DUkNfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2NyeXAuaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfY3J5cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5M2U5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2NyeXAuaApAQCAtMCwwICsxLDM0NCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2NyeXAuaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBDcnlwdG9ncmFwaGljDQorICAqICAgICAgICAgIHByb2Nlc3NvcihDUllQKSBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0NSWVBfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfQ1JZUF9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgQ1JZUA0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIENSWVAgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IENSWVBfQWxnb0RpcjsgICAvKiE8IEVuY3J5cHQgb3IgRGVjcnlwdC4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBAcmVmIENSWVBfQWxnb3JpdGhtX0RpcmVjdGlvbiAqLw0KKyAgdWludDE2X3QgQ1JZUF9BbGdvTW9kZTsgIC8qITwgVERFUy1FQ0IsIFRERVMtQ0JDLCBERVMtRUNCLCBERVMtQ0JDLCBBRVMtRUNCLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFFUy1DQkMsIEFFUy1DVFIsIEFFUy1LZXkuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2YWx1ZSBvZiBAcmVmIENSWVBfQWxnb3JpdGhtX01vZGUgKi8NCisgIHVpbnQxNl90IENSWVBfRGF0YVR5cGU7ICAvKiE8IDMyLWJpdCBkYXRhLCAxNi1iaXQgZGF0YSwgYml0IGRhdGEgb3IgYml0LXN0cmluZy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ1JZUF9EYXRhX1R5cGUgKi8gDQorICB1aW50MTZfdCBDUllQX0tleVNpemU7ICAgLyohPCBVc2VkIG9ubHkgaW4gQUVTIG1vZGUgb25seSA6IDEyOCwgMTkyIG9yIDI1NiBiaXQgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgbGVuZ3RoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgQ1JZUF9LZXlfU2l6ZV9mb3JfQUVTX29ubHkgKi8NCit9Q1JZUF9Jbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgIENSWVAgS2V5KHMpIHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3QgQ1JZUF9LZXkwTGVmdDsgIC8qITwgS2V5IDAgTGVmdCAgKi8NCisgIHVpbnQzMl90IENSWVBfS2V5MFJpZ2h0OyAvKiE8IEtleSAwIFJpZ2h0ICovDQorICB1aW50MzJfdCBDUllQX0tleTFMZWZ0OyAgLyohPCBLZXkgMSBsZWZ0ICAqLw0KKyAgdWludDMyX3QgQ1JZUF9LZXkxUmlnaHQ7IC8qITwgS2V5IDEgUmlnaHQgKi8NCisgIHVpbnQzMl90IENSWVBfS2V5MkxlZnQ7ICAvKiE8IEtleSAyIGxlZnQgICovDQorICB1aW50MzJfdCBDUllQX0tleTJSaWdodDsgLyohPCBLZXkgMiBSaWdodCAqLw0KKyAgdWludDMyX3QgQ1JZUF9LZXkzTGVmdDsgIC8qITwgS2V5IDMgbGVmdCAgKi8NCisgIHVpbnQzMl90IENSWVBfS2V5M1JpZ2h0OyAvKiE8IEtleSAzIFJpZ2h0ICovDQorfUNSWVBfS2V5SW5pdFR5cGVEZWY7DQorLyoqIA0KKyAgKiBAYnJpZWYgICBDUllQIEluaXRpYWxpemF0aW9uIFZlY3RvcnMgKElWKSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IENSWVBfSVYwTGVmdDsgIC8qITwgSW5pdCBWZWN0b3IgMCBMZWZ0ICAqLw0KKyAgdWludDMyX3QgQ1JZUF9JVjBSaWdodDsgLyohPCBJbml0IFZlY3RvciAwIFJpZ2h0ICovDQorICB1aW50MzJfdCBDUllQX0lWMUxlZnQ7ICAvKiE8IEluaXQgVmVjdG9yIDEgbGVmdCAgKi8NCisgIHVpbnQzMl90IENSWVBfSVYxUmlnaHQ7IC8qITwgSW5pdCBWZWN0b3IgMSBSaWdodCAqLw0KK31DUllQX0lWSW5pdFR5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIENSWVAgY29udGV4dCBzd2FwcGluZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIC8qITwgQ29uZmlndXJhdGlvbiAqLw0KKyAgdWludDMyX3QgQ1JfYml0czl0bzI7DQorICAvKiE8IEtFWSAqLw0KKyAgdWludDMyX3QgQ1JZUF9JVjBMUjsNCisgIHVpbnQzMl90IENSWVBfSVYwUlI7DQorICB1aW50MzJfdCBDUllQX0lWMUxSOw0KKyAgdWludDMyX3QgQ1JZUF9JVjFSUjsNCisgIC8qITwgSVYgKi8NCisgIHVpbnQzMl90IENSWVBfSzBMUjsNCisgIHVpbnQzMl90IENSWVBfSzBSUjsNCisgIHVpbnQzMl90IENSWVBfSzFMUjsNCisgIHVpbnQzMl90IENSWVBfSzFSUjsNCisgIHVpbnQzMl90IENSWVBfSzJMUjsNCisgIHVpbnQzMl90IENSWVBfSzJSUjsNCisgIHVpbnQzMl90IENSWVBfSzNMUjsNCisgIHVpbnQzMl90IENSWVBfSzNSUjsNCit9Q1JZUF9Db250ZXh0Ow0KKw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBDUllQX0V4cG9ydGVkX0NvbnN0YW50cw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVBfQWxnb3JpdGhtX0RpcmVjdGlvbiANCisgICogQHsNCisgICovDQorI2RlZmluZSBDUllQX0FsZ29EaXJfRW5jcnlwdCAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgQ1JZUF9BbGdvRGlyX0RlY3J5cHQgICAgICAoKHVpbnQxNl90KTB4MDAwNCkNCisjZGVmaW5lIElTX0NSWVBfQUxHT0RJUihBTEdPRElSKSAoKChBTEdPRElSKSA9PSBDUllQX0FsZ29EaXJfRW5jcnlwdCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFMR09ESVIpID09IENSWVBfQWxnb0Rpcl9EZWNyeXB0KSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKyANCisvKiogQGRlZmdyb3VwIENSWVBfQWxnb3JpdGhtX01vZGUgDQorICAqIEB7DQorICAqLw0KKw0KKy8qITwgVERFUyBNb2RlcyAqLw0KKyNkZWZpbmUgQ1JZUF9BbGdvTW9kZV9UREVTX0VDQiAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIENSWVBfQWxnb01vZGVfVERFU19DQkMgICAgKCh1aW50MTZfdCkweDAwMDgpDQorDQorLyohPCBERVMgTW9kZXMgKi8NCisjZGVmaW5lIENSWVBfQWxnb01vZGVfREVTX0VDQiAgICAgKCh1aW50MTZfdCkweDAwMTApDQorI2RlZmluZSBDUllQX0FsZ29Nb2RlX0RFU19DQkMgICAgICgodWludDE2X3QpMHgwMDE4KQ0KKw0KKy8qITwgQUVTIE1vZGVzICovDQorI2RlZmluZSBDUllQX0FsZ29Nb2RlX0FFU19FQ0IgICAgICgodWludDE2X3QpMHgwMDIwKQ0KKyNkZWZpbmUgQ1JZUF9BbGdvTW9kZV9BRVNfQ0JDICAgICAoKHVpbnQxNl90KTB4MDAyOCkNCisjZGVmaW5lIENSWVBfQWxnb01vZGVfQUVTX0NUUiAgICAgKCh1aW50MTZfdCkweDAwMzApDQorI2RlZmluZSBDUllQX0FsZ29Nb2RlX0FFU19LZXkgICAgICgodWludDE2X3QpMHgwMDM4KQ0KKw0KKyNkZWZpbmUgSVNfQ1JZUF9BTEdPTU9ERShBTEdPTU9ERSkgKCgoQUxHT01PREUpID09IENSWVBfQWxnb01vZGVfVERFU19FQ0IpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxHT01PREUpID09IENSWVBfQWxnb01vZGVfVERFU19DQkMpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTEdPTU9ERSkgPT0gQ1JZUF9BbGdvTW9kZV9ERVNfRUNCKXx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxHT01PREUpID09IENSWVBfQWxnb01vZGVfREVTX0NCQykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTEdPTU9ERSkgPT0gQ1JZUF9BbGdvTW9kZV9BRVNfRUNCKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFMR09NT0RFKSA9PSBDUllQX0FsZ29Nb2RlX0FFU19DQkMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxHT01PREUpID09IENSWVBfQWxnb01vZGVfQUVTX0NUUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTEdPTU9ERSkgPT0gQ1JZUF9BbGdvTW9kZV9BRVNfS2V5KSkNCisvKioNCisgICogQH0NCisgICovIA0KKyANCisvKiogQGRlZmdyb3VwIENSWVBfRGF0YV9UeXBlIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIENSWVBfRGF0YVR5cGVfMzJiICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBDUllQX0RhdGFUeXBlXzE2YiAgICAgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgQ1JZUF9EYXRhVHlwZV84YiAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkNCisjZGVmaW5lIENSWVBfRGF0YVR5cGVfMWIgICAgICAgICAgKCh1aW50MTZfdCkweDAwQzApDQorI2RlZmluZSBJU19DUllQX0RBVEFUWVBFKERBVEFUWVBFKSAoKChEQVRBVFlQRSkgPT0gQ1JZUF9EYXRhVHlwZV8zMmIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERBVEFUWVBFKSA9PSBDUllQX0RhdGFUeXBlXzE2Yil8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQVRBVFlQRSkgPT0gQ1JZUF9EYXRhVHlwZV84Yil8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQVRBVFlQRSkgPT0gQ1JZUF9EYXRhVHlwZV8xYikpICANCisvKioNCisgICogQH0NCisgICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKy8qKiBAZGVmZ3JvdXAgQ1JZUF9LZXlfU2l6ZV9mb3JfQUVTX29ubHkgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgQ1JZUF9LZXlTaXplXzEyOGIgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIENSWVBfS2V5U2l6ZV8xOTJiICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApDQorI2RlZmluZSBDUllQX0tleVNpemVfMjU2YiAgICAgICAgICgodWludDE2X3QpMHgwMjAwKQ0KKyNkZWZpbmUgSVNfQ1JZUF9LRVlTSVpFKEtFWVNJWkUpICgoKEtFWVNJWkUpID09IENSWVBfS2V5U2l6ZV8xMjhiKXx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChLRVlTSVpFKSA9PSBDUllQX0tleVNpemVfMTkyYil8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoS0VZU0laRSkgPT0gQ1JZUF9LZXlTaXplXzI1NmIpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVBfZmxhZ3NfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovDQorI2RlZmluZSBDUllQX0ZMQUdfQlVTWSAgICAgICAgICAgICgodWludDhfdCkweDEwKSAgLyohPCBUaGUgQ1JZUCBjb3JlIGlzIGN1cnJlbnRseSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmcgYSBibG9jayBvZiBkYXRhIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBrZXkgcHJlcGFyYXRpb24gKGZvciANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFFUyBkZWNyeXB0aW9uKS4gKi8NCisjZGVmaW5lIENSWVBfRkxBR19JRkVNICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IElucHV0IEZpZm8gRW1wdHkgKi8NCisjZGVmaW5lIENSWVBfRkxBR19JRk5GICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiE8IElucHV0IEZpZm8gaXMgTm90IEZ1bGwgKi8NCisjZGVmaW5lIENSWVBfRkxBR19JTlJJUyAgICAgICAgICAgKCh1aW50OF90KTB4MjIpICAvKiE8IFJhdyBpbnRlcnJ1cHQgcGVuZGluZyAqLw0KKyNkZWZpbmUgQ1JZUF9GTEFHX09GTkUgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qITwgSW5wdXQgRmlmbyBzZXJ2aWNlIHJhdyANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBzdGF0dXMgKi8NCisjZGVmaW5lIENSWVBfRkxBR19PRkZVICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiE8IE91dHB1dCBGaWZvIGlzIEZ1bGwgKi8NCisjZGVmaW5lIENSWVBfRkxBR19PVVRSSVMgICAgICAgICAgKCh1aW50OF90KTB4MjEpICAvKiE8IE91dHB1dCBGaWZvIHNlcnZpY2UgcmF3IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHN0YXR1cyAqLw0KKw0KKyNkZWZpbmUgSVNfQ1JZUF9HRVRfRkxBRyhGTEFHKSAoKChGTEFHKSA9PSBDUllQX0ZMQUdfSUZFTSkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gQ1JZUF9GTEFHX0lGTkYpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IENSWVBfRkxBR19PRk5FKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDUllQX0ZMQUdfT0ZGVSkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gQ1JZUF9GTEFHX0JVU1kpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IENSWVBfRkxBR19PVVRSSVMpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBDUllQX0ZMQUdfSU5SSVMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVBfaW50ZXJydXB0c19kZWZpbml0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIENSWVBfSVRfSU5JICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpIC8qITwgSU4gRmlmbyBJbnRlcnJ1cHQgKi8NCisjZGVmaW5lIENSWVBfSVRfT1VUSSAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpIC8qITwgT1VUIEZpZm8gSW50ZXJydXB0ICovDQorI2RlZmluZSBJU19DUllQX0NPTkZJR19JVChJVCkgKCgoKElUKSAmICh1aW50OF90KTB4RkMpID09IDB4MDApICYmICgoSVQpICE9IDB4MDApKQ0KKyNkZWZpbmUgSVNfQ1JZUF9HRVRfSVQoSVQpICgoKElUKSA9PSBDUllQX0lUX0lOSSkgfHwgKChJVCkgPT0gQ1JZUF9JVF9PVVRJKSkNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDUllQX0VuY3J5cHRpb25fRGVjcnlwdGlvbl9tb2Rlc19kZWZpbml0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIE1PREVfRU5DUllQVCAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkNCisjZGVmaW5lIE1PREVfREVDUllQVCAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBDUllQX0RNQV90cmFuc2Zlcl9yZXF1ZXN0cyANCisgICogQHsNCisgICovDQorI2RlZmluZSBDUllQX0RNQVJlcV9EYXRhSU4gICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpDQorI2RlZmluZSBDUllQX0RNQVJlcV9EYXRhT1VUICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBJU19DUllQX0RNQVJFUShETUFSRVEpICgoKChETUFSRVEpICYgKHVpbnQ4X3QpMHhGQykgPT0gMHgwMCkgJiYgKChETUFSRVEpICE9IDB4MDApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSBDUllQIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgKioqKi8NCit2b2lkIENSWVBfRGVJbml0KHZvaWQpOw0KKw0KKy8qIENSWVAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBDUllQX0luaXQoQ1JZUF9Jbml0VHlwZURlZiogQ1JZUF9Jbml0U3RydWN0KTsNCit2b2lkIENSWVBfU3RydWN0SW5pdChDUllQX0luaXRUeXBlRGVmKiBDUllQX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgQ1JZUF9LZXlJbml0KENSWVBfS2V5SW5pdFR5cGVEZWYqIENSWVBfS2V5SW5pdFN0cnVjdCk7DQordm9pZCBDUllQX0tleVN0cnVjdEluaXQoQ1JZUF9LZXlJbml0VHlwZURlZiogQ1JZUF9LZXlJbml0U3RydWN0KTsNCit2b2lkIENSWVBfSVZJbml0KENSWVBfSVZJbml0VHlwZURlZiogQ1JZUF9JVkluaXRTdHJ1Y3QpOw0KK3ZvaWQgQ1JZUF9JVlN0cnVjdEluaXQoQ1JZUF9JVkluaXRUeXBlRGVmKiBDUllQX0lWSW5pdFN0cnVjdCk7DQordm9pZCBDUllQX0NtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIENSWVAgRGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBDUllQX0RhdGFJbih1aW50MzJfdCBEYXRhKTsNCit1aW50MzJfdCBDUllQX0RhdGFPdXQodm9pZCk7DQordm9pZCBDUllQX0ZJRk9GbHVzaCh2b2lkKTsNCisNCisvKiBDUllQIENvbnRleHQgc3dhcHBpbmcgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK0Vycm9yU3RhdHVzIENSWVBfU2F2ZUNvbnRleHQoQ1JZUF9Db250ZXh0KiBDUllQX0NvbnRleHRTYXZlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUF9LZXlJbml0VHlwZURlZiogQ1JZUF9LZXlJbml0U3RydWN0KTsNCit2b2lkIENSWVBfUmVzdG9yZUNvbnRleHQoQ1JZUF9Db250ZXh0KiBDUllQX0NvbnRleHRSZXN0b3JlKTsNCisNCisvKiBDUllQJ3MgRE1BIGludGVyZmFjZSBmdW5jdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgQ1JZUF9ETUFDbWQodWludDhfdCBDUllQX0RNQVJlcSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgQ1JZUF9JVENvbmZpZyh1aW50OF90IENSWVBfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorSVRTdGF0dXMgQ1JZUF9HZXRJVFN0YXR1cyh1aW50OF90IENSWVBfSVQpOw0KK0ZsYWdTdGF0dXMgQ1JZUF9HZXRGbGFnU3RhdHVzKHVpbnQ4X3QgQ1JZUF9GTEFHKTsNCisNCisvKiBIaWdoIExldmVsIEFFUyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorRXJyb3JTdGF0dXMgQ1JZUF9BRVNfRUNCKHVpbnQ4X3QgTW9kZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqS2V5LCB1aW50MTZfdCBLZXlzaXplLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KTsNCisNCitFcnJvclN0YXR1cyBDUllQX0FFU19DQkModWludDhfdCBNb2RlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IEluaXRWZWN0b3JzWzE2XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqS2V5LCB1aW50MTZfdCBLZXlzaXplLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KTsNCisNCitFcnJvclN0YXR1cyBDUllQX0FFU19DVFIodWludDhfdCBNb2RlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IEluaXRWZWN0b3JzWzE2XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqS2V5LCB1aW50MTZfdCBLZXlzaXplLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KTsNCisNCisvKiBIaWdoIExldmVsIFRERVMgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK0Vycm9yU3RhdHVzIENSWVBfVERFU19FQ0IodWludDhfdCBNb2RlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgS2V5WzI0XSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqSW5wdXQsIHVpbnQzMl90IElsZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KTsNCisNCitFcnJvclN0YXR1cyBDUllQX1RERVNfQ0JDKHVpbnQ4X3QgTW9kZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgS2V5WzI0XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgSW5pdFZlY3RvcnNbOF0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKk91dHB1dCk7DQorDQorLyogSGlnaCBMZXZlbCBERVMgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK0Vycm9yU3RhdHVzIENSWVBfREVTX0VDQih1aW50OF90IE1vZGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgS2V5WzhdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KTsNCisNCitFcnJvclN0YXR1cyBDUllQX0RFU19DQkModWludDhfdCBNb2RlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IEtleVs4XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBJbml0VmVjdG9yc1s4XSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqSW5wdXQsdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfQ1JZUF9IICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2RhYy5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9kYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWUxYzMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9kYWMuaApAQCAtMCwwICsxLDMwNCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2RhYy5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIERBQyBmaXJtd2FyZSANCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9EQUNfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfREFDX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBEQUMNCisgICogQHsNCisgICovDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogDQorICAqIEBicmllZiAgREFDIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24NCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBEQUNfVHJpZ2dlcjsgICAgICAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIHRyaWdnZXIgZm9yIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX3RyaWdnZXJfc2VsZWN0aW9uICovDQorDQorICB1aW50MzJfdCBEQUNfV2F2ZUdlbmVyYXRpb247ICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBEQUMgY2hhbm5lbCBub2lzZSB3YXZlcyBvciB0cmlhbmdsZSB3YXZlcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGdlbmVyYXRlZCwgb3Igd2hldGhlciBubyB3YXZlIGlzIGdlbmVyYXRlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgREFDX3dhdmVfZ2VuZXJhdGlvbiAqLw0KKw0KKyAgdWludDMyX3QgREFDX0xGU1JVbm1hc2tfVHJpYW5nbGVBbXBsaXR1ZGU7IC8qITwgU3BlY2lmaWVzIHRoZSBMRlNSIG1hc2sgZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiBvcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1heGltdW0gYW1wbGl0dWRlIHRyaWFuZ2xlIGdlbmVyYXRpb24gZm9yIHRoZSBEQUMgY2hhbm5lbC4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERBQ19sZnNydW5tYXNrX3RyaWFuZ2xlYW1wbGl0dWRlICovDQorDQorICB1aW50MzJfdCBEQUNfT3V0cHV0QnVmZmVyOyAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgREFDIGNoYW5uZWwgb3V0cHV0IGJ1ZmZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQUNfb3V0cHV0X2J1ZmZlciAqLw0KK31EQUNfSW5pdFR5cGVEZWY7DQorDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIERBQ19FeHBvcnRlZF9Db25zdGFudHMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBEQUNfdHJpZ2dlcl9zZWxlY3Rpb24gDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgREFDX1RyaWdnZXJfTm9uZSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIC8qITwgQ29udmVyc2lvbiBpcyBhdXRvbWF0aWMgb25jZSB0aGUgREFDMV9ESFJ4eHh4IHJlZ2lzdGVyIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gbG9hZGVkLCBhbmQgbm90IGJ5IGV4dGVybmFsIHRyaWdnZXIgKi8NCisjZGVmaW5lIERBQ19UcmlnZ2VyX1QyX1RSR08gICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDI0KSAvKiE8IFRJTTIgVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovDQorI2RlZmluZSBEQUNfVHJpZ2dlcl9UNF9UUkdPICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyQykgLyohPCBUSU00IFRSR08gc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgY29udmVyc2lvbiB0cmlnZ2VyIGZvciBEQUMgY2hhbm5lbCAqLw0KKyNkZWZpbmUgREFDX1RyaWdnZXJfVDVfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMUMpIC8qITwgVElNNSBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8NCisjZGVmaW5lIERBQ19UcmlnZ2VyX1Q2X1RSR08gICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAvKiE8IFRJTTYgVFJHTyBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovDQorI2RlZmluZSBEQUNfVHJpZ2dlcl9UN19UUkdPICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxNCkgLyohPCBUSU03IFRSR08gc2VsZWN0ZWQgYXMgZXh0ZXJuYWwgY29udmVyc2lvbiB0cmlnZ2VyIGZvciBEQUMgY2hhbm5lbCAqLw0KKyNkZWZpbmUgREFDX1RyaWdnZXJfVDhfVFJHTyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEMpIC8qITwgVElNOCBUUkdPIHNlbGVjdGVkIGFzIGV4dGVybmFsIGNvbnZlcnNpb24gdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKw0KKyNkZWZpbmUgREFDX1RyaWdnZXJfRXh0X0lUOSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzQpIC8qITwgRVhUSSBMaW5lOSBldmVudCBzZWxlY3RlZCBhcyBleHRlcm5hbCBjb252ZXJzaW9uIHRyaWdnZXIgZm9yIERBQyBjaGFubmVsICovDQorI2RlZmluZSBEQUNfVHJpZ2dlcl9Tb2Z0d2FyZSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAzQykgLyohPCBDb252ZXJzaW9uIHN0YXJ0ZWQgYnkgc29mdHdhcmUgdHJpZ2dlciBmb3IgREFDIGNoYW5uZWwgKi8NCisNCisjZGVmaW5lIElTX0RBQ19UUklHR0VSKFRSSUdHRVIpICgoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX05vbmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1Q2X1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1Q4X1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1Q3X1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1Q1X1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1QyX1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1Q0X1RSR08pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX0V4dF9JVDkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IERBQ19UcmlnZ2VyX1NvZnR3YXJlKSkNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBEQUNfd2F2ZV9nZW5lcmF0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIERBQ19XYXZlR2VuZXJhdGlvbl9Ob25lICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgREFDX1dhdmVHZW5lcmF0aW9uX05vaXNlICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBEQUNfV2F2ZUdlbmVyYXRpb25fVHJpYW5nbGUgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIElTX0RBQ19HRU5FUkFURV9XQVZFKFdBVkUpICgoKFdBVkUpID09IERBQ19XYXZlR2VuZXJhdGlvbl9Ob25lKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVZFKSA9PSBEQUNfV2F2ZUdlbmVyYXRpb25fTm9pc2UpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdBVkUpID09IERBQ19XYXZlR2VuZXJhdGlvbl9UcmlhbmdsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgREFDX2xmc3J1bm1hc2tfdHJpYW5nbGVhbXBsaXR1ZGUNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBEQUNfTEZTUlVubWFza19CaXQwICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXQwIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHMxXzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHMyXzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsyOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHMzXzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMzAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFszOjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHM0XzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs0OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHM1XzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNTAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs1OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHM2XzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNjAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs2OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHM3XzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNzAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs3OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHM4XzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs4OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHM5XzAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwOTAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFs5OjBdIGZvciBub2lzZSB3YXZlIGdlbmVyYXRpb24gKi8NCisjZGVmaW5lIERBQ19MRlNSVW5tYXNrX0JpdHMxMF8wICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwQTAwKSAvKiE8IFVubWFzayBEQUMgY2hhbm5lbCBMRlNSIGJpdFsxMDowXSBmb3Igbm9pc2Ugd2F2ZSBnZW5lcmF0aW9uICovDQorI2RlZmluZSBEQUNfTEZTUlVubWFza19CaXRzMTFfMCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEIwMCkgLyohPCBVbm1hc2sgREFDIGNoYW5uZWwgTEZTUiBiaXRbMTE6MF0gZm9yIG5vaXNlIHdhdmUgZ2VuZXJhdGlvbiAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzEgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMSAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzMgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMyAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzcgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgNyAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzE1ICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAzMDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMTUgKi8NCisjZGVmaW5lIERBQ19UcmlhbmdsZUFtcGxpdHVkZV8zMSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDMxICovDQorI2RlZmluZSBEQUNfVHJpYW5nbGVBbXBsaXR1ZGVfNjMgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDUwMCkgLyohPCBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiA2MyAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzEyNyAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA2MDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMTI3ICovDQorI2RlZmluZSBEQUNfVHJpYW5nbGVBbXBsaXR1ZGVfMjU1ICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDcwMCkgLyohPCBTZWxlY3QgbWF4IHRyaWFuZ2xlIGFtcGxpdHVkZSBvZiAyNTUgKi8NCisjZGVmaW5lIERBQ19UcmlhbmdsZUFtcGxpdHVkZV81MTEgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSAvKiE8IFNlbGVjdCBtYXggdHJpYW5nbGUgYW1wbGl0dWRlIG9mIDUxMSAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzEwMjMgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA5MDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMTAyMyAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzIwNDcgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBBMDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgMjA0NyAqLw0KKyNkZWZpbmUgREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzQwOTUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDBCMDApIC8qITwgU2VsZWN0IG1heCB0cmlhbmdsZSBhbXBsaXR1ZGUgb2YgNDA5NSAqLw0KKw0KKyNkZWZpbmUgSVNfREFDX0xGU1JfVU5NQVNLX1RSSUFOR0xFX0FNUExJVFVERShWQUxVRSkgKCgoVkFMVUUpID09IERBQ19MRlNSVW5tYXNrX0JpdDApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfTEZTUlVubWFza19CaXRzMV8wKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX0xGU1JVbm1hc2tfQml0czJfMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19MRlNSVW5tYXNrX0JpdHMzXzApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfTEZTUlVubWFza19CaXRzNF8wKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX0xGU1JVbm1hc2tfQml0czVfMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19MRlNSVW5tYXNrX0JpdHM2XzApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfTEZTUlVubWFza19CaXRzN18wKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX0xGU1JVbm1hc2tfQml0czhfMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19MRlNSVW5tYXNrX0JpdHM5XzApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfTEZTUlVubWFza19CaXRzMTBfMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19MRlNSVW5tYXNrX0JpdHMxMV8wKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfVHJpYW5nbGVBbXBsaXR1ZGVfMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19UcmlhbmdsZUFtcGxpdHVkZV83KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzE1KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzMxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzYzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzEyNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19UcmlhbmdsZUFtcGxpdHVkZV8yNTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfVHJpYW5nbGVBbXBsaXR1ZGVfNTExKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWQUxVRSkgPT0gREFDX1RyaWFuZ2xlQW1wbGl0dWRlXzEwMjMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBEQUNfVHJpYW5nbGVBbXBsaXR1ZGVfMjA0NykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVkFMVUUpID09IERBQ19UcmlhbmdsZUFtcGxpdHVkZV80MDk1KSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBEQUNfb3V0cHV0X2J1ZmZlciANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBEQUNfT3V0cHV0QnVmZmVyX0VuYWJsZSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERBQ19PdXRwdXRCdWZmZXJfRGlzYWJsZSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgSVNfREFDX09VVFBVVF9CVUZGRVJfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBEQUNfT3V0cHV0QnVmZmVyX0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBEQUNfT3V0cHV0QnVmZmVyX0Rpc2FibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERBQ19DaGFubmVsX3NlbGVjdGlvbiANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBEQUNfQ2hhbm5lbF8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERBQ19DaGFubmVsXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgSVNfREFDX0NIQU5ORUwoQ0hBTk5FTCkgKCgoQ0hBTk5FTCkgPT0gREFDX0NoYW5uZWxfMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gREFDX0NoYW5uZWxfMikpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgREFDX2RhdGFfYWxpZ25lbWVudCANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBEQUNfQWxpZ25fMTJiX1IgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERBQ19BbGlnbl8xMmJfTCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgREFDX0FsaWduXzhiX1IgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBJU19EQUNfQUxJR04oQUxJR04pICgoKEFMSUdOKSA9PSBEQUNfQWxpZ25fMTJiX1IpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUxJR04pID09IERBQ19BbGlnbl8xMmJfTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTElHTikgPT0gREFDX0FsaWduXzhiX1IpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERBQ193YXZlX2dlbmVyYXRpb24gDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgREFDX1dhdmVfTm9pc2UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBEQUNfV2F2ZV9UcmlhbmdsZSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIElTX0RBQ19XQVZFKFdBVkUpICgoKFdBVkUpID09IERBQ19XYXZlX05vaXNlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXQVZFKSA9PSBEQUNfV2F2ZV9UcmlhbmdsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgREFDX2RhdGEgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSVNfREFDX0RBVEEoREFUQSkgKChEQVRBKSA8PSAweEZGRjApIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisgIA0KKy8qKiBAZGVmZ3JvdXAgREFDX2ludGVycnVwdHNfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovICAgDQorI2RlZmluZSBEQUNfSVRfRE1BVURSICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgIA0KKyNkZWZpbmUgSVNfREFDX0lUKElUKSAoKChJVCkgPT0gREFDX0lUX0RNQVVEUikpIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBEQUNfZmxhZ3NfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovIA0KKyAgDQorI2RlZmluZSBEQUNfRkxBR19ETUFVRFIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgIA0KKyNkZWZpbmUgSVNfREFDX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gREFDX0ZMQUdfRE1BVURSKSkgIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyAgDQorDQorLyogIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSBEQUMgY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdCByZXNldCBzdGF0ZSAqKioqKi8gIA0KK3ZvaWQgREFDX0RlSW5pdCh2b2lkKTsNCisNCisvKiAgREFDIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb246IHRyaWdnZXIsIG91dHB1dCBidWZmZXIsIGRhdGEgZm9ybWF0IGZ1bmN0aW9ucyAqLw0KK3ZvaWQgREFDX0luaXQodWludDMyX3QgREFDX0NoYW5uZWwsIERBQ19Jbml0VHlwZURlZiogREFDX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgREFDX1N0cnVjdEluaXQoREFDX0luaXRUeXBlRGVmKiBEQUNfSW5pdFN0cnVjdCk7DQordm9pZCBEQUNfQ21kKHVpbnQzMl90IERBQ19DaGFubmVsLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgREFDX1NvZnR3YXJlVHJpZ2dlckNtZCh1aW50MzJfdCBEQUNfQ2hhbm5lbCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIERBQ19EdWFsU29mdHdhcmVUcmlnZ2VyQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBEQUNfV2F2ZUdlbmVyYXRpb25DbWQodWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19XYXZlLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgREFDX1NldENoYW5uZWwxRGF0YSh1aW50MzJfdCBEQUNfQWxpZ24sIHVpbnQxNl90IERhdGEpOw0KK3ZvaWQgREFDX1NldENoYW5uZWwyRGF0YSh1aW50MzJfdCBEQUNfQWxpZ24sIHVpbnQxNl90IERhdGEpOw0KK3ZvaWQgREFDX1NldER1YWxDaGFubmVsRGF0YSh1aW50MzJfdCBEQUNfQWxpZ24sIHVpbnQxNl90IERhdGEyLCB1aW50MTZfdCBEYXRhMSk7DQordWludDE2X3QgREFDX0dldERhdGFPdXRwdXRWYWx1ZSh1aW50MzJfdCBEQUNfQ2hhbm5lbCk7DQorDQorLyogRE1BIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIERBQ19ETUFDbWQodWludDMyX3QgREFDX0NoYW5uZWwsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIERBQ19JVENvbmZpZyh1aW50MzJfdCBEQUNfQ2hhbm5lbCwgdWludDMyX3QgREFDX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK0ZsYWdTdGF0dXMgREFDX0dldEZsYWdTdGF0dXModWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19GTEFHKTsNCit2b2lkIERBQ19DbGVhckZsYWcodWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19GTEFHKTsNCitJVFN0YXR1cyBEQUNfR2V0SVRTdGF0dXModWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19JVCk7DQordm9pZCBEQUNfQ2xlYXJJVFBlbmRpbmdCaXQodWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19JVCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKl9fU1RNMzJGMnh4X0RBQ19IICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfZGJnbWN1LmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2RiZ21jdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWJhYTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2RiZ21jdS5oCkBAIC0wLDAgKzEsMTA5IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfZGJnbWN1LmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgREJHTUNVIGZpcm13YXJlIGxpYnJhcnkuDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZm5kZWYgX19TVE0zMkYyeHhfREJHTUNVX0gNCisjZGVmaW5lIF9fU1RNMzJGMnh4X0RCR01DVV9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgREJHTUNVDQorICAqIEB7DQorICAqLyANCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBEQkdNQ1VfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERCR01DVV9TTEVFUCAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgREJHTUNVX1NUT1AgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBEQkdNQ1VfU1RBTkRCWSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIElTX0RCR01DVV9QRVJJUEgoUEVSSVBIKSAoKCgoUEVSSVBIKSAmIDB4RkZGRkZGRjgpID09IDB4MDApICYmICgoUEVSSVBIKSAhPSAweDAwKSkNCisNCisjZGVmaW5lIERCR01DVV9USU0yX1NUT1AgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgREJHTUNVX1RJTTNfU1RPUCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBEQkdNQ1VfVElNNF9TVE9QICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIERCR01DVV9USU01X1NUT1AgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgREJHTUNVX1RJTTZfU1RPUCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBEQkdNQ1VfVElNN19TVE9QICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIERCR01DVV9USU0xMl9TVE9QICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgREJHTUNVX1RJTTEzX1NUT1AgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBEQkdNQ1VfVElNMTRfU1RPUCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIERCR01DVV9SVENfU1RPUCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgREJHTUNVX1dXREdfU1RPUCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBEQkdNQ1VfSVdER19TVE9QICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIERCR01DVV9JMkMxX1NNQlVTX1RJTUVPVVQgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgREJHTUNVX0kyQzJfU01CVVNfVElNRU9VVCAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBEQkdNQ1VfSTJDM19TTUJVU19USU1FT1VUICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkNCisjZGVmaW5lIERCR01DVV9DQU4xX1NUT1AgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgREJHTUNVX0NBTjJfU1RPUCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSBJU19EQkdNQ1VfQVBCMVBFUklQSChQRVJJUEgpICgoKChQRVJJUEgpICYgMHhGOTFGRTIwMCkgPT0gMHgwMCkgJiYgKChQRVJJUEgpICE9IDB4MDApKQ0KKw0KKyNkZWZpbmUgREJHTUNVX1RJTTFfU1RPUCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBEQkdNQ1VfVElNOF9TVE9QICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIERCR01DVV9USU05X1NUT1AgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgREJHTUNVX1RJTTEwX1NUT1AgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBEQkdNQ1VfVElNMTFfU1RPUCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIElTX0RCR01DVV9BUEIyUEVSSVBIKFBFUklQSCkgKCgoKFBFUklQSCkgJiAweEZGRjhGRkZDKSA9PSAweDAwKSAmJiAoKFBFUklQSCkgIT0gMHgwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KK3VpbnQzMl90IERCR01DVV9HZXRSRVZJRCh2b2lkKTsNCit1aW50MzJfdCBEQkdNQ1VfR2V0REVWSUQodm9pZCk7DQordm9pZCBEQkdNQ1VfQ29uZmlnKHVpbnQzMl90IERCR01DVV9QZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBEQkdNQ1VfQVBCMVBlcmlwaENvbmZpZyh1aW50MzJfdCBEQkdNQ1VfUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgREJHTUNVX0FQQjJQZXJpcGhDb25maWcodWludDMyX3QgREJHTUNVX1BlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0RCR01DVV9IICovDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9kY21pLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2RjbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjMyMTI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9kY21pLmgKQEAgLTAsMCArMSwzMTIgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9kY21pLmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgRENNSSBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0RDTUlfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfRENNSV9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgRENNSQ0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiogDQorICAqIEBicmllZiAgIERDTUkgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IERDTUlfQ2FwdHVyZU1vZGU7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIENhcHR1cmUgTW9kZTogQ29udGludW91cyBvciBTbmFwc2hvdC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERDTUlfQ2FwdHVyZV9Nb2RlICovDQorDQorICB1aW50MTZfdCBEQ01JX1N5bmNocm9Nb2RlOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBTeW5jaHJvbml6YXRpb24gTW9kZTogSGFyZHdhcmUgb3IgRW1iZWRkZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQ01JX1N5bmNocm9uaXphdGlvbl9Nb2RlICovDQorDQorICB1aW50MTZfdCBEQ01JX1BDS1BvbGFyaXR5OyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBQaXhlbCBjbG9jayBwb2xhcml0eTogRmFsbGluZyBvciBSaXNpbmcuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBEQ01JX1BJWENLX1BvbGFyaXR5ICovDQorDQorICB1aW50MTZfdCBEQ01JX1ZTUG9sYXJpdHk7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBWZXJ0aWNhbCBzeW5jaHJvbml6YXRpb24gcG9sYXJpdHk6IEhpZ2ggb3IgTG93Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRENNSV9WU1lOQ19Qb2xhcml0eSAqLw0KKw0KKyAgdWludDE2X3QgRENNSV9IU1BvbGFyaXR5OyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgSG9yaXpvbnRhbCBzeW5jaHJvbml6YXRpb24gcG9sYXJpdHk6IEhpZ2ggb3IgTG93Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRENNSV9IU1lOQ19Qb2xhcml0eSAqLw0KKw0KKyAgdWludDE2X3QgRENNSV9DYXB0dXJlUmF0ZTsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IG9mIGZyYW1lIGNhcHR1cmU6IEFsbCwgMS8yIG9yIDEvNC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERDTUlfQ2FwdHVyZV9SYXRlICovDQorDQorICB1aW50MTZfdCBEQ01JX0V4dGVuZGVkRGF0YU1vZGU7IC8qITwgU3BlY2lmaWVzIHRoZSBkYXRhIHdpZHRoOiA4LWJpdCwgMTAtYml0LCAxMi1iaXQgb3IgMTQtYml0Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRENNSV9FeHRlbmRlZF9EYXRhX01vZGUgKi8NCit9IERDTUlfSW5pdFR5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgICBEQ01JIENST1AgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IERDTUlfVmVydGljYWxTdGFydExpbmU7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFZlcnRpY2FsIHN0YXJ0IGxpbmUgY291bnQgZnJvbSB3aGljaCB0aGUgaW1hZ2UgY2FwdHVyZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgc3RhcnQuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMCBhbmQgMHgxRkZGICovDQorDQorICB1aW50MTZfdCBEQ01JX0hvcml6b250YWxPZmZzZXRDb3VudDsgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGl4ZWwgY2xvY2tzIHRvIGNvdW50IGJlZm9yZSBzdGFydGluZyBhIGNhcHR1cmUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwIGFuZCAweDNGRkYgKi8NCisNCisgIHVpbnQxNl90IERDTUlfVmVydGljYWxMaW5lQ291bnQ7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBsaW5lcyB0byBiZSBjYXB0dXJlZCBmcm9tIHRoZSBzdGFydGluZyBwb2ludC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAgYW5kIDB4M0ZGRiAqLw0KKw0KKyAgdWludDE2X3QgRENNSV9DYXB0dXJlQ291bnQ7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBpeGVsIGNsb2NrcyB0byBiZSBjYXB0dXJlZCBmcm9tIHRoZSBzdGFydGluZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50IG9uIHRoZSBzYW1lIGxpbmUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwIGFuZCAweDNGRkYgKi8NCit9IERDTUlfQ1JPUEluaXRUeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmICAgRENNSSBFbWJlZGRlZCBTeW5jaHJvbmlzYXRpb24gQ09ERSBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBEQ01JX0ZyYW1lU3RhcnRDb2RlOyAvKiE8IFNwZWNpZmllcyB0aGUgY29kZSBvZiB0aGUgZnJhbWUgc3RhcnQgZGVsaW1pdGVyLiAqLw0KKyAgdWludDhfdCBEQ01JX0xpbmVTdGFydENvZGU7ICAvKiE8IFNwZWNpZmllcyB0aGUgY29kZSBvZiB0aGUgbGluZSBzdGFydCBkZWxpbWl0ZXIuICovDQorICB1aW50OF90IERDTUlfTGluZUVuZENvZGU7ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjb2RlIG9mIHRoZSBsaW5lIGVuZCBkZWxpbWl0ZXIuICovDQorICB1aW50OF90IERDTUlfRnJhbWVFbmRDb2RlOyAgIC8qITwgU3BlY2lmaWVzIHRoZSBjb2RlIG9mIHRoZSBmcmFtZSBlbmQgZGVsaW1pdGVyLiAqLw0KK30gRENNSV9Db2Rlc0luaXRUeXBlRGVmOw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBEQ01JX0V4cG9ydGVkX0NvbnN0YW50cw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERDTUlfQ2FwdHVyZV9Nb2RlIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBEQ01JX0NhcHR1cmVNb2RlX0NvbnRpbnVvdXMgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITwgVGhlIHJlY2VpdmVkIGRhdGEgYXJlIHRyYW5zZmVycmVkIGNvbnRpbnVvdXNseSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgdGhyb3VnaCB0aGUgRE1BICovDQorI2RlZmluZSBEQ01JX0NhcHR1cmVNb2RlX1NuYXBTaG90ICAgICAgKCh1aW50MTZfdCkweDAwMDIpIC8qITwgT25jZSBhY3RpdmF0ZWQsIHRoZSBpbnRlcmZhY2Ugd2FpdHMgZm9yIHRoZSBzdGFydCBvZiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSBhbmQgdGhlbiB0cmFuc2ZlcnMgYSBzaW5nbGUgZnJhbWUgdGhyb3VnaCB0aGUgRE1BICovDQorI2RlZmluZSBJU19EQ01JX0NBUFRVUkVfTU9ERShNT0RFKSgoKE1PREUpID09IERDTUlfQ2FwdHVyZU1vZGVfQ29udGludW91cykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBEQ01JX0NhcHR1cmVNb2RlX1NuYXBTaG90KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRENNSV9TeW5jaHJvbml6YXRpb25fTW9kZQ0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBEQ01JX1N5bmNocm9Nb2RlX0hhcmR3YXJlICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8IEhhcmR3YXJlIHN5bmNocm9uaXphdGlvbiBkYXRhIGNhcHR1cmUgKGZyYW1lL2xpbmUgc3RhcnQvc3RvcCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIEhTWU5DL1ZTWU5DIHNpZ25hbHMgKi8NCisjZGVmaW5lIERDTUlfU3luY2hyb01vZGVfRW1iZWRkZWQgICAgKCh1aW50MTZfdCkweDAwMTApIC8qITwgRW1iZWRkZWQgc3luY2hyb25pemF0aW9uIGRhdGEgY2FwdHVyZSBpcyBzeW5jaHJvbml6ZWQgd2l0aCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemF0aW9uIGNvZGVzIGVtYmVkZGVkIGluIHRoZSBkYXRhIGZsb3cgKi8NCisjZGVmaW5lIElTX0RDTUlfU1lOQ0hSTyhNT0RFKSgoKE1PREUpID09IERDTUlfU3luY2hyb01vZGVfSGFyZHdhcmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IERDTUlfU3luY2hyb01vZGVfRW1iZWRkZWQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBEQ01JX1BJWENLX1BvbGFyaXR5IA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBEQ01JX1BDS1BvbGFyaXR5X0ZhbGxpbmcgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITwgUGl4ZWwgY2xvY2sgYWN0aXZlIG9uIEZhbGxpbmcgZWRnZSAqLw0KKyNkZWZpbmUgRENNSV9QQ0tQb2xhcml0eV9SaXNpbmcgICAgICgodWludDE2X3QpMHgwMDIwKSAvKiE8IFBpeGVsIGNsb2NrIGFjdGl2ZSBvbiBSaXNpbmcgZWRnZSAqLw0KKyNkZWZpbmUgSVNfRENNSV9QQ0tQT0xBUklUWShQT0xBUklUWSkoKChQT0xBUklUWSkgPT0gRENNSV9QQ0tQb2xhcml0eV9GYWxsaW5nKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPTEFSSVRZKSA9PSBEQ01JX1BDS1BvbGFyaXR5X1Jpc2luZykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERDTUlfVlNZTkNfUG9sYXJpdHkgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERDTUlfVlNQb2xhcml0eV9Mb3cgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8IFZlcnRpY2FsIHN5bmNocm9uaXphdGlvbiBhY3RpdmUgTG93ICovDQorI2RlZmluZSBEQ01JX1ZTUG9sYXJpdHlfSGlnaCAgICAoKHVpbnQxNl90KTB4MDA4MCkgLyohPCBWZXJ0aWNhbCBzeW5jaHJvbml6YXRpb24gYWN0aXZlIEhpZ2ggKi8NCisjZGVmaW5lIElTX0RDTUlfVlNQT0xBUklUWShQT0xBUklUWSkoKChQT0xBUklUWSkgPT0gRENNSV9WU1BvbGFyaXR5X0xvdykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPTEFSSVRZKSA9PSBEQ01JX1ZTUG9sYXJpdHlfSGlnaCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERDTUlfSFNZTkNfUG9sYXJpdHkgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERDTUlfSFNQb2xhcml0eV9Mb3cgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8IEhvcml6b250YWwgc3luY2hyb25pemF0aW9uIGFjdGl2ZSBMb3cgKi8NCisjZGVmaW5lIERDTUlfSFNQb2xhcml0eV9IaWdoICAgICgodWludDE2X3QpMHgwMDQwKSAvKiE8IEhvcml6b250YWwgc3luY2hyb25pemF0aW9uIGFjdGl2ZSBIaWdoICovDQorI2RlZmluZSBJU19EQ01JX0hTUE9MQVJJVFkoUE9MQVJJVFkpKCgoUE9MQVJJVFkpID09IERDTUlfSFNQb2xhcml0eV9Mb3cpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT0xBUklUWSkgPT0gRENNSV9IU1BvbGFyaXR5X0hpZ2gpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBEQ01JX0NhcHR1cmVfUmF0ZSANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRENNSV9DYXB0dXJlUmF0ZV9BbGxfRnJhbWUgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8IEFsbCBmcmFtZXMgYXJlIGNhcHR1cmVkICovDQorI2RlZmluZSBEQ01JX0NhcHR1cmVSYXRlXzFvZjJfRnJhbWUgICAgKCh1aW50MTZfdCkweDAxMDApIC8qITwgRXZlcnkgYWx0ZXJuYXRlIGZyYW1lIGNhcHR1cmVkICovDQorI2RlZmluZSBEQ01JX0NhcHR1cmVSYXRlXzFvZjRfRnJhbWUgICAgKCh1aW50MTZfdCkweDAyMDApIC8qITwgT25lIGZyYW1lIGluIDQgZnJhbWVzIGNhcHR1cmVkICovDQorI2RlZmluZSBJU19EQ01JX0NBUFRVUkVfUkFURShSQVRFKSAoKChSQVRFKSA9PSBEQ01JX0NhcHR1cmVSYXRlX0FsbF9GcmFtZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkFURSkgPT0gRENNSV9DYXB0dXJlUmF0ZV8xb2YyX0ZyYW1lKSB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJBVEUpID09IERDTUlfQ2FwdHVyZVJhdGVfMW9mNF9GcmFtZSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERDTUlfRXh0ZW5kZWRfRGF0YV9Nb2RlIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBEQ01JX0V4dGVuZGVkRGF0YU1vZGVfOGIgICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8IEludGVyZmFjZSBjYXB0dXJlcyA4LWJpdCBkYXRhIG9uIGV2ZXJ5IHBpeGVsIGNsb2NrICovDQorI2RlZmluZSBEQ01JX0V4dGVuZGVkRGF0YU1vZGVfMTBiICAgICgodWludDE2X3QpMHgwNDAwKSAvKiE8IEludGVyZmFjZSBjYXB0dXJlcyAxMC1iaXQgZGF0YSBvbiBldmVyeSBwaXhlbCBjbG9jayAqLw0KKyNkZWZpbmUgRENNSV9FeHRlbmRlZERhdGFNb2RlXzEyYiAgICAoKHVpbnQxNl90KTB4MDgwMCkgLyohPCBJbnRlcmZhY2UgY2FwdHVyZXMgMTItYml0IGRhdGEgb24gZXZlcnkgcGl4ZWwgY2xvY2sgKi8NCisjZGVmaW5lIERDTUlfRXh0ZW5kZWREYXRhTW9kZV8xNGIgICAgKCh1aW50MTZfdCkweDBDMDApIC8qITwgSW50ZXJmYWNlIGNhcHR1cmVzIDE0LWJpdCBkYXRhIG9uIGV2ZXJ5IHBpeGVsIGNsb2NrICovDQorI2RlZmluZSBJU19EQ01JX0VYVEVOREVEX0RBVEEoREFUQSkoKChEQVRBKSA9PSBEQ01JX0V4dGVuZGVkRGF0YU1vZGVfOGIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERBVEEpID09IERDTUlfRXh0ZW5kZWREYXRhTW9kZV8xMGIpIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREFUQSkgPT0gRENNSV9FeHRlbmRlZERhdGFNb2RlXzEyYikgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQVRBKSA9PSBEQ01JX0V4dGVuZGVkRGF0YU1vZGVfMTRiKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRENNSV9pbnRlcnJ1cHRfc291cmNlcyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRENNSV9JVF9GUkFNRSAgICAoKHVpbnQxNl90KTB4MDAwMSkNCisjZGVmaW5lIERDTUlfSVRfT1ZGICAgICAgKCh1aW50MTZfdCkweDAwMDIpDQorI2RlZmluZSBEQ01JX0lUX0VSUiAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgRENNSV9JVF9WU1lOQyAgICAoKHVpbnQxNl90KTB4MDAwOCkNCisjZGVmaW5lIERDTUlfSVRfTElORSAgICAgKCh1aW50MTZfdCkweDAwMTApDQorI2RlZmluZSBJU19EQ01JX0NPTkZJR19JVChJVCkgKCgoKElUKSAmICh1aW50MTZfdCkweEZGRTApID09IDB4MDAwMCkgJiYgKChJVCkgIT0gMHgwMDAwKSkNCisjZGVmaW5lIElTX0RDTUlfR0VUX0lUKElUKSAoKChJVCkgPT0gRENNSV9JVF9GUkFNRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBEQ01JX0lUX09WRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBEQ01JX0lUX0VSUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBEQ01JX0lUX1ZTWU5DKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IERDTUlfSVRfTElORSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERDTUlfRmxhZ3MgDQorICAqIEB7DQorICAqLyANCisvKiogDQorICAqIEBicmllZiAgIERDTUkgU1IgcmVnaXN0ZXIgIA0KKyAgKi8gDQorI2RlZmluZSBEQ01JX0ZMQUdfSFNZTkMgICAgICgodWludDE2X3QpMHgyMDAxKQ0KKyNkZWZpbmUgRENNSV9GTEFHX1ZTWU5DICAgICAoKHVpbnQxNl90KTB4MjAwMikNCisjZGVmaW5lIERDTUlfRkxBR19GTkUgICAgICAgKCh1aW50MTZfdCkweDIwMDQpDQorLyoqIA0KKyAgKiBAYnJpZWYgICBEQ01JIFJJU1IgcmVnaXN0ZXIgIA0KKyAgKi8gDQorI2RlZmluZSBEQ01JX0ZMQUdfRlJBTUVSSSAgICAoKHVpbnQxNl90KTB4MDAwMSkNCisjZGVmaW5lIERDTUlfRkxBR19PVkZSSSAgICAgICgodWludDE2X3QpMHgwMDAyKQ0KKyNkZWZpbmUgRENNSV9GTEFHX0VSUlJJICAgICAgKCh1aW50MTZfdCkweDAwMDQpDQorI2RlZmluZSBEQ01JX0ZMQUdfVlNZTkNSSSAgICAoKHVpbnQxNl90KTB4MDAwOCkNCisjZGVmaW5lIERDTUlfRkxBR19MSU5FUkkgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKy8qKiANCisgICogQGJyaWVmICAgRENNSSBNSVNSIHJlZ2lzdGVyICANCisgICovIA0KKyNkZWZpbmUgRENNSV9GTEFHX0ZSQU1FTUkgICAgKCh1aW50MTZfdCkweDEwMDEpDQorI2RlZmluZSBEQ01JX0ZMQUdfT1ZGTUkgICAgICAoKHVpbnQxNl90KTB4MTAwMikNCisjZGVmaW5lIERDTUlfRkxBR19FUlJNSSAgICAgICgodWludDE2X3QpMHgxMDA0KQ0KKyNkZWZpbmUgRENNSV9GTEFHX1ZTWU5DTUkgICAgKCh1aW50MTZfdCkweDEwMDgpDQorI2RlZmluZSBEQ01JX0ZMQUdfTElORU1JICAgICAoKHVpbnQxNl90KTB4MTAxMCkNCisjZGVmaW5lIElTX0RDTUlfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gRENNSV9GTEFHX0hTWU5DKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERDTUlfRkxBR19WU1lOQykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBEQ01JX0ZMQUdfRk5FKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERDTUlfRkxBR19GUkFNRVJJKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERDTUlfRkxBR19PVkZSSSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBEQ01JX0ZMQUdfRVJSUkkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRENNSV9GTEFHX1ZTWU5DUkkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRENNSV9GTEFHX0xJTkVSSSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBEQ01JX0ZMQUdfRlJBTUVNSSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBEQ01JX0ZMQUdfT1ZGTUkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRENNSV9GTEFHX0VSUk1JKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERDTUlfRkxBR19WU1lOQ01JKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERDTUlfRkxBR19MSU5FTUkpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorI2RlZmluZSBJU19EQ01JX0NMRUFSX0ZMQUcoRkxBRykgKCgoKEZMQUcpICYgKHVpbnQxNl90KTB4RkZFMCkgPT0gMHgwMDAwKSAmJiAoKEZMQUcpICE9IDB4MDAwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorDQorLyogIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSBEQ01JIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgKioqKi8gDQordm9pZCBEQ01JX0RlSW5pdCh2b2lkKTsNCisNCisvKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRENNSV9Jbml0KERDTUlfSW5pdFR5cGVEZWYqIERDTUlfSW5pdFN0cnVjdCk7DQordm9pZCBEQ01JX1N0cnVjdEluaXQoRENNSV9Jbml0VHlwZURlZiogRENNSV9Jbml0U3RydWN0KTsNCit2b2lkIERDTUlfQ1JPUENvbmZpZyhEQ01JX0NST1BJbml0VHlwZURlZiogRENNSV9DUk9QSW5pdFN0cnVjdCk7DQordm9pZCBEQ01JX0NST1BDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIERDTUlfU2V0RW1iZWRkZWRTeW5jaHJvQ29kZXMoRENNSV9Db2Rlc0luaXRUeXBlRGVmKiBEQ01JX0NvZGVzSW5pdFN0cnVjdCk7DQordm9pZCBEQ01JX0pQRUdDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBJbWFnZSBjYXB0dXJlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRENNSV9DbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIERDTUlfQ2FwdHVyZUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3VpbnQzMl90IERDTUlfUmVhZERhdGEodm9pZCk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIERDTUlfSVRDb25maWcodWludDE2X3QgRENNSV9JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCitGbGFnU3RhdHVzIERDTUlfR2V0RmxhZ1N0YXR1cyh1aW50MTZfdCBEQ01JX0ZMQUcpOw0KK3ZvaWQgRENNSV9DbGVhckZsYWcodWludDE2X3QgRENNSV9GTEFHKTsNCitJVFN0YXR1cyBEQ01JX0dldElUU3RhdHVzKHVpbnQxNl90IERDTUlfSVQpOw0KK3ZvaWQgRENNSV9DbGVhcklUUGVuZGluZ0JpdCh1aW50MTZfdCBEQ01JX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfRENNSV9IICovDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9kbWEuaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjN2RmZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfZG1hLmgKQEAgLTAsMCArMSw2MDkgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9kbWEuaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBETUEgZmlybXdhcmUgDQorICAqICAgICAgICAgIGxpYnJhcnkuDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8gDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0RNQV9IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9ETUFfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIERNQQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBETUEgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IERNQV9DaGFubmVsOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjaGFubmVsIHVzZWQgZm9yIHRoZSBzcGVjaWZpZWQgc3RyZWFtLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfY2hhbm5lbCAqLw0KKyANCisgIHVpbnQzMl90IERNQV9QZXJpcGhlcmFsQmFzZUFkZHI7IC8qITwgU3BlY2lmaWVzIHRoZSBwZXJpcGhlcmFsIGJhc2UgYWRkcmVzcyBmb3IgRE1BeSBTdHJlYW14LiAqLw0KKw0KKyAgdWludDMyX3QgRE1BX01lbW9yeTBCYXNlQWRkcjsgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1lbW9yeSAwIGJhc2UgYWRkcmVzcyBmb3IgRE1BeSBTdHJlYW14LiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZW1vcnkgaXMgdGhlIGRlZmF1bHQgbWVtb3J5IHVzZWQgd2hlbiBkb3VibGUgYnVmZmVyIG1vZGUgaXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGVuYWJsZWQuICovDQorDQorICB1aW50MzJfdCBETUFfRElSOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyBpZiB0aGUgZGF0YSB3aWxsIGJlIHRyYW5zZmVycmVkIGZyb20gbWVtb3J5IHRvIHBlcmlwaGVyYWwsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIG1lbW9yeSB0byBtZW1vcnkgb3IgZnJvbSBwZXJpcGhlcmFsIHRvIG1lbW9yeS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfZGF0YV90cmFuc2Zlcl9kaXJlY3Rpb24gKi8NCisNCisgIHVpbnQzMl90IERNQV9CdWZmZXJTaXplOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBidWZmZXIgc2l6ZSwgaW4gZGF0YSB1bml0LCBvZiB0aGUgc3BlY2lmaWVkIFN0cmVhbS4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhIHVuaXQgaXMgZXF1YWwgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGluIERNQV9QZXJpcGhlcmFsRGF0YVNpemUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgRE1BX01lbW9yeURhdGFTaXplIG1lbWJlcnMgZGVwZW5kaW5nIGluIHRoZSB0cmFuc2ZlciBkaXJlY3Rpb24uICovDQorDQorICB1aW50MzJfdCBETUFfUGVyaXBoZXJhbEluYzsgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBQZXJpcGhlcmFsIGFkZHJlc3MgcmVnaXN0ZXIgc2hvdWxkIGJlIGluY3JlbWVudGVkIG9yIG5vdC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfcGVyaXBoZXJhbF9pbmNyZW1lbnRlZF9tb2RlICovDQorDQorICB1aW50MzJfdCBETUFfTWVtb3J5SW5jOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBtZW1vcnkgYWRkcmVzcyByZWdpc3RlciBzaG91bGQgYmUgaW5jcmVtZW50ZWQgb3Igbm90Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERNQV9tZW1vcnlfaW5jcmVtZW50ZWRfbW9kZSAqLw0KKw0KKyAgdWludDMyX3QgRE1BX1BlcmlwaGVyYWxEYXRhU2l6ZTsgLyohPCBTcGVjaWZpZXMgdGhlIFBlcmlwaGVyYWwgZGF0YSB3aWR0aC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfcGVyaXBoZXJhbF9kYXRhX3NpemUgKi8NCisNCisgIHVpbnQzMl90IERNQV9NZW1vcnlEYXRhU2l6ZTsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBNZW1vcnkgZGF0YSB3aWR0aC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfbWVtb3J5X2RhdGFfc2l6ZSAqLw0KKw0KKyAgdWludDMyX3QgRE1BX01vZGU7ICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG9wZXJhdGlvbiBtb2RlIG9mIHRoZSBETUF5IFN0cmVhbXguDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRE1BX2NpcmN1bGFyX25vcm1hbF9tb2RlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoZSBjaXJjdWxhciBidWZmZXIgbW9kZSBjYW5ub3QgYmUgdXNlZCBpZiB0aGUgbWVtb3J5LXRvLW1lbW9yeQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHRyYW5zZmVyIGlzIGNvbmZpZ3VyZWQgb24gdGhlIHNlbGVjdGVkIFN0cmVhbSAqLw0KKw0KKyAgdWludDMyX3QgRE1BX1ByaW9yaXR5OyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHNvZnR3YXJlIHByaW9yaXR5IGZvciB0aGUgRE1BeSBTdHJlYW14Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERNQV9wcmlvcml0eV9sZXZlbCAqLw0KKw0KKyAgdWludDMyX3QgRE1BX0ZJRk9Nb2RlOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyBpZiB0aGUgRklGTyBtb2RlIG9yIERpcmVjdCBtb2RlIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHNwZWNpZmllZCBTdHJlYW0uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRE1BX2ZpZm9fZGlyZWN0X21vZGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhlIERpcmVjdCBtb2RlIChGSUZPIG1vZGUgZGlzYWJsZWQpIGNhbm5vdCBiZSB1c2VkIGlmIHRoZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeS10by1tZW1vcnkgZGF0YSB0cmFuc2ZlciBpcyBjb25maWd1cmVkIG9uIHRoZSBzZWxlY3RlZCBTdHJlYW0gKi8NCisNCisgIHVpbnQzMl90IERNQV9GSUZPVGhyZXNob2xkOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBGSUZPIHRocmVzaG9sZCBsZXZlbC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfZmlmb190aHJlc2hvbGRfbGV2ZWwgKi8NCisNCisgIHVpbnQzMl90IERNQV9NZW1vcnlCdXJzdDsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBCdXJzdCB0cmFuc2ZlciBjb25maWd1cmF0aW9uIGZvciB0aGUgbWVtb3J5IHRyYW5zZmVycy4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgaW4gYSBzaW5nbGUgbm9uIGludGVycnVwdGFibGUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERNQV9tZW1vcnlfYnVyc3QgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoZSBidXJzdCBtb2RlIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlIGFkZHJlc3MgSW5jcmVtZW50IG1vZGUgaXMgZW5hYmxlZC4gKi8NCisNCisgIHVpbnQzMl90IERNQV9QZXJpcGhlcmFsQnVyc3Q7ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBCdXJzdCB0cmFuc2ZlciBjb25maWd1cmF0aW9uIGZvciB0aGUgcGVyaXBoZXJhbCB0cmFuc2ZlcnMuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGluIGEgc2luZ2xlIG5vbiBpbnRlcnJ1cHRhYmxlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFfcGVyaXBoZXJhbF9idXJzdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGUgYnVyc3QgbW9kZSBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZSBhZGRyZXNzIEluY3JlbWVudCBtb2RlIGlzIGVuYWJsZWQuICovICANCit9RE1BX0luaXRUeXBlRGVmOw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBETUFfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSVNfRE1BX0FMTF9QRVJJUEgoUEVSSVBIKSAoKChQRVJJUEgpID09IERNQTFfU3RyZWFtMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtNSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTFfU3RyZWFtNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtNSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IERNQTJfU3RyZWFtNykpDQorDQorI2RlZmluZSBJU19ETUFfQUxMX0NPTlRST0xMRVIoQ09OVFJPTExFUikgKCgoQ09OVFJPTExFUikgPT0gRE1BMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENPTlRST0xMRVIpID09IERNQTIpKQ0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX2NoYW5uZWwgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERNQV9DaGFubmVsXzAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBETUFfQ2hhbm5lbF8xICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0NoYW5uZWxfMiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIERNQV9DaGFubmVsXzMgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDYwMDAwMDApDQorI2RlZmluZSBETUFfQ2hhbm5lbF80ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0NoYW5uZWxfNSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwQTAwMDAwMCkNCisjZGVmaW5lIERNQV9DaGFubmVsXzYgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MEMwMDAwMDApDQorI2RlZmluZSBETUFfQ2hhbm5lbF83ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDBFMDAwMDAwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX0NIQU5ORUwoQ0hBTk5FTCkgKCgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfNSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gRE1BX0NoYW5uZWxfNykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9kYXRhX3RyYW5zZmVyX2RpcmVjdGlvbiANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRE1BX0RJUl9QZXJpcGhlcmFsVG9NZW1vcnkgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERNQV9ESVJfTWVtb3J5VG9QZXJpcGhlcmFsICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApIA0KKyNkZWZpbmUgRE1BX0RJUl9NZW1vcnlUb01lbW9yeSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisNCisjZGVmaW5lIElTX0RNQV9ESVJFQ1RJT04oRElSRUNUSU9OKSAoKChESVJFQ1RJT04pID09IERNQV9ESVJfUGVyaXBoZXJhbFRvTWVtb3J5ICkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERJUkVDVElPTikgPT0gRE1BX0RJUl9NZW1vcnlUb1BlcmlwaGVyYWwpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRElSRUNUSU9OKSA9PSBETUFfRElSX01lbW9yeVRvTWVtb3J5KSkgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9kYXRhX2J1ZmZlcl9zaXplIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBJU19ETUFfQlVGRkVSX1NJWkUoU0laRSkgKCgoU0laRSkgPj0gMHgxKSAmJiAoKFNJWkUpIDwgMHgxMDAwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9wZXJpcGhlcmFsX2luY3JlbWVudGVkX21vZGUgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERNQV9QZXJpcGhlcmFsSW5jX0VuYWJsZSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBETUFfUGVyaXBoZXJhbEluY19EaXNhYmxlICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX1BFUklQSEVSQUxfSU5DX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gRE1BX1BlcmlwaGVyYWxJbmNfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBETUFfUGVyaXBoZXJhbEluY19EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX21lbW9yeV9pbmNyZW1lbnRlZF9tb2RlIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBETUFfTWVtb3J5SW5jX0VuYWJsZSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgRE1BX01lbW9yeUluY19EaXNhYmxlICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisNCisjZGVmaW5lIElTX0RNQV9NRU1PUllfSU5DX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gRE1BX01lbW9yeUluY19FbmFibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gRE1BX01lbW9yeUluY19EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX3BlcmlwaGVyYWxfZGF0YV9zaXplIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBETUFfUGVyaXBoZXJhbERhdGFTaXplX0J5dGUgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSANCisjZGVmaW5lIERNQV9QZXJpcGhlcmFsRGF0YVNpemVfSGFsZldvcmQgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApIA0KKyNkZWZpbmUgRE1BX1BlcmlwaGVyYWxEYXRhU2l6ZV9Xb3JkICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisNCisjZGVmaW5lIElTX0RNQV9QRVJJUEhFUkFMX0RBVEFfU0laRShTSVpFKSAoKChTSVpFKSA9PSBETUFfUGVyaXBoZXJhbERhdGFTaXplX0J5dGUpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRE1BX1BlcmlwaGVyYWxEYXRhU2l6ZV9IYWxmV29yZCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IERNQV9QZXJpcGhlcmFsRGF0YVNpemVfV29yZCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9tZW1vcnlfZGF0YV9zaXplIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBETUFfTWVtb3J5RGF0YVNpemVfQnl0ZSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSANCisjZGVmaW5lIERNQV9NZW1vcnlEYXRhU2l6ZV9IYWxmV29yZCAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApIA0KKyNkZWZpbmUgRE1BX01lbW9yeURhdGFTaXplX1dvcmQgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisNCisjZGVmaW5lIElTX0RNQV9NRU1PUllfREFUQV9TSVpFKFNJWkUpICgoKFNJWkUpID09IERNQV9NZW1vcnlEYXRhU2l6ZV9CeXRlKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRE1BX01lbW9yeURhdGFTaXplX0hhbGZXb3JkKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBETUFfTWVtb3J5RGF0YVNpemVfV29yZCApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBETUFfY2lyY3VsYXJfbm9ybWFsX21vZGUgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERNQV9Nb2RlX05vcm1hbCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIA0KKyNkZWZpbmUgRE1BX01vZGVfQ2lyY3VsYXIgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisNCisjZGVmaW5lIElTX0RNQV9NT0RFKE1PREUpICgoKE1PREUpID09IERNQV9Nb2RlX05vcm1hbCApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IERNQV9Nb2RlX0NpcmN1bGFyKSkgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9wcmlvcml0eV9sZXZlbCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRE1BX1ByaW9yaXR5X0xvdyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERNQV9Qcmlvcml0eV9NZWRpdW0gICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApIA0KKyNkZWZpbmUgRE1BX1ByaW9yaXR5X0hpZ2ggICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIERNQV9Qcmlvcml0eV9WZXJ5SGlnaCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMzAwMDApDQorDQorI2RlZmluZSBJU19ETUFfUFJJT1JJVFkoUFJJT1JJVFkpICgoKFBSSU9SSVRZKSA9PSBETUFfUHJpb3JpdHlfTG93ICkgICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSSU9SSVRZKSA9PSBETUFfUHJpb3JpdHlfTWVkaXVtKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSSU9SSVRZKSA9PSBETUFfUHJpb3JpdHlfSGlnaCkgICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSSU9SSVRZKSA9PSBETUFfUHJpb3JpdHlfVmVyeUhpZ2gpKSANCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX2ZpZm9fZGlyZWN0X21vZGUgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERNQV9GSUZPTW9kZV9EaXNhYmxlICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIA0KKyNkZWZpbmUgRE1BX0ZJRk9Nb2RlX0VuYWJsZSAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisNCisjZGVmaW5lIElTX0RNQV9GSUZPX01PREVfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBETUFfRklGT01vZGVfRGlzYWJsZSApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBETUFfRklGT01vZGVfRW5hYmxlKSkgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9maWZvX3RocmVzaG9sZF9sZXZlbCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRE1BX0ZJRk9UaHJlc2hvbGRfMVF1YXJ0ZXJGdWxsICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERNQV9GSUZPVGhyZXNob2xkX0hhbGZGdWxsICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpIA0KKyNkZWZpbmUgRE1BX0ZJRk9UaHJlc2hvbGRfM1F1YXJ0ZXJzRnVsbCAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIERNQV9GSUZPVGhyZXNob2xkX0Z1bGwgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDMpDQorDQorI2RlZmluZSBJU19ETUFfRklGT19USFJFU0hPTEQoVEhSRVNIT0xEKSAoKChUSFJFU0hPTEQpID09IERNQV9GSUZPVGhyZXNob2xkXzFRdWFydGVyRnVsbCApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRIUkVTSE9MRCkgPT0gRE1BX0ZJRk9UaHJlc2hvbGRfSGFsZkZ1bGwpICAgICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVEhSRVNIT0xEKSA9PSBETUFfRklGT1RocmVzaG9sZF8zUXVhcnRlcnNGdWxsKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSFJFU0hPTEQpID09IERNQV9GSUZPVGhyZXNob2xkX0Z1bGwpKSANCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX21lbW9yeV9idXJzdCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRE1BX01lbW9yeUJ1cnN0X1NpbmdsZSAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERNQV9NZW1vcnlCdXJzdF9JTkM0ICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApICANCisjZGVmaW5lIERNQV9NZW1vcnlCdXJzdF9JTkM4ICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApDQorI2RlZmluZSBETUFfTWVtb3J5QnVyc3RfSU5DMTYgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxODAwMDAwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX01FTU9SWV9CVVJTVChCVVJTVCkgKCgoQlVSU1QpID09IERNQV9NZW1vcnlCdXJzdF9TaW5nbGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJVUlNUKSA9PSBETUFfTWVtb3J5QnVyc3RfSU5DNCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJVUlNUKSA9PSBETUFfTWVtb3J5QnVyc3RfSU5DOCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJVUlNUKSA9PSBETUFfTWVtb3J5QnVyc3RfSU5DMTYpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBETUFfcGVyaXBoZXJhbF9idXJzdCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRE1BX1BlcmlwaGVyYWxCdXJzdF9TaW5nbGUgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIERNQV9QZXJpcGhlcmFsQnVyc3RfSU5DNCAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApICANCisjZGVmaW5lIERNQV9QZXJpcGhlcmFsQnVyc3RfSU5DOCAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBETUFfUGVyaXBoZXJhbEJ1cnN0X0lOQzE2ICAgICAgICAgKCh1aW50MzJfdCkweDAwNjAwMDAwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX1BFUklQSEVSQUxfQlVSU1QoQlVSU1QpICgoKEJVUlNUKSA9PSBETUFfUGVyaXBoZXJhbEJ1cnN0X1NpbmdsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJVUlNUKSA9PSBETUFfUGVyaXBoZXJhbEJ1cnN0X0lOQzQpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQlVSU1QpID09IERNQV9QZXJpcGhlcmFsQnVyc3RfSU5DOCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCVVJTVCkgPT0gRE1BX1BlcmlwaGVyYWxCdXJzdF9JTkMxNikpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9maWZvX3N0YXR1c19sZXZlbCANCisgICogQHsNCisgICovDQorI2RlZmluZSBETUFfRklGT1N0YXR1c19MZXNzMVF1YXJ0ZXJGdWxsICAgKCh1aW50MzJfdCkweDAwMDAwMDAwIDw8IDMpDQorI2RlZmluZSBETUFfRklGT1N0YXR1c18xUXVhcnRlckZ1bGwgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxIDw8IDMpDQorI2RlZmluZSBETUFfRklGT1N0YXR1c19IYWxmRnVsbCAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyIDw8IDMpIA0KKyNkZWZpbmUgRE1BX0ZJRk9TdGF0dXNfM1F1YXJ0ZXJzRnVsbCAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMyA8PCAzKQ0KKyNkZWZpbmUgRE1BX0ZJRk9TdGF0dXNfRW1wdHkgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCA8PCAzKQ0KKyNkZWZpbmUgRE1BX0ZJRk9TdGF0dXNfRnVsbCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNSA8PCAzKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX0ZJRk9fU1RBVFVTKFNUQVRVUykgKCgoU1RBVFVTKSA9PSBETUFfRklGT1N0YXR1c19MZXNzMVF1YXJ0ZXJGdWxsICkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVFVTKSA9PSBETUFfRklGT1N0YXR1c19IYWxmRnVsbCkgICAgICAgICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVFVTKSA9PSBETUFfRklGT1N0YXR1c18xUXVhcnRlckZ1bGwpICAgICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVFVTKSA9PSBETUFfRklGT1N0YXR1c18zUXVhcnRlcnNGdWxsKSAgICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVFVTKSA9PSBETUFfRklGT1N0YXR1c19GdWxsKSAgICAgICAgICAgICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVFVTKSA9PSBETUFfRklGT1N0YXR1c19FbXB0eSkpIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBETUFfZmxhZ3NfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovDQorI2RlZmluZSBETUFfRkxBR19GRUlGMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwODAwMDAxKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfRE1FSUYwICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDgwMDAwNCkNCisjZGVmaW5lIERNQV9GTEFHX1RFSUYwICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDgpDQorI2RlZmluZSBETUFfRkxBR19IVElGMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDEwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfVENJRjAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAyMCkNCisjZGVmaW5lIERNQV9GTEFHX0ZFSUYxICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwNDApDQorI2RlZmluZSBETUFfRkxBR19ETUVJRjEgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMTAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfVEVJRjEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDIwMCkNCisjZGVmaW5lIERNQV9GTEFHX0hUSUYxICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDA0MDApDQorI2RlZmluZSBETUFfRkxBR19UQ0lGMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwODAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfRkVJRjIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAxMDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX0RNRUlGMiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwNDAwMDApDQorI2RlZmluZSBETUFfRkxBR19URUlGMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDgwMDAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfSFRJRjIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDEwMDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX1RDSUYyICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAyMDAwMDApDQorI2RlZmluZSBETUFfRkxBR19GRUlGMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwNDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfRE1FSUYzICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMTAwMDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX1RFSUYzICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTIwMDAwMDApDQorI2RlZmluZSBETUFfRkxBR19IVElGMyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDE0MDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfVENJRjMgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxODAwMDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX0ZFSUY0ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDEpDQorI2RlZmluZSBETUFfRkxBR19ETUVJRjQgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDA0KQ0KKyNkZWZpbmUgRE1BX0ZMQUdfVEVJRjQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwOCkNCisjZGVmaW5lIERNQV9GTEFHX0hUSUY0ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMTApDQorI2RlZmluZSBETUFfRkxBR19UQ0lGNCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDIwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfRkVJRjUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDA0MCkNCisjZGVmaW5lIERNQV9GTEFHX0RNRUlGNSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAxMDApDQorI2RlZmluZSBETUFfRkxBR19URUlGNSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMjAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfSFRJRjUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDQwMCkNCisjZGVmaW5lIERNQV9GTEFHX1RDSUY1ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDA4MDApDQorI2RlZmluZSBETUFfRkxBR19GRUlGNiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDEwMDAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfRE1FSUY2ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDA0MDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX1RFSUY2ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwODAwMDApDQorI2RlZmluZSBETUFfRkxBR19IVElGNiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMTAwMDAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfVENJRjYgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDIwMDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX0ZFSUY3ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjA0MDAwMDApDQorI2RlZmluZSBETUFfRkxBR19ETUVJRjcgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIxMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0ZMQUdfVEVJRjcgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMjAwMDAwMCkNCisjZGVmaW5lIERNQV9GTEFHX0hUSUY3ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjQwMDAwMDApDQorI2RlZmluZSBETUFfRkxBR19UQ0lGNyAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDI4MDAwMDAwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX0NMRUFSX0ZMQUcoRkxBRykgKCgoKEZMQUcpICYgMHgzMDAwMDAwMCkgIT0gMHgzMDAwMDAwMCkgJiYgKCgoRkxBRykgJiAweDMwMDAwMDAwKSAhPSAwKSAmJiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoRkxBRykgJiAweEMwODJGMDgyKSA9PSAweDAwKSAmJiAoKEZMQUcpICE9IDB4MDApKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX0dFVF9GTEFHKEZMQUcpICgoKEZMQUcpID09IERNQV9GTEFHX1RDSUYwKSAgfHwgKChGTEFHKSA9PSBETUFfRkxBR19IVElGMCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19URUlGMCkgIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfRE1FSUYwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BX0ZMQUdfRkVJRjApICB8fCAoKEZMQUcpID09IERNQV9GTEFHX1RDSUYxKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERNQV9GTEFHX0hUSUYxKSAgfHwgKChGTEFHKSA9PSBETUFfRkxBR19URUlGMSkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19ETUVJRjEpIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfRkVJRjEpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BX0ZMQUdfVENJRjIpICB8fCAoKEZMQUcpID09IERNQV9GTEFHX0hUSUYyKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERNQV9GTEFHX1RFSUYyKSAgfHwgKChGTEFHKSA9PSBETUFfRkxBR19ETUVJRjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19GRUlGMikgIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfVENJRjMpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BX0ZMQUdfSFRJRjMpICB8fCAoKEZMQUcpID09IERNQV9GTEFHX1RFSUYzKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERNQV9GTEFHX0RNRUlGMykgfHwgKChGTEFHKSA9PSBETUFfRkxBR19GRUlGMykgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19UQ0lGNCkgIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfSFRJRjQpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BX0ZMQUdfVEVJRjQpICB8fCAoKEZMQUcpID09IERNQV9GTEFHX0RNRUlGNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERNQV9GTEFHX0ZFSUY0KSAgfHwgKChGTEFHKSA9PSBETUFfRkxBR19UQ0lGNSkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19IVElGNSkgIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfVEVJRjUpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BX0ZMQUdfRE1FSUY1KSB8fCAoKEZMQUcpID09IERNQV9GTEFHX0ZFSUY1KSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERNQV9GTEFHX1RDSUY2KSAgfHwgKChGTEFHKSA9PSBETUFfRkxBR19IVElGNikgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19URUlGNikgIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfRE1FSUY2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRE1BX0ZMQUdfRkVJRjYpICB8fCAoKEZMQUcpID09IERNQV9GTEFHX1RDSUY3KSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IERNQV9GTEFHX0hUSUY3KSAgfHwgKChGTEFHKSA9PSBETUFfRkxBR19URUlGNykgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBETUFfRkxBR19ETUVJRjcpIHx8ICgoRkxBRykgPT0gRE1BX0ZMQUdfRkVJRjcpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBETUFfaW50ZXJydXB0X2VuYWJsZV9kZWZpbml0aW9ucyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRE1BX0lUX1RDICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIERNQV9JVF9IVCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBETUFfSVRfVEUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRE1BX0lUX0RNRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIERNQV9JVF9GRSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorDQorI2RlZmluZSBJU19ETUFfQ09ORklHX0lUKElUKSAoKCgoSVQpICYgMHhGRkZGRkY2MSkgPT0gMHgwMCkgJiYgKChJVCkgIT0gMHgwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9pbnRlcnJ1cHRzX2RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBETUFfSVRfRkVJRjAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDkwMDAwMDAxKQ0KKyNkZWZpbmUgRE1BX0lUX0RNRUlGMCAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMTAwNCkNCisjZGVmaW5lIERNQV9JVF9URUlGMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDIwMDgpDQorI2RlZmluZSBETUFfSVRfSFRJRjAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDA0MDEwKQ0KKyNkZWZpbmUgRE1BX0lUX1RDSUYwICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwODAyMCkNCisjZGVmaW5lIERNQV9JVF9GRUlGMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4OTAwMDAwNDApDQorI2RlZmluZSBETUFfSVRfRE1FSUYxICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAxMTAwKQ0KKyNkZWZpbmUgRE1BX0lUX1RFSUYxICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMjIwMCkNCisjZGVmaW5lIERNQV9JVF9IVElGMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDQ0MDApDQorI2RlZmluZSBETUFfSVRfVENJRjEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDA4ODAwKQ0KKyNkZWZpbmUgRE1BX0lUX0ZFSUYyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHg5MDAxMDAwMCkNCisjZGVmaW5lIERNQV9JVF9ETUVJRjIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwNDEwMDApDQorI2RlZmluZSBETUFfSVRfVEVJRjIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDgyMDAwKQ0KKyNkZWZpbmUgRE1BX0lUX0hUSUYyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDEwNDAwMCkNCisjZGVmaW5lIERNQV9JVF9UQ0lGMiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAyMDgwMDApDQorI2RlZmluZSBETUFfSVRfRkVJRjMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDkwNDAwMDAwKQ0KKyNkZWZpbmUgRE1BX0lUX0RNRUlGMyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMTAwMTAwMCkNCisjZGVmaW5lIERNQV9JVF9URUlGMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTIwMDIwMDApDQorI2RlZmluZSBETUFfSVRfSFRJRjMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDE0MDA0MDAwKQ0KKyNkZWZpbmUgRE1BX0lUX1RDSUYzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxODAwODAwMCkNCisjZGVmaW5lIERNQV9JVF9GRUlGNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4QTAwMDAwMDEpDQorI2RlZmluZSBETUFfSVRfRE1FSUY0ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAxMDA0KQ0KKyNkZWZpbmUgRE1BX0lUX1RFSUY0ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMjAwOCkNCisjZGVmaW5lIERNQV9JVF9IVElGNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDQwMTApDQorI2RlZmluZSBETUFfSVRfVENJRjQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDA4MDIwKQ0KKyNkZWZpbmUgRE1BX0lUX0ZFSUY1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHhBMDAwMDA0MCkNCisjZGVmaW5lIERNQV9JVF9ETUVJRjUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDExMDApDQorI2RlZmluZSBETUFfSVRfVEVJRjUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAyMjAwKQ0KKyNkZWZpbmUgRE1BX0lUX0hUSUY1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwNDQwMCkNCisjZGVmaW5lIERNQV9JVF9UQ0lGNSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDg4MDApDQorI2RlZmluZSBETUFfSVRfRkVJRjYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEEwMDEwMDAwKQ0KKyNkZWZpbmUgRE1BX0lUX0RNRUlGNiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDA0MTAwMCkNCisjZGVmaW5lIERNQV9JVF9URUlGNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwODIwMDApDQorI2RlZmluZSBETUFfSVRfSFRJRjYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMTA0MDAwKQ0KKyNkZWZpbmUgRE1BX0lUX1RDSUY2ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDIwODAwMCkNCisjZGVmaW5lIERNQV9JVF9GRUlGNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4QTA0MDAwMDApDQorI2RlZmluZSBETUFfSVRfRE1FSUY3ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIxMDAxMDAwKQ0KKyNkZWZpbmUgRE1BX0lUX1RFSUY3ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMjAwMjAwMCkNCisjZGVmaW5lIERNQV9JVF9IVElGNyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjQwMDQwMDApDQorI2RlZmluZSBETUFfSVRfVENJRjcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDI4MDA4MDAwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX0NMRUFSX0lUKElUKSAoKCgoSVQpICYgMHgzMDAwMDAwMCkgIT0gMHgzMDAwMDAwMCkgJiYgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSVQpICYgMHgzMDAwMDAwMCkgIT0gMCkgJiYgKChJVCkgIT0gMHgwMCkgJiYgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSVQpICYgMHg0MDgyMDA4MikgPT0gMHgwMCkpDQorDQorI2RlZmluZSBJU19ETUFfR0VUX0lUKElUKSAoKChJVCkgPT0gRE1BX0lUX1RDSUYwKSB8fCAoKElUKSA9PSBETUFfSVRfSFRJRjApICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RFSUYwKSB8fCAoKElUKSA9PSBETUFfSVRfRE1FSUYwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0ZFSUYwKSB8fCAoKElUKSA9PSBETUFfSVRfVENJRjEpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0hUSUYxKSB8fCAoKElUKSA9PSBETUFfSVRfVEVJRjEpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0RNRUlGMSl8fCAoKElUKSA9PSBETUFfSVRfRkVJRjEpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RDSUYyKSB8fCAoKElUKSA9PSBETUFfSVRfSFRJRjIpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RFSUYyKSB8fCAoKElUKSA9PSBETUFfSVRfRE1FSUYyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0ZFSUYyKSB8fCAoKElUKSA9PSBETUFfSVRfVENJRjMpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0hUSUYzKSB8fCAoKElUKSA9PSBETUFfSVRfVEVJRjMpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0RNRUlGMyl8fCAoKElUKSA9PSBETUFfSVRfRkVJRjMpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RDSUY0KSB8fCAoKElUKSA9PSBETUFfSVRfSFRJRjQpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RFSUY0KSB8fCAoKElUKSA9PSBETUFfSVRfRE1FSUY0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0ZFSUY0KSB8fCAoKElUKSA9PSBETUFfSVRfVENJRjUpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0hUSUY1KSB8fCAoKElUKSA9PSBETUFfSVRfVEVJRjUpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0RNRUlGNSl8fCAoKElUKSA9PSBETUFfSVRfRkVJRjUpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RDSUY2KSB8fCAoKElUKSA9PSBETUFfSVRfSFRJRjYpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX1RFSUY2KSB8fCAoKElUKSA9PSBETUFfSVRfRE1FSUY2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0ZFSUY2KSB8fCAoKElUKSA9PSBETUFfSVRfVENJRjcpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0hUSUY3KSB8fCAoKElUKSA9PSBETUFfSVRfVEVJRjcpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gRE1BX0lUX0RNRUlGNyl8fCAoKElUKSA9PSBETUFfSVRfRkVJRjcpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBETUFfcGVyaXBoZXJhbF9pbmNyZW1lbnRfb2Zmc2V0IA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBETUFfUElOQ09TX1BzaXplICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX1BJTkNPU19Xb3JkQWxpZ25lZCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisNCisjZGVmaW5lIElTX0RNQV9QSU5DT1NfU0laRShTSVpFKSAoKChTSVpFKSA9PSBETUFfUElOQ09TX1BzaXplKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRE1BX1BJTkNPU19Xb3JkQWxpZ25lZCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIERNQV9mbG93X2NvbnRyb2xsZXJfZGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIERNQV9GbG93Q3RybF9NZW1vcnkgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBETUFfRmxvd0N0cmxfUGVyaXBoZXJhbCAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKw0KKyNkZWZpbmUgSVNfRE1BX0ZMT1dfQ1RSTChDVFJMKSAoKChDVFJMKSA9PSBETUFfRmxvd0N0cmxfTWVtb3J5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENUUkwpID09IERNQV9GbG93Q3RybF9QZXJpcGhlcmFsKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX21lbW9yeV90YXJnZXRzX2RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBETUFfTWVtb3J5XzAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX01lbW9yeV8xICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisNCisjZGVmaW5lIElTX0RNQV9DVVJSRU5UX01FTShNRU0pICgoKE1FTSkgPT0gRE1BX01lbW9yeV8wKSB8fCAoKE1FTSkgPT0gRE1BX01lbW9yeV8xKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyANCisNCisvKiAgRnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIERNQSBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKioqLyANCit2b2lkIERNQV9EZUluaXQoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgpOw0KKw0KKy8qIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBETUFfSW5pdChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgRE1BX0luaXRUeXBlRGVmKiBETUFfSW5pdFN0cnVjdCk7DQordm9pZCBETUFfU3RydWN0SW5pdChETUFfSW5pdFR5cGVEZWYqIERNQV9Jbml0U3RydWN0KTsNCit2b2lkIERNQV9DbWQoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogT3B0aW9uYWwgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIERNQV9QZXJpcGhJbmNPZmZzZXRTaXplQ29uZmlnKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBETUFfUGluY29zKTsNCit2b2lkIERNQV9GbG93Q29udHJvbGxlckNvbmZpZyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX0Zsb3dDdHJsKTsNCisNCisvKiBEYXRhIENvdW50ZXIgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRE1BX1NldEN1cnJEYXRhQ291bnRlcihETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDE2X3QgQ291bnRlcik7DQordWludDE2X3QgRE1BX0dldEN1cnJEYXRhQ291bnRlcihETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCk7DQorDQorLyogRG91YmxlIEJ1ZmZlciBtb2RlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIERNQV9Eb3VibGVCdWZmZXJNb2RlQ29uZmlnKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBNZW1vcnkxQmFzZUFkZHIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBETUFfQ3VycmVudE1lbW9yeSk7DQordm9pZCBETUFfRG91YmxlQnVmZmVyTW9kZUNtZChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIERNQV9NZW1vcnlUYXJnZXRDb25maWcoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IE1lbW9yeUJhc2VBZGRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBETUFfTWVtb3J5VGFyZ2V0KTsNCit1aW50MzJfdCBETUFfR2V0Q3VycmVudE1lbW9yeVRhcmdldChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitGdW5jdGlvbmFsU3RhdGUgRE1BX0dldENtZFN0YXR1cyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCk7DQordWludDMyX3QgRE1BX0dldEZJRk9TdGF0dXMoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgpOw0KK0ZsYWdTdGF0dXMgRE1BX0dldEZsYWdTdGF0dXMoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9GTEFHKTsNCit2b2lkIERNQV9DbGVhckZsYWcoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9GTEFHKTsNCit2b2lkIERNQV9JVENvbmZpZyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK0lUU3RhdHVzIERNQV9HZXRJVFN0YXR1cyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX0lUKTsNCit2b2lkIERNQV9DbGVhcklUUGVuZGluZ0JpdChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfRE1BX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9leHRpLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2V4dGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODZlODdmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9leHRpLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9leHRpLmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgRVhUSSBmaXJtd2FyZQ0KKyAgKiAgICAgICAgICBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0VYVElfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfRVhUSV9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgRVhUSQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBFWFRJIG1vZGUgZW51bWVyYXRpb24gIA0KKyAgKi8NCisNCit0eXBlZGVmIGVudW0NCit7DQorICBFWFRJX01vZGVfSW50ZXJydXB0ID0gMHgwMCwNCisgIEVYVElfTW9kZV9FdmVudCA9IDB4MDQNCit9RVhUSU1vZGVfVHlwZURlZjsNCisNCisjZGVmaW5lIElTX0VYVElfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBFWFRJX01vZGVfSW50ZXJydXB0KSB8fCAoKE1PREUpID09IEVYVElfTW9kZV9FdmVudCkpDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIEVYVEkgVHJpZ2dlciBlbnVtZXJhdGlvbiAgDQorICAqLw0KKw0KK3R5cGVkZWYgZW51bQ0KK3sNCisgIEVYVElfVHJpZ2dlcl9SaXNpbmcgPSAweDA4LA0KKyAgRVhUSV9UcmlnZ2VyX0ZhbGxpbmcgPSAweDBDLCAgDQorICBFWFRJX1RyaWdnZXJfUmlzaW5nX0ZhbGxpbmcgPSAweDEwDQorfUVYVElUcmlnZ2VyX1R5cGVEZWY7DQorDQorI2RlZmluZSBJU19FWFRJX1RSSUdHRVIoVFJJR0dFUikgKCgoVFJJR0dFUikgPT0gRVhUSV9UcmlnZ2VyX1Jpc2luZykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IEVYVElfVHJpZ2dlcl9GYWxsaW5nKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gRVhUSV9UcmlnZ2VyX1Jpc2luZ19GYWxsaW5nKSkNCisvKiogDQorICAqIEBicmllZiAgRVhUSSBJbml0IFN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBFWFRJX0xpbmU7ICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEVYVEkgbGluZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gdmFsdWUgb2YgQHJlZiBFWFRJX0xpbmVzICovDQorICAgDQorICBFWFRJTW9kZV9UeXBlRGVmIEVYVElfTW9kZTsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1vZGUgZm9yIHRoZSBFWFRJIGxpbmVzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBFWFRJTW9kZV9UeXBlRGVmICovDQorDQorICBFWFRJVHJpZ2dlcl9UeXBlRGVmIEVYVElfVHJpZ2dlcjsgLyohPCBTcGVjaWZpZXMgdGhlIHRyaWdnZXIgc2lnbmFsIGFjdGl2ZSBlZGdlIGZvciB0aGUgRVhUSSBsaW5lcy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRVhUSVRyaWdnZXJfVHlwZURlZiAqLw0KKw0KKyAgRnVuY3Rpb25hbFN0YXRlIEVYVElfTGluZUNtZDsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIEVYVEkgbGluZXMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IGVpdGhlciB0byBFTkFCTEUgb3IgRElTQUJMRSAqLyANCit9RVhUSV9Jbml0VHlwZURlZjsNCisNCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRVhUSV9FeHBvcnRlZF9Db25zdGFudHMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBFWFRJX0xpbmVzIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEVYVElfTGluZTAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxKSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAwICovDQorI2RlZmluZSBFWFRJX0xpbmUxICAgICAgICgodWludDMyX3QpMHgwMDAwMikgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMSAqLw0KKyNkZWZpbmUgRVhUSV9MaW5lMiAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQpICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDIgKi8NCisjZGVmaW5lIEVYVElfTGluZTMgICAgICAgKCh1aW50MzJfdCkweDAwMDA4KSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAzICovDQorI2RlZmluZSBFWFRJX0xpbmU0ICAgICAgICgodWludDMyX3QpMHgwMDAxMCkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgNCAqLw0KKyNkZWZpbmUgRVhUSV9MaW5lNSAgICAgICAoKHVpbnQzMl90KTB4MDAwMjApICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDUgKi8NCisjZGVmaW5lIEVYVElfTGluZTYgICAgICAgKCh1aW50MzJfdCkweDAwMDQwKSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA2ICovDQorI2RlZmluZSBFWFRJX0xpbmU3ICAgICAgICgodWludDMyX3QpMHgwMDA4MCkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgNyAqLw0KKyNkZWZpbmUgRVhUSV9MaW5lOCAgICAgICAoKHVpbnQzMl90KTB4MDAxMDApICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDggKi8NCisjZGVmaW5lIEVYVElfTGluZTkgICAgICAgKCh1aW50MzJfdCkweDAwMjAwKSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSA5ICovDQorI2RlZmluZSBFWFRJX0xpbmUxMCAgICAgICgodWludDMyX3QpMHgwMDQwMCkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTAgKi8NCisjZGVmaW5lIEVYVElfTGluZTExICAgICAgKCh1aW50MzJfdCkweDAwODAwKSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxMSAqLw0KKyNkZWZpbmUgRVhUSV9MaW5lMTIgICAgICAoKHVpbnQzMl90KTB4MDEwMDApICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDEyICovDQorI2RlZmluZSBFWFRJX0xpbmUxMyAgICAgICgodWludDMyX3QpMHgwMjAwMCkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTMgKi8NCisjZGVmaW5lIEVYVElfTGluZTE0ICAgICAgKCh1aW50MzJfdCkweDA0MDAwKSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxNCAqLw0KKyNkZWZpbmUgRVhUSV9MaW5lMTUgICAgICAoKHVpbnQzMl90KTB4MDgwMDApICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE1ICovDQorI2RlZmluZSBFWFRJX0xpbmUxNiAgICAgICgodWludDMyX3QpMHgxMDAwMCkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTYgQ29ubmVjdGVkIHRvIHRoZSBQVkQgT3V0cHV0ICovDQorI2RlZmluZSBFWFRJX0xpbmUxNyAgICAgICgodWludDMyX3QpMHgyMDAwMCkgICAgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTcgQ29ubmVjdGVkIHRvIHRoZSBSVEMgQWxhcm0gZXZlbnQgKi8NCisjZGVmaW5lIEVYVElfTGluZTE4ICAgICAgKCh1aW50MzJfdCkweDQwMDAwKSAgICAgLyohPCBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSAxOCBDb25uZWN0ZWQgdG8gdGhlIFVTQiBPVEcgRlMgV2FrZXVwIGZyb20gc3VzcGVuZCBldmVudCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyNkZWZpbmUgRVhUSV9MaW5lMTkgICAgICAoKHVpbnQzMl90KTB4ODAwMDApICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE5IENvbm5lY3RlZCB0byB0aGUgRXRoZXJuZXQgV2FrZXVwIGV2ZW50ICovDQorI2RlZmluZSBFWFRJX0xpbmUyMCAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMjAgQ29ubmVjdGVkIHRvIHRoZSBVU0IgT1RHIEhTIChjb25maWd1cmVkIGluIEZTKSBXYWtldXAgZXZlbnQgICovDQorI2RlZmluZSBFWFRJX0xpbmUyMSAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMjEgQ29ubmVjdGVkIHRvIHRoZSBSVEMgVGFtcGVyIGFuZCBUaW1lIFN0YW1wIGV2ZW50cyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorI2RlZmluZSBFWFRJX0xpbmUyMiAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkgIC8qITwgRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMjIgQ29ubmVjdGVkIHRvIHRoZSBSVEMgV2FrZXVwIGV2ZW50ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIElTX0VYVElfTElORShMSU5FKSAoKCgoTElORSkgJiAodWludDMyX3QpMHhGRjgwMDAwMCkgPT0gMHgwMCkgJiYgKChMSU5FKSAhPSAodWludDE2X3QpMHgwMCkpDQorDQorI2RlZmluZSBJU19HRVRfRVhUSV9MSU5FKExJTkUpICgoKExJTkUpID09IEVYVElfTGluZTApIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xpbmUyKSB8fCAoKExJTkUpID09IEVYVElfTGluZTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lNCkgfHwgKChMSU5FKSA9PSBFWFRJX0xpbmU1KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTGluZTYpIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xpbmU4KSB8fCAoKExJTkUpID09IEVYVElfTGluZTkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lMTApIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lMTIpIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lMTQpIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lMTYpIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMTcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lMTgpIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMTkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MaW5lMjApIHx8ICgoTElORSkgPT0gRVhUSV9MaW5lMjEpIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xpbmUyMikpDQorICAgICAgICAgICAgICAgICAgICANCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiAgRnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIEVYVEkgY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdCByZXNldCBzdGF0ZSAqKioqKi8NCit2b2lkIEVYVElfRGVJbml0KHZvaWQpOw0KKw0KKy8qIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBFWFRJX0luaXQoRVhUSV9Jbml0VHlwZURlZiogRVhUSV9Jbml0U3RydWN0KTsNCit2b2lkIEVYVElfU3RydWN0SW5pdChFWFRJX0luaXRUeXBlRGVmKiBFWFRJX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgRVhUSV9HZW5lcmF0ZVNXSW50ZXJydXB0KHVpbnQzMl90IEVYVElfTGluZSk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitGbGFnU3RhdHVzIEVYVElfR2V0RmxhZ1N0YXR1cyh1aW50MzJfdCBFWFRJX0xpbmUpOw0KK3ZvaWQgRVhUSV9DbGVhckZsYWcodWludDMyX3QgRVhUSV9MaW5lKTsNCitJVFN0YXR1cyBFWFRJX0dldElUU3RhdHVzKHVpbnQzMl90IEVYVElfTGluZSk7DQordm9pZCBFWFRJX0NsZWFySVRQZW5kaW5nQml0KHVpbnQzMl90IEVYVElfTGluZSk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9FWFRJX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9mbGFzaC5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTEyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2ZsYXNoLmgKQEAgLTAsMCArMSwzNDAgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9mbGFzaC5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIEZMQVNIIA0KKyAgKiAgICAgICAgICBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0ZMQVNIX0gNCisjZGVmaW5lIF9fU1RNMzJGMnh4X0ZMQVNIX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBGTEFTSA0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiogDQorICAqIEBicmllZiBGTEFTSCBTdGF0dXMgIA0KKyAgKi8gDQordHlwZWRlZiBlbnVtDQoreyANCisgIEZMQVNIX0JVU1kgPSAxLA0KKyAgRkxBU0hfRVJST1JfUEdTLA0KKyAgRkxBU0hfRVJST1JfUEdQLA0KKyAgRkxBU0hfRVJST1JfUEdBLA0KKyAgRkxBU0hfRVJST1JfV1JQLA0KKyAgRkxBU0hfRVJST1JfUFJPR1JBTSwNCisgIEZMQVNIX0VSUk9SX09QRVJBVElPTiwNCisgIEZMQVNIX0NPTVBMRVRFDQorfUZMQVNIX1N0YXR1czsNCisNCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLyAgDQorDQorLyoqIEBkZWZncm91cCBGbGFzaF9MYXRlbmN5IA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBGTEFTSF9MYXRlbmN5XzAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDAwMCkgIC8qITwgRkxBU0ggWmVybyBMYXRlbmN5IGN5Y2xlICovDQorI2RlZmluZSBGTEFTSF9MYXRlbmN5XzEgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDAwMSkgIC8qITwgRkxBU0ggT25lIExhdGVuY3kgY3ljbGUgKi8NCisjZGVmaW5lIEZMQVNIX0xhdGVuY3lfMiAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMDAyKSAgLyohPCBGTEFTSCBUd28gTGF0ZW5jeSBjeWNsZXMgKi8NCisjZGVmaW5lIEZMQVNIX0xhdGVuY3lfMyAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMDAzKSAgLyohPCBGTEFTSCBUaHJlZSBMYXRlbmN5IGN5Y2xlcyAqLw0KKyNkZWZpbmUgRkxBU0hfTGF0ZW5jeV80ICAgICAgICAgICAgICAgICgodWludDhfdCkweDAwMDQpICAvKiE8IEZMQVNIIEZvdXIgTGF0ZW5jeSBjeWNsZXMgKi8NCisjZGVmaW5lIEZMQVNIX0xhdGVuY3lfNSAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMDA1KSAgLyohPCBGTEFTSCBGaXZlIExhdGVuY3kgY3ljbGVzICovDQorI2RlZmluZSBGTEFTSF9MYXRlbmN5XzYgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDAwNikgIC8qITwgRkxBU0ggU2l4IExhdGVuY3kgY3ljbGVzICovDQorI2RlZmluZSBGTEFTSF9MYXRlbmN5XzcgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDAwNykgIC8qITwgRkxBU0ggU2V2ZW4gTGF0ZW5jeSBjeWNsZXMgKi8NCisNCisjZGVmaW5lIElTX0ZMQVNIX0xBVEVOQ1koTEFURU5DWSkgKCgoTEFURU5DWSkgPT0gRkxBU0hfTGF0ZW5jeV8wKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExBVEVOQ1kpID09IEZMQVNIX0xhdGVuY3lfMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMQVRFTkNZKSA9PSBGTEFTSF9MYXRlbmN5XzIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEFURU5DWSkgPT0gRkxBU0hfTGF0ZW5jeV8zKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExBVEVOQ1kpID09IEZMQVNIX0xhdGVuY3lfNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMQVRFTkNZKSA9PSBGTEFTSF9MYXRlbmN5XzUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEFURU5DWSkgPT0gRkxBU0hfTGF0ZW5jeV82KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExBVEVOQ1kpID09IEZMQVNIX0xhdGVuY3lfNykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIEZMQVNIX1ZvbHRhZ2VfUmFuZ2UgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFZvbHRhZ2VSYW5nZV8xICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgRGV2aWNlIG9wZXJhdGluZyByYW5nZTogMS44ViB0byAyLjFWICovDQorI2RlZmluZSBWb2x0YWdlUmFuZ2VfMiAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8RGV2aWNlIG9wZXJhdGluZyByYW5nZTogMi4xViB0byAyLjdWICovDQorI2RlZmluZSBWb2x0YWdlUmFuZ2VfMyAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiE8RGV2aWNlIG9wZXJhdGluZyByYW5nZTogMi43ViB0byAzLjZWICovDQorI2RlZmluZSBWb2x0YWdlUmFuZ2VfNCAgICAgICAgKCh1aW50OF90KTB4MDMpICAvKiE8RGV2aWNlIG9wZXJhdGluZyByYW5nZTogMi43ViB0byAzLjZWICsgRXh0ZXJuYWwgVnBwICovDQorDQorI2RlZmluZSBJU19WT0xUQUdFUkFOR0UoUkFOR0UpKCgoUkFOR0UpID09IFZvbHRhZ2VSYW5nZV8xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkFOR0UpID09IFZvbHRhZ2VSYW5nZV8yKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkFOR0UpID09IFZvbHRhZ2VSYW5nZV8zKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkFOR0UpID09IFZvbHRhZ2VSYW5nZV80KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfU2VjdG9ycw0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfMCAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITwgU2VjdG9yIE51bWJlciAwICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfMSAgICAgKCh1aW50MTZfdCkweDAwMDgpIC8qITwgU2VjdG9yIE51bWJlciAxICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfMiAgICAgKCh1aW50MTZfdCkweDAwMTApIC8qITwgU2VjdG9yIE51bWJlciAyICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfMyAgICAgKCh1aW50MTZfdCkweDAwMTgpIC8qITwgU2VjdG9yIE51bWJlciAzICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfNCAgICAgKCh1aW50MTZfdCkweDAwMjApIC8qITwgU2VjdG9yIE51bWJlciA0ICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfNSAgICAgKCh1aW50MTZfdCkweDAwMjgpIC8qITwgU2VjdG9yIE51bWJlciA1ICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfNiAgICAgKCh1aW50MTZfdCkweDAwMzApIC8qITwgU2VjdG9yIE51bWJlciA2ICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfNyAgICAgKCh1aW50MTZfdCkweDAwMzgpIC8qITwgU2VjdG9yIE51bWJlciA3ICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfOCAgICAgKCh1aW50MTZfdCkweDAwNDApIC8qITwgU2VjdG9yIE51bWJlciA4ICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfOSAgICAgKCh1aW50MTZfdCkweDAwNDgpIC8qITwgU2VjdG9yIE51bWJlciA5ICovDQorI2RlZmluZSBGTEFTSF9TZWN0b3JfMTAgICAgKCh1aW50MTZfdCkweDAwNTApIC8qITwgU2VjdG9yIE51bWJlciAxMCAqLw0KKyNkZWZpbmUgRkxBU0hfU2VjdG9yXzExICAgICgodWludDE2X3QpMHgwMDU4KSAvKiE8IFNlY3RvciBOdW1iZXIgMTEgKi8NCisjZGVmaW5lIElTX0ZMQVNIX1NFQ1RPUihTRUNUT1IpICgoKFNFQ1RPUikgPT0gRkxBU0hfU2VjdG9yXzApIHx8ICgoU0VDVE9SKSA9PSBGTEFTSF9TZWN0b3JfMSkgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTRUNUT1IpID09IEZMQVNIX1NlY3Rvcl8yKSB8fCAoKFNFQ1RPUikgPT0gRkxBU0hfU2VjdG9yXzMpIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0VDVE9SKSA9PSBGTEFTSF9TZWN0b3JfNCkgfHwgKChTRUNUT1IpID09IEZMQVNIX1NlY3Rvcl81KSB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFQ1RPUikgPT0gRkxBU0hfU2VjdG9yXzYpIHx8ICgoU0VDVE9SKSA9PSBGTEFTSF9TZWN0b3JfNykgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTRUNUT1IpID09IEZMQVNIX1NlY3Rvcl84KSB8fCAoKFNFQ1RPUikgPT0gRkxBU0hfU2VjdG9yXzkpIHx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0VDVE9SKSA9PSBGTEFTSF9TZWN0b3JfMTApIHx8ICgoU0VDVE9SKSA9PSBGTEFTSF9TZWN0b3JfMTEpKQ0KKyNkZWZpbmUgSVNfRkxBU0hfQUREUkVTUyhBRERSRVNTKSAoKCgoQUREUkVTUykgPj0gMHgwODAwMDAwMCkgJiYgKChBRERSRVNTKSA8IDB4MDgwRkZGRkYpKSB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKEFERFJFU1MpID49IDB4MUZGRjc4MDApICYmICgoQUREUkVTUykgPCAweDFGRkY3QTBGKSkpICANCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgT3B0aW9uX0J5dGVzX1dyaXRlX1Byb3RlY3Rpb24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIE9CX1dSUF9TZWN0b3JfMCAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpIC8qITwgV3JpdGUgcHJvdGVjdGlvbiBvZiBTZWN0b3IwICovDQorI2RlZmluZSBPQl9XUlBfU2VjdG9yXzEgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAvKiE8IFdyaXRlIHByb3RlY3Rpb24gb2YgU2VjdG9yMSAqLw0KKyNkZWZpbmUgT0JfV1JQX1NlY3Rvcl8yICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkgLyohPCBXcml0ZSBwcm90ZWN0aW9uIG9mIFNlY3RvcjIgKi8NCisjZGVmaW5lIE9CX1dSUF9TZWN0b3JfMyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpIC8qITwgV3JpdGUgcHJvdGVjdGlvbiBvZiBTZWN0b3IzICovDQorI2RlZmluZSBPQl9XUlBfU2VjdG9yXzQgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKSAvKiE8IFdyaXRlIHByb3RlY3Rpb24gb2YgU2VjdG9yNCAqLw0KKyNkZWZpbmUgT0JfV1JQX1NlY3Rvcl81ICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkgLyohPCBXcml0ZSBwcm90ZWN0aW9uIG9mIFNlY3RvcjUgKi8NCisjZGVmaW5lIE9CX1dSUF9TZWN0b3JfNiAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApIC8qITwgV3JpdGUgcHJvdGVjdGlvbiBvZiBTZWN0b3I2ICovDQorI2RlZmluZSBPQl9XUlBfU2VjdG9yXzcgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKSAvKiE8IFdyaXRlIHByb3RlY3Rpb24gb2YgU2VjdG9yNyAqLw0KKyNkZWZpbmUgT0JfV1JQX1NlY3Rvcl84ICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgLyohPCBXcml0ZSBwcm90ZWN0aW9uIG9mIFNlY3RvcjggKi8NCisjZGVmaW5lIE9CX1dSUF9TZWN0b3JfOSAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApIC8qITwgV3JpdGUgcHJvdGVjdGlvbiBvZiBTZWN0b3I5ICovDQorI2RlZmluZSBPQl9XUlBfU2VjdG9yXzEwICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAvKiE8IFdyaXRlIHByb3RlY3Rpb24gb2YgU2VjdG9yMTAgKi8NCisjZGVmaW5lIE9CX1dSUF9TZWN0b3JfMTEgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApIC8qITwgV3JpdGUgcHJvdGVjdGlvbiBvZiBTZWN0b3IxMSAqLw0KKyNkZWZpbmUgT0JfV1JQX1NlY3Rvcl9BbGwgICAgICgodWludDMyX3QpMHgwMDAwMEZGRikgLyohPCBXcml0ZSBwcm90ZWN0aW9uIG9mIGFsbCBTZWN0b3JzICovDQorDQorI2RlZmluZSBJU19PQl9XUlAoU0VDVE9SKSgoKChTRUNUT1IpICYgKHVpbnQzMl90KTB4RkZGRkYwMDApID09IDB4MDAwMDAwMDApICYmICgoU0VDVE9SKSAhPSAweDAwMDAwMDAwKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGTEFTSF9PcHRpb25fQnl0ZXNfUmVhZF9Qcm90ZWN0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIE9CX1JEUF9MZXZlbF8wICAgKCh1aW50OF90KTB4QUEpDQorI2RlZmluZSBPQl9SRFBfTGV2ZWxfMSAgICgodWludDhfdCkweDU1KQ0KKy8qI2RlZmluZSBPQl9SRFBfTGV2ZWxfMiAgICgodWludDhfdCkweENDKSovIC8qITwgV2FybmluZzogV2hlbiBlbmFibGluZyByZWFkIHByb3RlY3Rpb24gbGV2ZWwgMiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0J3Mgbm8gbW9yZSBwb3NzaWJsZSB0byBnbyBiYWNrIHRvIGxldmVsIDEgb3IgMCAqLw0KKyNkZWZpbmUgSVNfT0JfUkRQKExFVkVMKSAoKChMRVZFTCkgPT0gT0JfUkRQX0xldmVsXzApfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFVkVMKSA9PSBPQl9SRFBfTGV2ZWxfMSkpLyp8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVWRUwpID09IE9CX1JEUF9MZXZlbF8yKSkqLw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBGTEFTSF9PcHRpb25fQnl0ZXNfSVdhdGNoZG9nIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBPQl9JV0RHX1NXICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApICAvKiE8IFNvZnR3YXJlIElXREcgc2VsZWN0ZWQgKi8NCisjZGVmaW5lIE9CX0lXREdfSFcgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgSGFyZHdhcmUgSVdERyBzZWxlY3RlZCAqLw0KKyNkZWZpbmUgSVNfT0JfSVdER19TT1VSQ0UoU09VUkNFKSAoKChTT1VSQ0UpID09IE9CX0lXREdfU1cpIHx8ICgoU09VUkNFKSA9PSBPQl9JV0RHX0hXKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfT3B0aW9uX0J5dGVzX25SU1RfU1RPUCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgT0JfU1RPUF9Ob1JTVCAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDQwKSAvKiE8IE5vIHJlc2V0IGdlbmVyYXRlZCB3aGVuIGVudGVyaW5nIGluIFNUT1AgKi8NCisjZGVmaW5lIE9CX1NUT1BfUlNUICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgLyohPCBSZXNldCBnZW5lcmF0ZWQgd2hlbiBlbnRlcmluZyBpbiBTVE9QICovDQorI2RlZmluZSBJU19PQl9TVE9QX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gT0JfU1RPUF9Ob1JTVCkgfHwgKChTT1VSQ0UpID09IE9CX1NUT1BfUlNUKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfT3B0aW9uX0J5dGVzX25SU1RfU1REQlkgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIE9CX1NUREJZX05vUlNUICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg4MCkgLyohPCBObyByZXNldCBnZW5lcmF0ZWQgd2hlbiBlbnRlcmluZyBpbiBTVEFOREJZICovDQorI2RlZmluZSBPQl9TVERCWV9SU1QgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDApIC8qITwgUmVzZXQgZ2VuZXJhdGVkIHdoZW4gZW50ZXJpbmcgaW4gU1RBTkRCWSAqLw0KKyNkZWZpbmUgSVNfT0JfU1REQllfU09VUkNFKFNPVVJDRSkgKCgoU09VUkNFKSA9PSBPQl9TVERCWV9Ob1JTVCkgfHwgKChTT1VSQ0UpID09IE9CX1NUREJZX1JTVCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKyAgDQorLyoqIEBkZWZncm91cCBGTEFTSF9CT1JfUmVzZXRfTGV2ZWwgDQorICAqIEB7DQorICAqLyAgDQorI2RlZmluZSBPQl9CT1JfTEVWRUwzICAgICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCBTdXBwbHkgdm9sdGFnZSByYW5nZXMgZnJvbSAyLjcwIHRvIDMuNjAgViAqLw0KKyNkZWZpbmUgT0JfQk9SX0xFVkVMMiAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qITwgU3VwcGx5IHZvbHRhZ2UgcmFuZ2VzIGZyb20gMi40MCB0byAyLjcwIFYgKi8NCisjZGVmaW5lIE9CX0JPUl9MRVZFTDEgICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiE8IFN1cHBseSB2b2x0YWdlIHJhbmdlcyBmcm9tIDIuMTAgdG8gMi40MCBWICovDQorI2RlZmluZSBPQl9CT1JfT0ZGICAgICAgICAgICAgICgodWludDhfdCkweDBDKSAgLyohPCBTdXBwbHkgdm9sdGFnZSByYW5nZXMgZnJvbSAxLjYyIHRvIDIuMTAgViAqLw0KKyNkZWZpbmUgSVNfT0JfQk9SKExFVkVMKSAoKChMRVZFTCkgPT0gT0JfQk9SX0xFVkVMMSkgfHwgKChMRVZFTCkgPT0gT0JfQk9SX0xFVkVMMikgfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFVkVMKSA9PSBPQl9CT1JfTEVWRUwzKSB8fCAoKExFVkVMKSA9PSBPQl9CT1JfT0ZGKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGTEFTSF9JbnRlcnJ1cHRzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBGTEFTSF9JVF9FT1AgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwMDAwKSAgLyohPCBFbmQgb2YgRkxBU0ggT3BlcmF0aW9uIEludGVycnVwdCBzb3VyY2UgKi8NCisjZGVmaW5lIEZMQVNIX0lUX0VSUiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDApICAvKiE8IEVycm9yIEludGVycnVwdCBzb3VyY2UgKi8NCisjZGVmaW5lIElTX0ZMQVNIX0lUKElUKSAoKCgoSVQpICYgKHVpbnQzMl90KTB4RkNGRkZGRkYpID09IDB4MDAwMDAwMDApICYmICgoSVQpICE9IDB4MDAwMDAwMDApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBGTEFTSF9GbGFncyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgRkxBU0hfRkxBR19FT1AgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgIC8qITwgRkxBU0ggRW5kIG9mIE9wZXJhdGlvbiBmbGFnICovDQorI2RlZmluZSBGTEFTSF9GTEFHX09QRVJSICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKSAgLyohPCBGTEFTSCBvcGVyYXRpb24gRXJyb3IgZmxhZyAqLw0KKyNkZWZpbmUgRkxBU0hfRkxBR19XUlBFUlIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkgIC8qITwgRkxBU0ggV3JpdGUgcHJvdGVjdGVkIGVycm9yIGZsYWcgKi8NCisjZGVmaW5lIEZMQVNIX0ZMQUdfUEdBRVJSICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApICAvKiE8IEZMQVNIIFByb2dyYW1taW5nIEFsaWdubWVudCBlcnJvciBmbGFnICovDQorI2RlZmluZSBGTEFTSF9GTEFHX1BHUEVSUiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKSAgLyohPCBGTEFTSCBQcm9ncmFtbWluZyBQYXJhbGxlbGlzbSBlcnJvciBmbGFnICAqLw0KKyNkZWZpbmUgRkxBU0hfRkxBR19QR1NFUlIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkgIC8qITwgRkxBU0ggUHJvZ3JhbW1pbmcgU2VxdWVuY2UgZXJyb3IgZmxhZyAgKi8NCisjZGVmaW5lIEZMQVNIX0ZMQUdfQlNZICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApICAvKiE8IEZMQVNIIEJ1c3kgZmxhZyAqLyANCisjZGVmaW5lIElTX0ZMQVNIX0NMRUFSX0ZMQUcoRkxBRykgKCgoKEZMQUcpICYgKHVpbnQzMl90KTB4RkZGRkZGMEMpID09IDB4MDAwMDAwMDApICYmICgoRkxBRykgIT0gMHgwMDAwMDAwMCkpDQorI2RlZmluZSBJU19GTEFTSF9HRVRfRkxBRyhGTEFHKSAgKCgoRkxBRykgPT0gRkxBU0hfRkxBR19FT1ApIHx8ICgoRkxBRykgPT0gRkxBU0hfRkxBR19PUEVSUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEZMQVNIX0ZMQUdfV1JQRVJSKSB8fCAoKEZMQUcpID09IEZMQVNIX0ZMQUdfUEdBRVJSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRkxBU0hfRkxBR19QR1BFUlIpIHx8ICgoRkxBRykgPT0gRkxBU0hfRkxBR19QR1NFUlIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBGTEFTSF9GTEFHX0JTWSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfUHJvZ3JhbV9QYXJhbGxlbGlzbSAgIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZMQVNIX1BTSVpFX0JZVEUgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZMQVNIX1BTSVpFX0hBTEZfV09SRCAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIEZMQVNIX1BTSVpFX1dPUkQgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIEZMQVNIX1BTSVpFX0RPVUJMRV9XT1JEICAgICgodWludDMyX3QpMHgwMDAwMDMwMCkNCisjZGVmaW5lIENSX1BTSVpFX01BU0sgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkNGRikNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfS2V5cyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgUkRQX0tFWSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMEE1KQ0KKyNkZWZpbmUgRkxBU0hfS0VZMSAgICAgICAgICAgICAgICgodWludDMyX3QpMHg0NTY3MDEyMykNCisjZGVmaW5lIEZMQVNIX0tFWTIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4Q0RFRjg5QUIpDQorI2RlZmluZSBGTEFTSF9PUFRfS0VZMSAgICAgICAgICAgKCh1aW50MzJfdCkweDA4MTkyQTNCKQ0KKyNkZWZpbmUgRkxBU0hfT1BUX0tFWTIgICAgICAgICAgICgodWludDMyX3QpMHg0QzVENkU3RikNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiANCisgICogQGJyaWVmICAgQUNSIHJlZ2lzdGVyIGJ5dGUgMCAoQml0c1s4OjBdKSBiYXNlIGFkZHJlc3MgIA0KKyAgKi8gDQorI2RlZmluZSBBQ1JfQllURTBfQUREUkVTUyAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDIzQzAwKSANCisvKiogDQorICAqIEBicmllZiAgIE9QVENSIHJlZ2lzdGVyIGJ5dGUgMyAoQml0c1syNDoxNl0pIGJhc2UgYWRkcmVzcyAgDQorICAqLyANCisjZGVmaW5lIE9QVENSX0JZVEUwX0FERFJFU1MgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMjNDMTQpDQorI2RlZmluZSBPUFRDUl9CWVRFMV9BRERSRVNTICAgICAgICAgKCh1aW50MzJfdCkweDQwMDIzQzE1KQ0KKyNkZWZpbmUgT1BUQ1JfQllURTJfQUREUkVTUyAgICAgICAgICgodWludDMyX3QpMHg0MDAyM0MxNikNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorIA0KKy8qIEZMQVNIIEludGVyZmFjZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBGTEFTSF9TZXRMYXRlbmN5KHVpbnQzMl90IEZMQVNIX0xhdGVuY3kpOw0KK3ZvaWQgRkxBU0hfUHJlZmV0Y2hCdWZmZXJDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEZMQVNIX0luc3RydWN0aW9uQ2FjaGVDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEZMQVNIX0RhdGFDYWNoZUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgRkxBU0hfSW5zdHJ1Y3Rpb25DYWNoZVJlc2V0KHZvaWQpOw0KK3ZvaWQgRkxBU0hfRGF0YUNhY2hlUmVzZXQodm9pZCk7DQorDQorLyogRkxBU0ggTWVtb3J5IFByb2dyYW1taW5nIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICANCit2b2lkIEZMQVNIX1VubG9jayh2b2lkKTsNCit2b2lkIEZMQVNIX0xvY2sodm9pZCk7DQorRkxBU0hfU3RhdHVzIEZMQVNIX0VyYXNlU2VjdG9yKHVpbnQzMl90IEZMQVNIX1NlY3RvciwgdWludDhfdCBWb2x0YWdlUmFuZ2UpOw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9FcmFzZUFsbFNlY3RvcnModWludDhfdCBWb2x0YWdlUmFuZ2UpOw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9Qcm9ncmFtRG91YmxlV29yZCh1aW50MzJfdCBBZGRyZXNzLCB1aW50NjRfdCBEYXRhKTsNCitGTEFTSF9TdGF0dXMgRkxBU0hfUHJvZ3JhbVdvcmQodWludDMyX3QgQWRkcmVzcywgdWludDMyX3QgRGF0YSk7DQorRkxBU0hfU3RhdHVzIEZMQVNIX1Byb2dyYW1IYWxmV29yZCh1aW50MzJfdCBBZGRyZXNzLCB1aW50MTZfdCBEYXRhKTsNCitGTEFTSF9TdGF0dXMgRkxBU0hfUHJvZ3JhbUJ5dGUodWludDMyX3QgQWRkcmVzcywgdWludDhfdCBEYXRhKTsNCisNCisvKiBPcHRpb24gQnl0ZXMgUHJvZ3JhbW1pbmcgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIEZMQVNIX09CX1VubG9jayh2b2lkKTsNCit2b2lkIEZMQVNIX09CX0xvY2sodm9pZCk7DQordm9pZCBGTEFTSF9PQl9XUlBDb25maWcodWludDMyX3QgT0JfV1JQLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgRkxBU0hfT0JfUkRQQ29uZmlnKHVpbnQ4X3QgT0JfUkRQKTsNCit2b2lkIEZMQVNIX09CX1VzZXJDb25maWcodWludDhfdCBPQl9JV0RHLCB1aW50OF90IE9CX1NUT1AsIHVpbnQ4X3QgT0JfU1REQlkpOw0KK3ZvaWQgRkxBU0hfT0JfQk9SQ29uZmlnKHVpbnQ4X3QgT0JfQk9SKTsNCitGTEFTSF9TdGF0dXMgRkxBU0hfT0JfTGF1bmNoKHZvaWQpOw0KK3VpbnQ4X3QgRkxBU0hfT0JfR2V0VXNlcih2b2lkKTsNCit1aW50MTZfdCBGTEFTSF9PQl9HZXRXUlAodm9pZCk7DQorRmxhZ1N0YXR1cyBGTEFTSF9PQl9HZXRSRFAodm9pZCk7DQordWludDhfdCBGTEFTSF9PQl9HZXRCT1Iodm9pZCk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIEZMQVNIX0lUQ29uZmlnKHVpbnQzMl90IEZMQVNIX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK0ZsYWdTdGF0dXMgRkxBU0hfR2V0RmxhZ1N0YXR1cyh1aW50MzJfdCBGTEFTSF9GTEFHKTsNCit2b2lkIEZMQVNIX0NsZWFyRmxhZyh1aW50MzJfdCBGTEFTSF9GTEFHKTsNCitGTEFTSF9TdGF0dXMgRkxBU0hfR2V0U3RhdHVzKHZvaWQpOw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9XYWl0Rm9yTGFzdE9wZXJhdGlvbih2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0ZMQVNIX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2ZzbWMuaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfZnNtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmZjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2ZzbWMuaApAQCAtMCwwICsxLDY3NSBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2ZzbWMuaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBGU01DIGZpcm13YXJlIA0KKyAgKiAgICAgICAgICBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0ZTTUNfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfRlNNQ19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgRlNNQw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBUaW1pbmcgcGFyYW1ldGVycyBGb3IgTk9SL1NSQU0gQmFua3MgIA0KKyAgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IEZTTUNfQWRkcmVzc1NldHVwVGltZTsgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1cmF0aW9uIG9mIHRoZSBhZGRyZXNzIHNldHVwIHRpbWUuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIHdpdGggc3luY2hyb25vdXMgTk9SIEZsYXNoIG1lbW9yaWVzLiAqLw0KKw0KKyAgdWludDMyX3QgRlNNQ19BZGRyZXNzSG9sZFRpbWU7ICAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGFkZHJlc3MgaG9sZCB0aW1lLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIHBhcmFtZXRlciBpcyBub3QgdXNlZCB3aXRoIHN5bmNocm9ub3VzIE5PUiBGbGFzaCBtZW1vcmllcy4qLw0KKw0KKyAgdWludDMyX3QgRlNNQ19EYXRhU2V0dXBUaW1lOyAgICAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGRhdGEgc2V0dXAgdGltZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkYuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgU1JBTXMsIFJPTXMgYW5kIGFzeW5jaHJvbm91cyBtdWx0aXBsZXhlZCBOT1IgRmxhc2ggbWVtb3JpZXMuICovDQorDQorICB1aW50MzJfdCBGU01DX0J1c1R1cm5Bcm91bmREdXJhdGlvbjsgIC8qITwgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIEhDTEsgY3ljbGVzIHRvIGNvbmZpZ3VyZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkdXJhdGlvbiBvZiB0aGUgYnVzIHR1cm5hcm91bmQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEYuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIGZvciBtdWx0aXBsZXhlZCBOT1IgRmxhc2ggbWVtb3JpZXMuICovDQorDQorICB1aW50MzJfdCBGU01DX0NMS0RpdmlzaW9uOyAgICAgICAgICAgIC8qITwgRGVmaW5lcyB0aGUgcGVyaW9kIG9mIENMSyBjbG9jayBvdXRwdXQgc2lnbmFsLCBleHByZXNzZWQgaW4gbnVtYmVyIG9mIEhDTEsgY3ljbGVzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMHhGLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIGZvciBhc3luY2hyb25vdXMgTk9SIEZsYXNoLCBTUkFNIG9yIFJPTSBhY2Nlc3Nlcy4gKi8NCisNCisgIHVpbnQzMl90IEZTTUNfRGF0YUxhdGVuY3k7ICAgICAgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgbWVtb3J5IGNsb2NrIGN5Y2xlcyB0byBpc3N1ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtZW1vcnkgYmVmb3JlIGdldHRpbmcgdGhlIGZpcnN0IGRhdGEuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBhcmFtZXRlciB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBtZW1vcnkgdHlwZSBhcyBzaG93biBiZWxvdzoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJdCBtdXN0IGJlIHNldCB0byAwIGluIGNhc2Ugb2YgYSBDUkFNDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSXQgaXMgZG9uJ3QgY2FyZSBpbiBhc3luY2hyb25vdXMgTk9SLCBTUkFNIG9yIFJPTSBhY2Nlc3Nlcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEl0IG1heSBhc3N1bWUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RiBpbiBOT1IgRmxhc2ggbWVtb3JpZXMNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN5bmNocm9ub3VzIGJ1cnN0IG1vZGUgZW5hYmxlICovDQorDQorICB1aW50MzJfdCBGU01DX0FjY2Vzc01vZGU7ICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBhc3luY2hyb25vdXMgYWNjZXNzIG1vZGUuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19BY2Nlc3NfTW9kZSAqLw0KK31GU01DX05PUlNSQU1UaW1pbmdJbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgRlNNQyBOT1IvU1JBTSBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uDQorICAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3QgRlNNQ19CYW5rOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgTk9SL1NSQU0gbWVtb3J5IGJhbmsgdGhhdCB3aWxsIGJlIHVzZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX05PUlNSQU1fQmFuayAqLw0KKw0KKyAgdWludDMyX3QgRlNNQ19EYXRhQWRkcmVzc011eDsgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBhZGRyZXNzIGFuZCBkYXRhIHZhbHVlcyBhcmUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZXhlZCBvbiB0aGUgZGF0YWJ1cyBvciBub3QuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19EYXRhX0FkZHJlc3NfQnVzX011bHRpcGxleGluZyAqLw0KKw0KKyAgdWludDMyX3QgRlNNQ19NZW1vcnlUeXBlOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBleHRlcm5hbCBtZW1vcnkgYXR0YWNoZWQgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBtZW1vcnkgYmFuay4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfTWVtb3J5X1R5cGUgKi8NCisNCisgIHVpbnQzMl90IEZTTUNfTWVtb3J5RGF0YVdpZHRoOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIG1lbW9yeSBkZXZpY2Ugd2lkdGguDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX0RhdGFfV2lkdGggKi8NCisNCisgIHVpbnQzMl90IEZTTUNfQnVyc3RBY2Nlc3NNb2RlOyAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBidXJzdCBhY2Nlc3MgbW9kZSBmb3IgRmxhc2ggbWVtb3J5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG9ubHkgd2l0aCBzeW5jaHJvbm91cyBidXJzdCBGbGFzaCBtZW1vcmllcy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfQnVyc3RfQWNjZXNzX01vZGUgKi8NCisNCisgIHVpbnQzMl90IEZTTUNfQXN5bmNocm9ub3VzV2FpdDsgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB3YWl0IHNpZ25hbCBkdXJpbmcgYXN5bmNocm9ub3VzIHRyYW5zZmVycywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBvbmx5IHdpdGggYXN5bmNocm9ub3VzIEZsYXNoIG1lbW9yaWVzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19Bc3luY2hyb25vdXNXYWl0ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorDQorICB1aW50MzJfdCBGU01DX1dhaXRTaWduYWxQb2xhcml0eTsgIC8qITwgU3BlY2lmaWVzIHRoZSB3YWl0IHNpZ25hbCBwb2xhcml0eSwgdmFsaWQgb25seSB3aGVuIGFjY2Vzc2luZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBGbGFzaCBtZW1vcnkgaW4gYnVyc3QgbW9kZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfV2FpdF9TaWduYWxfUG9sYXJpdHkgKi8NCisNCisgIHVpbnQzMl90IEZTTUNfV3JhcE1vZGU7ICAgICAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBXcmFwcGVkIGJ1cnN0IGFjY2VzcyBtb2RlIGZvciBGbGFzaA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwgdmFsaWQgb25seSB3aGVuIGFjY2Vzc2luZyBGbGFzaCBtZW1vcmllcyBpbiBidXJzdCBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19XcmFwX01vZGUgKi8NCisNCisgIHVpbnQzMl90IEZTTUNfV2FpdFNpZ25hbEFjdGl2ZTsgICAgLyohPCBTcGVjaWZpZXMgaWYgdGhlIHdhaXQgc2lnbmFsIGlzIGFzc2VydGVkIGJ5IHRoZSBtZW1vcnkgb25lDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgY3ljbGUgYmVmb3JlIHRoZSB3YWl0IHN0YXRlIG9yIGR1cmluZyB0aGUgd2FpdCBzdGF0ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBvbmx5IHdoZW4gYWNjZXNzaW5nIG1lbW9yaWVzIGluIGJ1cnN0IG1vZGUuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19XYWl0X1RpbWluZyAqLw0KKw0KKyAgdWludDMyX3QgRlNNQ19Xcml0ZU9wZXJhdGlvbjsgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHdyaXRlIG9wZXJhdGlvbiBpbiB0aGUgc2VsZWN0ZWQgYmFuayBieSB0aGUgRlNNQy4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX1dyaXRlX09wZXJhdGlvbiAqLw0KKw0KKyAgdWludDMyX3QgRlNNQ19XYWl0U2lnbmFsOyAgICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHdhaXQtc3RhdGUgaW5zZXJ0aW9uIHZpYSB3YWl0DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLCB2YWxpZCBmb3IgRmxhc2ggbWVtb3J5IGFjY2VzcyBpbiBidXJzdCBtb2RlLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfV2FpdF9TaWduYWwgKi8NCisNCisgIHVpbnQzMl90IEZTTUNfRXh0ZW5kZWRNb2RlOyAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBleHRlbmRlZCBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19FeHRlbmRlZF9Nb2RlICovDQorDQorICB1aW50MzJfdCBGU01DX1dyaXRlQnVyc3Q7ICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgd3JpdGUgYnVyc3Qgb3BlcmF0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19Xcml0ZV9CdXJzdCAqLyANCisNCisgIEZTTUNfTk9SU1JBTVRpbWluZ0luaXRUeXBlRGVmKiBGU01DX1JlYWRXcml0ZVRpbWluZ1N0cnVjdDsgLyohPCBUaW1pbmcgUGFyYW1ldGVycyBmb3Igd3JpdGUgYW5kIHJlYWQgYWNjZXNzIGlmIHRoZSAgRXh0ZW5kZWRNb2RlIGlzIG5vdCB1c2VkKi8gIA0KKw0KKyAgRlNNQ19OT1JTUkFNVGltaW5nSW5pdFR5cGVEZWYqIEZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3Q7ICAgICAvKiE8IFRpbWluZyBQYXJhbWV0ZXJzIGZvciB3cml0ZSBhY2Nlc3MgaWYgdGhlICBFeHRlbmRlZE1vZGUgaXMgdXNlZCovICAgICAgDQorfUZTTUNfTk9SU1JBTUluaXRUeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmICBUaW1pbmcgcGFyYW1ldGVycyBGb3IgRlNNQyBOQU5EIGFuZCBQQ0NBUkQgQmFua3MNCisgICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBGU01DX1NldHVwVGltZTsgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBzZXR1cCBhZGRyZXNzIGJlZm9yZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBhc3NlcnRpb24gZm9yIE5BTkQtRmxhc2ggcmVhZCBvciB3cml0ZSBhY2Nlc3MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29tbW9uL0F0dHJpYnV0ZSBvciBJL08gbWVtb3J5IHNwYWNlIChkZXBlbmRpbmcgb24NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1lbW9yeSBzcGFjZSB0aW1pbmcgdG8gYmUgY29uZmlndXJlZCkuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRi4qLw0KKw0KKyAgdWludDMyX3QgRlNNQ19XYWl0U2V0dXBUaW1lOyAgLyohPCBEZWZpbmVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBhc3NlcnQgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgZm9yIE5BTkQtRmxhc2ggcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uL0F0dHJpYnV0ZSBvciBJL08gbWVtb3J5IHNwYWNlIChkZXBlbmRpbmcgb24gdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBzcGFjZSB0aW1pbmcgdG8gYmUgY29uZmlndXJlZCkuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAweDAwIGFuZCAweEZGICovDQorDQorICB1aW50MzJfdCBGU01DX0hvbGRTZXR1cFRpbWU7ICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGNsb2NrIGN5Y2xlcyB0byBob2xkIGFkZHJlc3MNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBkYXRhIGZvciB3cml0ZSBhY2Nlc3MpIGFmdGVyIHRoZSBjb21tYW5kIGRlYXNzZXJ0aW9uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBOQU5ELUZsYXNoIHJlYWQgb3Igd3JpdGUgYWNjZXNzIHRvIGNvbW1vbi9BdHRyaWJ1dGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgSS9PIG1lbW9yeSBzcGFjZSAoZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgc3BhY2UgdGltaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNvbmZpZ3VyZWQpLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAweDAwIGFuZCAweEZGICovDQorDQorICB1aW50MzJfdCBGU01DX0hpWlNldHVwVGltZTsgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGNsb2NrIGN5Y2xlcyBkdXJpbmcgd2hpY2ggdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFidXMgaXMga2VwdCBpbiBIaVogYWZ0ZXIgdGhlIHN0YXJ0IG9mIGEgTkFORC1GbGFzaA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSBhY2Nlc3MgdG8gY29tbW9uL0F0dHJpYnV0ZSBvciBJL08gbWVtb3J5IHNwYWNlIChkZXBlbmRpbmcNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIG1lbW9yeSBzcGFjZSB0aW1pbmcgdG8gYmUgY29uZmlndXJlZCkuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAgYW5kIDB4RkYgKi8NCit9RlNNQ19OQU5EX1BDQ0FSRFRpbWluZ0luaXRUeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmICBGU01DIE5BTkQgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IEZTTUNfQmFuazsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBOQU5EIG1lbW9yeSBiYW5rIHRoYXQgd2lsbCBiZSB1c2VkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX05BTkRfQmFuayAqLw0KKw0KKyAgdWludDMyX3QgRlNNQ19XYWl0ZmVhdHVyZTsgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFdhaXQgZmVhdHVyZSBmb3IgdGhlIE5BTkQgTWVtb3J5IEJhbmsuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIEZTTUNfV2FpdF9mZWF0dXJlICovDQorDQorICB1aW50MzJfdCBGU01DX01lbW9yeURhdGFXaWR0aDsgIC8qITwgU3BlY2lmaWVzIHRoZSBleHRlcm5hbCBtZW1vcnkgZGV2aWNlIHdpZHRoLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGU01DX0RhdGFfV2lkdGggKi8NCisNCisgIHVpbnQzMl90IEZTTUNfRUNDOyAgICAgICAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBFQ0MgY29tcHV0YXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIEZTTUNfRUNDICovDQorDQorICB1aW50MzJfdCBGU01DX0VDQ1BhZ2VTaXplOyAgICAgIC8qITwgRGVmaW5lcyB0aGUgcGFnZSBzaXplIGZvciB0aGUgZXh0ZW5kZWQgRUNDLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGU01DX0VDQ19QYWdlX1NpemUgKi8NCisNCisgIHVpbnQzMl90IEZTTUNfVENMUlNldHVwVGltZTsgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQ0xFIGxvdyBhbmQgUkUgbG93Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRi4gKi8NCisNCisgIHVpbnQzMl90IEZTTUNfVEFSU2V0dXBUaW1lOyAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQUxFIGxvdyBhbmQgUkUgbG93Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MCBhbmQgMHhGRiAqLyANCisNCisgIEZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZiogIEZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3Q7ICAgLyohPCBGU01DIENvbW1vbiBTcGFjZSBUaW1pbmcgKi8gDQorDQorICBGU01DX05BTkRfUENDQVJEVGltaW5nSW5pdFR5cGVEZWYqICBGU01DX0F0dHJpYnV0ZVNwYWNlVGltaW5nU3RydWN0OyAvKiE8IEZTTUMgQXR0cmlidXRlIFNwYWNlIFRpbWluZyAqLw0KK31GU01DX05BTkRJbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgRlNNQyBQQ0NBUkQgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IEZTTUNfV2FpdGZlYXR1cmU7ICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgV2FpdCBmZWF0dXJlIGZvciB0aGUgTWVtb3J5IEJhbmsuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIEZTTUNfV2FpdF9mZWF0dXJlICovDQorDQorICB1aW50MzJfdCBGU01DX1RDTFJTZXR1cFRpbWU7ICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQ0xFIGxvdyBhbmQgUkUgbG93Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDB4RkYuICovDQorDQorICB1aW50MzJfdCBGU01DX1RBUlNldHVwVGltZTsgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQUxFIGxvdyBhbmQgUkUgbG93Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAweDAgYW5kIDB4RkYgKi8gDQorDQorICANCisgIEZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZiogIEZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3Q7IC8qITwgRlNNQyBDb21tb24gU3BhY2UgVGltaW5nICovDQorDQorICBGU01DX05BTkRfUENDQVJEVGltaW5nSW5pdFR5cGVEZWYqICBGU01DX0F0dHJpYnV0ZVNwYWNlVGltaW5nU3RydWN0OyAgLyohPCBGU01DIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcgKi8gDQorICANCisgIEZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZiogIEZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdDsgLyohPCBGU01DIElPIFNwYWNlIFRpbWluZyAqLyAgDQorfUZTTUNfUENDQVJESW5pdFR5cGVEZWY7DQorDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19OT1JTUkFNX0JhbmsgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgRlNNQ19CYW5rMV9OT1JTUkFNMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBGU01DX0JhbmsxX05PUlNSQU0yICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIEZTTUNfQmFuazFfTk9SU1JBTTMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRlNNQ19CYW5rMV9OT1JTUkFNNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDYpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19OQU5EX0JhbmsgDQorICAqIEB7DQorICAqLyAgDQorI2RlZmluZSBGU01DX0JhbmsyX05BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIEZTTUNfQmFuazNfTkFORCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfUENDQVJEX0JhbmsgDQorICAqIEB7DQorICAqLyAgICANCisjZGVmaW5lIEZTTUNfQmFuazRfUENDQVJEICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisjZGVmaW5lIElTX0ZTTUNfTk9SU1JBTV9CQU5LKEJBTkspICgoKEJBTkspID09IEZTTUNfQmFuazFfTk9SU1JBTTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZTTUNfQmFuazFfTk9SU1JBTTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZTTUNfQmFuazFfTk9SU1JBTTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZTTUNfQmFuazFfTk9SU1JBTTQpKQ0KKw0KKyNkZWZpbmUgSVNfRlNNQ19OQU5EX0JBTksoQkFOSykgKCgoQkFOSykgPT0gRlNNQ19CYW5rMl9OQU5EKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0JhbmszX05BTkQpKQ0KKw0KKyNkZWZpbmUgSVNfRlNNQ19HRVRGTEFHX0JBTksoQkFOSykgKCgoQkFOSykgPT0gRlNNQ19CYW5rMl9OQU5EKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0JhbmszX05BTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZTTUNfQmFuazRfUENDQVJEKSkNCisNCisjZGVmaW5lIElTX0ZTTUNfSVRfQkFOSyhCQU5LKSAoKChCQU5LKSA9PSBGU01DX0JhbmsyX05BTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0JhbmszX05BTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0Jhbms0X1BDQ0FSRCkpDQorDQorLyoqIEBkZWZncm91cCBGU01DX05PUl9TUkFNX0NvbnRyb2xsZXIgDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19EYXRhX0FkZHJlc3NfQnVzX011bHRpcGxleGluZyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBGU01DX0RhdGFBZGRyZXNzTXV4X0Rpc2FibGUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19EYXRhQWRkcmVzc011eF9FbmFibGUgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIElTX0ZTTUNfTVVYKE1VWCkgKCgoTVVYKSA9PSBGU01DX0RhdGFBZGRyZXNzTXV4X0Rpc2FibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoTVVYKSA9PSBGU01DX0RhdGFBZGRyZXNzTXV4X0VuYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19NZW1vcnlfVHlwZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBGU01DX01lbW9yeVR5cGVfU1JBTSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZTTUNfTWVtb3J5VHlwZV9QU1JBTSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgRlNNQ19NZW1vcnlUeXBlX05PUiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBJU19GU01DX01FTU9SWShNRU1PUlkpICgoKE1FTU9SWSkgPT0gRlNNQ19NZW1vcnlUeXBlX1NSQU0pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTUVNT1JZKSA9PSBGU01DX01lbW9yeVR5cGVfUFNSQU0pfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNRU1PUlkpID09IEZTTUNfTWVtb3J5VHlwZV9OT1IpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfRGF0YV9XaWR0aCANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBGU01DX01lbW9yeURhdGFXaWR0aF84YiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZTTUNfTWVtb3J5RGF0YVdpZHRoXzE2YiAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgSVNfRlNNQ19NRU1PUllfV0lEVEgoV0lEVEgpICgoKFdJRFRIKSA9PSBGU01DX01lbW9yeURhdGFXaWR0aF84YikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdJRFRIKSA9PSBGU01DX01lbW9yeURhdGFXaWR0aF8xNmIpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfQnVyc3RfQWNjZXNzX01vZGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgRlNNQ19CdXJzdEFjY2Vzc01vZGVfRGlzYWJsZSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIA0KKyNkZWZpbmUgRlNNQ19CdXJzdEFjY2Vzc01vZGVfRW5hYmxlICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBJU19GU01DX0JVUlNUTU9ERShTVEFURSkgKCgoU1RBVEUpID09IEZTTUNfQnVyc3RBY2Nlc3NNb2RlX0Rpc2FibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gRlNNQ19CdXJzdEFjY2Vzc01vZGVfRW5hYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorICAgIA0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19Bc3luY2hyb25vdXNXYWl0IA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZTTUNfQXN5bmNocm9ub3VzV2FpdF9EaXNhYmxlICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19Bc3luY2hyb25vdXNXYWl0X0VuYWJsZSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorI2RlZmluZSBJU19GU01DX0FTWU5XQUlUKFNUQVRFKSAoKChTVEFURSkgPT0gRlNNQ19Bc3luY2hyb25vdXNXYWl0X0Rpc2FibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBGU01DX0FzeW5jaHJvbm91c1dhaXRfRW5hYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX1dhaXRfU2lnbmFsX1BvbGFyaXR5IA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5X0xvdyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19XYWl0U2lnbmFsUG9sYXJpdHlfSGlnaCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBJU19GU01DX1dBSVRfUE9MQVJJVFkoUE9MQVJJVFkpICgoKFBPTEFSSVRZKSA9PSBGU01DX1dhaXRTaWduYWxQb2xhcml0eV9Mb3cpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MQVJJVFkpID09IEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5X0hpZ2gpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfV3JhcF9Nb2RlIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZTTUNfV3JhcE1vZGVfRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19XcmFwTW9kZV9FbmFibGUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApIA0KKyNkZWZpbmUgSVNfRlNNQ19XUkFQX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gRlNNQ19XcmFwTW9kZV9EaXNhYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGU01DX1dyYXBNb2RlX0VuYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19XYWl0X1RpbWluZyANCisgICogQHsNCisgICovDQorI2RlZmluZSBGU01DX1dhaXRTaWduYWxBY3RpdmVfQmVmb3JlV2FpdFN0YXRlICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZTTUNfV2FpdFNpZ25hbEFjdGl2ZV9EdXJpbmdXYWl0U3RhdGUgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKSANCisjZGVmaW5lIElTX0ZTTUNfV0FJVF9TSUdOQUxfQUNUSVZFKEFDVElWRSkgKCgoQUNUSVZFKSA9PSBGU01DX1dhaXRTaWduYWxBY3RpdmVfQmVmb3JlV2FpdFN0YXRlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFDVElWRSkgPT0gRlNNQ19XYWl0U2lnbmFsQWN0aXZlX0R1cmluZ1dhaXRTdGF0ZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19Xcml0ZV9PcGVyYXRpb24gDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgRlNNQ19Xcml0ZU9wZXJhdGlvbl9EaXNhYmxlICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19Xcml0ZU9wZXJhdGlvbl9FbmFibGUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgSVNfRlNNQ19XUklURV9PUEVSQVRJT04oT1BFUkFUSU9OKSAoKChPUEVSQVRJT04pID09IEZTTUNfV3JpdGVPcGVyYXRpb25fRGlzYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPUEVSQVRJT04pID09IEZTTUNfV3JpdGVPcGVyYXRpb25fRW5hYmxlKSkgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19XYWl0X1NpZ25hbCANCisgICogQHsNCisgICovDQorI2RlZmluZSBGU01DX1dhaXRTaWduYWxfRGlzYWJsZSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZTTUNfV2FpdFNpZ25hbF9FbmFibGUgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKSANCisjZGVmaW5lIElTX0ZTTUNfV0FJVEVfU0lHTkFMKFNJR05BTCkgKCgoU0lHTkFMKSA9PSBGU01DX1dhaXRTaWduYWxfRGlzYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSUdOQUwpID09IEZTTUNfV2FpdFNpZ25hbF9FbmFibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfRXh0ZW5kZWRfTW9kZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBGU01DX0V4dGVuZGVkTW9kZV9EaXNhYmxlICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZTTUNfRXh0ZW5kZWRNb2RlX0VuYWJsZSAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKw0KKyNkZWZpbmUgSVNfRlNNQ19FWFRFTkRFRF9NT0RFKE1PREUpICgoKE1PREUpID09IEZTTUNfRXh0ZW5kZWRNb2RlX0Rpc2FibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGU01DX0V4dGVuZGVkTW9kZV9FbmFibGUpKSANCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX1dyaXRlX0J1cnN0IA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEZTTUNfV3JpdGVCdXJzdF9EaXNhYmxlICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19Xcml0ZUJ1cnN0X0VuYWJsZSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApIA0KKyNkZWZpbmUgSVNfRlNNQ19XUklURV9CVVJTVChCVVJTVCkgKCgoQlVSU1QpID09IEZTTUNfV3JpdGVCdXJzdF9EaXNhYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCVVJTVCkgPT0gRlNNQ19Xcml0ZUJ1cnN0X0VuYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19BZGRyZXNzX1NldHVwX1RpbWUgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgSVNfRlNNQ19BRERSRVNTX1NFVFVQX1RJTUUoVElNRSkgKChUSU1FKSA8PSAweEYpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19BZGRyZXNzX0hvbGRfVGltZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBJU19GU01DX0FERFJFU1NfSE9MRF9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfRGF0YV9TZXR1cF9UaW1lIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0ZTTUNfREFUQVNFVFVQX1RJTUUoVElNRSkgKCgoVElNRSkgPiAwKSAmJiAoKFRJTUUpIDw9IDB4RkYpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfQnVzX1R1cm5fYXJvdW5kX0R1cmF0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0ZTTUNfVFVSTkFST1VORF9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfQ0xLX0RpdmlzaW9uIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0ZTTUNfQ0xLX0RJVihESVYpICgoRElWKSA8PSAweEYpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19EYXRhX0xhdGVuY3kgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgSVNfRlNNQ19EQVRBX0xBVEVOQ1koTEFURU5DWSkgKChMQVRFTkNZKSA8PSAweEYpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19BY2Nlc3NfTW9kZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBGU01DX0FjY2Vzc01vZGVfQSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIEZTTUNfQWNjZXNzTW9kZV9CICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKSANCisjZGVmaW5lIEZTTUNfQWNjZXNzTW9kZV9DICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19BY2Nlc3NNb2RlX0QgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MzAwMDAwMDApDQorI2RlZmluZSBJU19GU01DX0FDQ0VTU19NT0RFKE1PREUpICgoKE1PREUpID09IEZTTUNfQWNjZXNzTW9kZV9BKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZTTUNfQWNjZXNzTW9kZV9CKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZTTUNfQWNjZXNzTW9kZV9DKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZTTUNfQWNjZXNzTW9kZV9EKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKyAgDQorLyoqIEBkZWZncm91cCBGU01DX05BTkRfUENDQVJEX0NvbnRyb2xsZXIgDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19XYWl0X2ZlYXR1cmUgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgRlNNQ19XYWl0ZmVhdHVyZV9EaXNhYmxlICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBGU01DX1dhaXRmZWF0dXJlX0VuYWJsZSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIElTX0ZTTUNfV0FJVF9GRUFUVVJFKEZFQVRVUkUpICgoKEZFQVRVUkUpID09IEZTTUNfV2FpdGZlYXR1cmVfRGlzYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkVBVFVSRSkgPT0gRlNNQ19XYWl0ZmVhdHVyZV9FbmFibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisNCisvKiogQGRlZmdyb3VwIEZTTUNfRUNDIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZTTUNfRUNDX0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgRlNNQ19FQ0NfRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBJU19GU01DX0VDQ19TVEFURShTVEFURSkgKCgoU1RBVEUpID09IEZTTUNfRUNDX0Rpc2FibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gRlNNQ19FQ0NfRW5hYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX0VDQ19QYWdlX1NpemUgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgRlNNQ19FQ0NQYWdlU2l6ZV8yNTZCeXRlcyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBGU01DX0VDQ1BhZ2VTaXplXzUxMkJ5dGVzICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIEZTTUNfRUNDUGFnZVNpemVfMTAyNEJ5dGVzICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgRlNNQ19FQ0NQYWdlU2l6ZV8yMDQ4Qnl0ZXMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNjAwMDApDQorI2RlZmluZSBGU01DX0VDQ1BhZ2VTaXplXzQwOTZCeXRlcyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lIEZTTUNfRUNDUGFnZVNpemVfODE5MkJ5dGVzICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMEEwMDAwKQ0KKyNkZWZpbmUgSVNfRlNNQ19FQ0NQQUdFX1NJWkUoU0laRSkgKCgoU0laRSkgPT0gRlNNQ19FQ0NQYWdlU2l6ZV8yNTZCeXRlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRlNNQ19FQ0NQYWdlU2l6ZV81MTJCeXRlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRlNNQ19FQ0NQYWdlU2l6ZV8xMDI0Qnl0ZXMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IEZTTUNfRUNDUGFnZVNpemVfMjA0OEJ5dGVzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGU01DX0VDQ1BhZ2VTaXplXzQwOTZCeXRlcykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRlNNQ19FQ0NQYWdlU2l6ZV84MTkyQnl0ZXMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfVENMUl9TZXR1cF9UaW1lIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0ZTTUNfVENMUl9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGRikNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX1RBUl9TZXR1cF9UaW1lIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0ZTTUNfVEFSX1RJTUUoVElNRSkgKChUSU1FKSA8PSAweEZGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfU2V0dXBfVGltZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBJU19GU01DX1NFVFVQX1RJTUUoVElNRSkgKChUSU1FKSA8PSAweEZGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfV2FpdF9TZXR1cF9UaW1lIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElTX0ZTTUNfV0FJVF9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGRikNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX0hvbGRfU2V0dXBfVGltZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBJU19GU01DX0hPTERfVElNRShUSU1FKSAoKFRJTUUpIDw9IDB4RkYpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19IaVpfU2V0dXBfVGltZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBJU19GU01DX0hJWl9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGRikNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX0ludGVycnVwdF9zb3VyY2VzIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZTTUNfSVRfUmlzaW5nRWRnZSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgRlNNQ19JVF9MZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBGU01DX0lUX0ZhbGxpbmdFZGdlICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIElTX0ZTTUNfSVQoSVQpICgoKChJVCkgJiAodWludDMyX3QpMHhGRkZGRkZDNykgPT0gMHgwMDAwMDAwMCkgJiYgKChJVCkgIT0gMHgwMDAwMDAwMCkpDQorI2RlZmluZSBJU19GU01DX0dFVF9JVChJVCkgKCgoSVQpID09IEZTTUNfSVRfUmlzaW5nRWRnZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBGU01DX0lUX0xldmVsKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IEZTTUNfSVRfRmFsbGluZ0VkZ2UpKSANCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGU01DX0ZsYWdzIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIEZTTUNfRkxBR19SaXNpbmdFZGdlICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgRlNNQ19GTEFHX0xldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBGU01DX0ZMQUdfRmFsbGluZ0VkZ2UgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIEZTTUNfRkxBR19GRU1QVCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgSVNfRlNNQ19HRVRfRkxBRyhGTEFHKSAoKChGTEFHKSA9PSBGU01DX0ZMQUdfUmlzaW5nRWRnZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBGU01DX0ZMQUdfTGV2ZWwpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gRlNNQ19GTEFHX0ZhbGxpbmdFZGdlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEZTTUNfRkxBR19GRU1QVCkpDQorDQorI2RlZmluZSBJU19GU01DX0NMRUFSX0ZMQUcoRkxBRykgKCgoKEZMQUcpICYgKHVpbnQzMl90KTB4RkZGRkZGRjgpID09IDB4MDAwMDAwMDApICYmICgoRkxBRykgIT0gMHgwMDAwMDAwMCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyANCisNCisvKiBOT1IvU1JBTSBDb250cm9sbGVyIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRlNNQ19OT1JTUkFNRGVJbml0KHVpbnQzMl90IEZTTUNfQmFuayk7DQordm9pZCBGU01DX05PUlNSQU1Jbml0KEZTTUNfTk9SU1JBTUluaXRUeXBlRGVmKiBGU01DX05PUlNSQU1Jbml0U3RydWN0KTsNCit2b2lkIEZTTUNfTk9SU1JBTVN0cnVjdEluaXQoRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYqIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QpOw0KK3ZvaWQgRlNNQ19OT1JTUkFNQ21kKHVpbnQzMl90IEZTTUNfQmFuaywgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBOQU5EIENvbnRyb2xsZXIgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRlNNQ19OQU5ERGVJbml0KHVpbnQzMl90IEZTTUNfQmFuayk7DQordm9pZCBGU01DX05BTkRJbml0KEZTTUNfTkFOREluaXRUeXBlRGVmKiBGU01DX05BTkRJbml0U3RydWN0KTsNCit2b2lkIEZTTUNfTkFORFN0cnVjdEluaXQoRlNNQ19OQU5ESW5pdFR5cGVEZWYqIEZTTUNfTkFOREluaXRTdHJ1Y3QpOw0KK3ZvaWQgRlNNQ19OQU5EQ21kKHVpbnQzMl90IEZTTUNfQmFuaywgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEZTTUNfTkFOREVDQ0NtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordWludDMyX3QgRlNNQ19HZXRFQ0ModWludDMyX3QgRlNNQ19CYW5rKTsNCisNCisvKiBQQ0NBUkQgQ29udHJvbGxlciBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRlNNQ19QQ0NBUkREZUluaXQodm9pZCk7DQordm9pZCBGU01DX1BDQ0FSREluaXQoRlNNQ19QQ0NBUkRJbml0VHlwZURlZiogRlNNQ19QQ0NBUkRJbml0U3RydWN0KTsNCit2b2lkIEZTTUNfUENDQVJEU3RydWN0SW5pdChGU01DX1BDQ0FSREluaXRUeXBlRGVmKiBGU01DX1BDQ0FSREluaXRTdHJ1Y3QpOw0KK3ZvaWQgRlNNQ19QQ0NBUkRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgRlNNQ19JVENvbmZpZyh1aW50MzJfdCBGU01DX0JhbmssIHVpbnQzMl90IEZTTUNfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRmxhZ1N0YXR1cyBGU01DX0dldEZsYWdTdGF0dXModWludDMyX3QgRlNNQ19CYW5rLCB1aW50MzJfdCBGU01DX0ZMQUcpOw0KK3ZvaWQgRlNNQ19DbGVhckZsYWcodWludDMyX3QgRlNNQ19CYW5rLCB1aW50MzJfdCBGU01DX0ZMQUcpOw0KK0lUU3RhdHVzIEZTTUNfR2V0SVRTdGF0dXModWludDMyX3QgRlNNQ19CYW5rLCB1aW50MzJfdCBGU01DX0lUKTsNCit2b2lkIEZTTUNfQ2xlYXJJVFBlbmRpbmdCaXQodWludDMyX3QgRlNNQ19CYW5rLCB1aW50MzJfdCBGU01DX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfRlNNQ19IICovDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2dwaW8uaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDAyMDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2dwaW8uaApAQCAtMCwwICsxLDQxMSBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2dwaW8uaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBHUElPIGZpcm13YXJlDQorICAqICAgICAgICAgIGxpYnJhcnkuDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZm5kZWYgX19TVE0zMkYyeHhfR1BJT19IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9HUElPX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBHUElPDQorICAqIEB7DQorICAqLyANCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgSVNfR1BJT19BTExfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBHUElPQSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPQikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPQykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPRykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPSCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBHUElPSSkpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKy8qKiANCisgICogQGJyaWVmICBHUElPIENvbmZpZ3VyYXRpb24gTW9kZSBlbnVtZXJhdGlvbiANCisgICovICAgDQordHlwZWRlZiBlbnVtDQoreyANCisgIEdQSU9fTW9kZV9JTiAgID0gMHgwMCwgLyohPCBHUElPIElucHV0IE1vZGUgKi8NCisgIEdQSU9fTW9kZV9PVVQgID0gMHgwMSwgLyohPCBHUElPIE91dHB1dCBNb2RlICovDQorICBHUElPX01vZGVfQUYgICA9IDB4MDIsIC8qITwgR1BJTyBBbHRlcm5hdGUgZnVuY3Rpb24gTW9kZSAqLw0KKyAgR1BJT19Nb2RlX0FOICAgPSAweDAzICAvKiE8IEdQSU8gQW5hbG9nIE1vZGUgKi8NCit9R1BJT01vZGVfVHlwZURlZjsNCisjZGVmaW5lIElTX0dQSU9fTU9ERShNT0RFKSAoKChNT0RFKSA9PSBHUElPX01vZGVfSU4pICB8fCAoKE1PREUpID09IEdQSU9fTW9kZV9PVVQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBHUElPX01vZGVfQUYpfHwgKChNT0RFKSA9PSBHUElPX01vZGVfQU4pKQ0KKw0KKy8qKiANCisgICogQGJyaWVmICBHUElPIE91dHB1dCB0eXBlIGVudW1lcmF0aW9uIA0KKyAgKi8gIA0KK3R5cGVkZWYgZW51bQ0KK3sgDQorICBHUElPX09UeXBlX1BQID0gMHgwMCwNCisgIEdQSU9fT1R5cGVfT0QgPSAweDAxDQorfUdQSU9PVHlwZV9UeXBlRGVmOw0KKyNkZWZpbmUgSVNfR1BJT19PVFlQRShPVFlQRSkgKCgoT1RZUEUpID09IEdQSU9fT1R5cGVfUFApIHx8ICgoT1RZUEUpID09IEdQSU9fT1R5cGVfT0QpKQ0KKw0KKw0KKy8qKiANCisgICogQGJyaWVmICBHUElPIE91dHB1dCBNYXhpbXVtIGZyZXF1ZW5jeSBlbnVtZXJhdGlvbiANCisgICovICANCit0eXBlZGVmIGVudW0NCit7IA0KKyAgR1BJT19TcGVlZF8yTUh6ICAgPSAweDAwLCAvKiE8IExvdyBzcGVlZCAqLw0KKyAgR1BJT19TcGVlZF8yNU1IeiAgPSAweDAxLCAvKiE8IE1lZGl1bSBzcGVlZCAqLw0KKyAgR1BJT19TcGVlZF81ME1IeiAgPSAweDAyLCAvKiE8IEZhc3Qgc3BlZWQgKi8NCisgIEdQSU9fU3BlZWRfMTAwTUh6ID0gMHgwMyAgLyohPCBIaWdoIHNwZWVkIG9uIDMwIHBGICg4MCBNSHogT3V0cHV0IG1heCBzcGVlZCBvbiAxNSBwRikgKi8NCit9R1BJT1NwZWVkX1R5cGVEZWY7DQorI2RlZmluZSBJU19HUElPX1NQRUVEKFNQRUVEKSAoKChTUEVFRCkgPT0gR1BJT19TcGVlZF8yTUh6KSB8fCAoKFNQRUVEKSA9PSBHUElPX1NwZWVkXzI1TUh6KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTUEVFRCkgPT0gR1BJT19TcGVlZF81ME1Ieil8fCAgKChTUEVFRCkgPT0gR1BJT19TcGVlZF8xMDBNSHopKSANCisNCisvKiogDQorICAqIEBicmllZiAgR1BJTyBDb25maWd1cmF0aW9uIFB1bGxVcCBQdWxsRG93biBlbnVtZXJhdGlvbiANCisgICovIA0KK3R5cGVkZWYgZW51bQ0KK3sgDQorICBHUElPX1B1UGRfTk9QVUxMID0gMHgwMCwNCisgIEdQSU9fUHVQZF9VUCAgICAgPSAweDAxLA0KKyAgR1BJT19QdVBkX0RPV04gICA9IDB4MDINCit9R1BJT1B1UGRfVHlwZURlZjsNCisjZGVmaW5lIElTX0dQSU9fUFVQRChQVVBEKSAoKChQVVBEKSA9PSBHUElPX1B1UGRfTk9QVUxMKSB8fCAoKFBVUEQpID09IEdQSU9fUHVQZF9VUCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBVUEQpID09IEdQSU9fUHVQZF9ET1dOKSkNCisNCisvKiogDQorICAqIEBicmllZiAgR1BJTyBCaXQgU0VUIGFuZCBCaXQgUkVTRVQgZW51bWVyYXRpb24gDQorICAqLyANCit0eXBlZGVmIGVudW0NCit7IA0KKyAgQml0X1JFU0VUID0gMCwNCisgIEJpdF9TRVQNCit9Qml0QWN0aW9uOw0KKyNkZWZpbmUgSVNfR1BJT19CSVRfQUNUSU9OKEFDVElPTikgKCgoQUNUSU9OKSA9PSBCaXRfUkVTRVQpIHx8ICgoQUNUSU9OKSA9PSBCaXRfU0VUKSkNCisNCisNCisvKiogDQorICAqIEBicmllZiAgIEdQSU8gSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IEdQSU9fUGluOyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEdQSU8gcGlucyB0byBiZSBjb25maWd1cmVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBHUElPX3BpbnNfZGVmaW5lICovDQorDQorICBHUElPTW9kZV9UeXBlRGVmIEdQSU9fTW9kZTsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHNlbGVjdGVkIHBpbnMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBHUElPTW9kZV9UeXBlRGVmICovDQorDQorICBHUElPU3BlZWRfVHlwZURlZiBHUElPX1NwZWVkOyAgIC8qITwgU3BlY2lmaWVzIHRoZSBzcGVlZCBmb3IgdGhlIHNlbGVjdGVkIHBpbnMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBHUElPU3BlZWRfVHlwZURlZiAqLw0KKw0KKyAgR1BJT09UeXBlX1R5cGVEZWYgR1BJT19PVHlwZTsgICAvKiE8IFNwZWNpZmllcyB0aGUgb3BlcmF0aW5nIG91dHB1dCB0eXBlIGZvciB0aGUgc2VsZWN0ZWQgcGlucy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEdQSU9PVHlwZV9UeXBlRGVmICovDQorDQorICBHUElPUHVQZF9UeXBlRGVmIEdQSU9fUHVQZDsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBvcGVyYXRpbmcgUHVsbC11cC9QdWxsIGRvd24gZm9yIHRoZSBzZWxlY3RlZCBwaW5zLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgR1BJT1B1UGRfVHlwZURlZiAqLw0KK31HUElPX0luaXRUeXBlRGVmOw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBHUElPX0V4cG9ydGVkX0NvbnN0YW50cw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBHUElPX3BpbnNfZGVmaW5lIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBHUElPX1Bpbl8wICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgIC8qIFBpbiAwIHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl8xICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgIC8qIFBpbiAxIHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl8yICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgIC8qIFBpbiAyIHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl8zICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkgIC8qIFBpbiAzIHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl80ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkgIC8qIFBpbiA0IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl81ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkgIC8qIFBpbiA1IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl82ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkgIC8qIFBpbiA2IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl83ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkgIC8qIFBpbiA3IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl84ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkgIC8qIFBpbiA4IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl85ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkgIC8qIFBpbiA5IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl8xMCAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkgIC8qIFBpbiAxMCBzZWxlY3RlZCAqLw0KKyNkZWZpbmUgR1BJT19QaW5fMTEgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApICAvKiBQaW4gMTEgc2VsZWN0ZWQgKi8NCisjZGVmaW5lIEdQSU9fUGluXzEyICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKSAgLyogUGluIDEyIHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl8xMyAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkgIC8qIFBpbiAxMyBzZWxlY3RlZCAqLw0KKyNkZWZpbmUgR1BJT19QaW5fMTQgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDQwMDApICAvKiBQaW4gMTQgc2VsZWN0ZWQgKi8NCisjZGVmaW5lIEdQSU9fUGluXzE1ICAgICAgICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKSAgLyogUGluIDE1IHNlbGVjdGVkICovDQorI2RlZmluZSBHUElPX1Bpbl9BbGwgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4RkZGRikgIC8qIEFsbCBwaW5zIHNlbGVjdGVkICovDQorDQorI2RlZmluZSBJU19HUElPX1BJTihQSU4pICgoKChQSU4pICYgKHVpbnQxNl90KTB4MDApID09IDB4MDApICYmICgoUElOKSAhPSAodWludDE2X3QpMHgwMCkpDQorI2RlZmluZSBJU19HRVRfR1BJT19QSU4oUElOKSAoKChQSU4pID09IEdQSU9fUGluXzApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBHUElPX1Bpbl8yKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU4pID09IEdQSU9fUGluXzMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBHUElPX1Bpbl81KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU4pID09IEdQSU9fUGluXzYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBHUElPX1Bpbl84KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU4pID09IEdQSU9fUGluXzkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMTApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMTQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gR1BJT19QaW5fMTUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBHUElPX1Bpbl9zb3VyY2VzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBHUElPX1BpblNvdXJjZTAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisjZGVmaW5lIEdQSU9fUGluU291cmNlMSAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgR1BJT19QaW5Tb3VyY2UyICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBHUElPX1BpblNvdXJjZTMgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykNCisjZGVmaW5lIEdQSU9fUGluU291cmNlNCAgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgR1BJT19QaW5Tb3VyY2U1ICAgICAgICAgICAgKCh1aW50OF90KTB4MDUpDQorI2RlZmluZSBHUElPX1BpblNvdXJjZTYgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNikNCisjZGVmaW5lIEdQSU9fUGluU291cmNlNyAgICAgICAgICAgICgodWludDhfdCkweDA3KQ0KKyNkZWZpbmUgR1BJT19QaW5Tb3VyY2U4ICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpDQorI2RlZmluZSBHUElPX1BpblNvdXJjZTkgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkNCisjZGVmaW5lIEdQSU9fUGluU291cmNlMTAgICAgICAgICAgICgodWludDhfdCkweDBBKQ0KKyNkZWZpbmUgR1BJT19QaW5Tb3VyY2UxMSAgICAgICAgICAgKCh1aW50OF90KTB4MEIpDQorI2RlZmluZSBHUElPX1BpblNvdXJjZTEyICAgICAgICAgICAoKHVpbnQ4X3QpMHgwQykNCisjZGVmaW5lIEdQSU9fUGluU291cmNlMTMgICAgICAgICAgICgodWludDhfdCkweDBEKQ0KKyNkZWZpbmUgR1BJT19QaW5Tb3VyY2UxNCAgICAgICAgICAgKCh1aW50OF90KTB4MEUpDQorI2RlZmluZSBHUElPX1BpblNvdXJjZTE1ICAgICAgICAgICAoKHVpbnQ4X3QpMHgwRikNCisNCisjZGVmaW5lIElTX0dQSU9fUElOX1NPVVJDRShQSU5TT1VSQ0UpICgoKFBJTlNPVVJDRSkgPT0gR1BJT19QaW5Tb3VyY2UwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEdQSU9fUGluU291cmNlMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBHUElPX1BpblNvdXJjZTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gR1BJT19QaW5Tb3VyY2UzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEdQSU9fUGluU291cmNlNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBHUElPX1BpblNvdXJjZTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gR1BJT19QaW5Tb3VyY2U2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEdQSU9fUGluU291cmNlNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBHUElPX1BpblNvdXJjZTgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gR1BJT19QaW5Tb3VyY2U5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEdQSU9fUGluU291cmNlMTApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gR1BJT19QaW5Tb3VyY2UxMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBHUElPX1BpblNvdXJjZTEyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEdQSU9fUGluU291cmNlMTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gR1BJT19QaW5Tb3VyY2UxNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBHUElPX1BpblNvdXJjZTE1KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgR1BJT19BbHRlcm5hdF9mdW5jdGlvbl9zZWxlY3Rpb25fZGVmaW5lIA0KKyAgKiBAew0KKyAgKi8gDQorLyoqIA0KKyAgKiBAYnJpZWYgICBBRiAwIHNlbGVjdGlvbiAgDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfUlRDXzUwSHogICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qIFJUQ181MEh6IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX01DTyAgICAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiBNQ08gKE1DTzEgYW5kIE1DTzIpIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX1RBTVBFUiAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiBUQU1QRVIgKFRBTVBFUl8xIGFuZCBUQU1QRVJfMikgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfU1dKICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qIFNXSiAoU1dEIGFuZCBKVEFHKSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9UUkFDRSAgICAgICAgICgodWludDhfdCkweDAwKSAgLyogVFJBQ0UgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEFGIDEgc2VsZWN0aW9uICANCisgICovIA0KKyNkZWZpbmUgR1BJT19BRl9USU0xICAgICAgICAgICgodWludDhfdCkweDAxKSAgLyogVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9USU0yICAgICAgICAgICgodWludDhfdCkweDAxKSAgLyogVElNMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICAgQUYgMiBzZWxlY3Rpb24gIA0KKyAgKi8gDQorI2RlZmluZSBHUElPX0FGX1RJTTMgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiBUSU0zIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX1RJTTQgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiBUSU00IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX1RJTTUgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiBUSU01IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgICBBRiAzIHNlbGVjdGlvbiAgDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfVElNOCAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qIFRJTTggQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfVElNOSAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qIFRJTTkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfVElNMTAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qIFRJTTEwIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX1RJTTExICAgICAgICAgKCh1aW50OF90KTB4MDMpICAvKiBUSU0xMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICAgQUYgNCBzZWxlY3Rpb24gIA0KKyAgKi8gDQorI2RlZmluZSBHUElPX0FGX0kyQzEgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBJMkMxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX0kyQzIgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBJMkMyIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX0kyQzMgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBJMkMzIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgICBBRiA1IHNlbGVjdGlvbiAgDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfU1BJMSAgICAgICAgICAoKHVpbnQ4X3QpMHgwNSkgIC8qIFNQSTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfU1BJMiAgICAgICAgICAoKHVpbnQ4X3QpMHgwNSkgIC8qIFNQSTIvSTJTMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICAgQUYgNiBzZWxlY3Rpb24gIA0KKyAgKi8gDQorI2RlZmluZSBHUElPX0FGX1NQSTMgICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiBTUEkzL0kyUzMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEFGIDcgc2VsZWN0aW9uICANCisgICovIA0KKyNkZWZpbmUgR1BJT19BRl9VU0FSVDEgICAgICAgICgodWludDhfdCkweDA3KSAgLyogVVNBUlQxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX1VTQVJUMiAgICAgICAgKCh1aW50OF90KTB4MDcpICAvKiBVU0FSVDIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfVVNBUlQzICAgICAgICAoKHVpbnQ4X3QpMHgwNykgIC8qIFVTQVJUMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICAgQUYgOCBzZWxlY3Rpb24gIA0KKyAgKi8gDQorI2RlZmluZSBHUElPX0FGX1VBUlQ0ICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiBVQVJUNCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9VQVJUNSAgICAgICAgICgodWludDhfdCkweDA4KSAgLyogVUFSVDUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfVVNBUlQ2ICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgIC8qIFVTQVJUNiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICAgQUYgOSBzZWxlY3Rpb24gDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfQ0FOMSAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIENBTjEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfQ0FOMiAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIENBTjIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisjZGVmaW5lIEdQSU9fQUZfVElNMTIgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qIFRJTTEyIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorI2RlZmluZSBHUElPX0FGX1RJTTEzICAgICAgICAgKCh1aW50OF90KTB4MDkpICAvKiBUSU0xMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9USU0xNCAgICAgICAgICgodWludDhfdCkweDA5KSAgLyogVElNMTQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEFGIDEwIHNlbGVjdGlvbiAgDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfT1RHX0ZTICAgICAgICAgKCh1aW50OF90KTB4QSkgIC8qIE9UR19GUyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9PVEdfSFMgICAgICAgICAoKHVpbnQ4X3QpMHhBKSAgLyogT1RHX0hTIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgICBBRiAxMSBzZWxlY3Rpb24gIA0KKyAgKi8gDQorI2RlZmluZSBHUElPX0FGX0VUSCAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwQikgIC8qIEVUSEVSTkVUIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgICBBRiAxMiBzZWxlY3Rpb24gIA0KKyAgKi8gDQorI2RlZmluZSBHUElPX0FGX0ZTTUMgICAgICAgICAgICAoKHVpbnQ4X3QpMHhDKSAgLyogRlNNQyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9PVEdfSFNfRlMgICAgICAgKCh1aW50OF90KTB4QykgIC8qIE9URyBIUyBjb25maWd1cmVkIGluIEZTLCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLw0KKyNkZWZpbmUgR1BJT19BRl9TRElPICAgICAgICAgICAgKCh1aW50OF90KTB4QykgIC8qIFNESU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEFGIDEzIHNlbGVjdGlvbiAgDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfRENNSSAgICAgICAgICAoKHVpbnQ4X3QpMHgwRCkgIC8qIERDTUkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEFGIDE1IHNlbGVjdGlvbiAgDQorICAqLyANCisjZGVmaW5lIEdQSU9fQUZfRVZFTlRPVVQgICAgICAoKHVpbnQ4X3QpMHgwRikgIC8qIEVWRU5UT1VUIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovDQorDQorI2RlZmluZSBJU19HUElPX0FGKEFGKSAgICgoKEFGKSA9PSBHUElPX0FGX1JUQ181MEh6KSAgfHwgKChBRikgPT0gR1BJT19BRl9USU0xNCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUZfTUNPKSAgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGX1RBTVBFUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRl9TV0opICAgICAgIHx8ICgoQUYpID09IEdQSU9fQUZfVFJBQ0UpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGX1RJTTEpICAgICAgfHwgKChBRikgPT0gR1BJT19BRl9USU0yKSAgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUZfVElNMykgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGX1RJTTQpICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRl9USU01KSAgICAgIHx8ICgoQUYpID09IEdQSU9fQUZfVElNOCkgICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGX0kyQzEpICAgICAgfHwgKChBRikgPT0gR1BJT19BRl9JMkMyKSAgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUZfSTJDMykgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGX1NQSTEpICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRl9TUEkyKSAgICAgIHx8ICgoQUYpID09IEdQSU9fQUZfVElNMTMpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGX1NQSTMpICAgICAgfHwgKChBRikgPT0gR1BJT19BRl9USU0xNCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUZfVVNBUlQxKSAgICB8fCAoKEFGKSA9PSBHUElPX0FGX1VTQVJUMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRl9VU0FSVDMpICAgIHx8ICgoQUYpID09IEdQSU9fQUZfVUFSVDQpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGX1VBUlQ1KSAgICAgfHwgKChBRikgPT0gR1BJT19BRl9VU0FSVDYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUZfQ0FOMSkgICAgICB8fCAoKEFGKSA9PSBHUElPX0FGX0NBTjIpICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRl9PVEdfRlMpICAgIHx8ICgoQUYpID09IEdQSU9fQUZfT1RHX0hTKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFGKSA9PSBHUElPX0FGX0VUSCkgICAgICAgfHwgKChBRikgPT0gR1BJT19BRl9GU01DKSAgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUYpID09IEdQSU9fQUZfT1RHX0hTX0ZTKSB8fCAoKEFGKSA9PSBHUElPX0FGX1NESU8pICAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRikgPT0gR1BJT19BRl9EQ01JKSAgICAgIHx8ICgoQUYpID09IEdQSU9fQUZfRVZFTlRPVVQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBHUElPX0xlZ2FjeSANCisgICogQHsNCisgICovDQorICAgIA0KKyNkZWZpbmUgR1BJT19Nb2RlX0FJTiAgICAgICAgICAgR1BJT19Nb2RlX0FODQorDQorI2RlZmluZSBHUElPX0FGX09URzFfRlMgICAgICAgICBHUElPX0FGX09UR19GUw0KKyNkZWZpbmUgR1BJT19BRl9PVEcyX0hTICAgICAgICAgR1BJT19BRl9PVEdfSFMNCisjZGVmaW5lIEdQSU9fQUZfT1RHMl9GUyAgICAgICAgIEdQSU9fQUZfT1RHX0hTX0ZTDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKw0KKy8qICBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgR1BJTyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKiovDQordm9pZCBHUElPX0RlSW5pdChHUElPX1R5cGVEZWYqIEdQSU94KTsNCisNCisvKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgR1BJT19Jbml0KEdQSU9fVHlwZURlZiogR1BJT3gsIEdQSU9fSW5pdFR5cGVEZWYqIEdQSU9fSW5pdFN0cnVjdCk7DQordm9pZCBHUElPX1N0cnVjdEluaXQoR1BJT19Jbml0VHlwZURlZiogR1BJT19Jbml0U3RydWN0KTsNCit2b2lkIEdQSU9fUGluTG9ja0NvbmZpZyhHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1Bpbik7DQorDQorLyogR1BJTyBSZWFkIGFuZCBXcml0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit1aW50OF90IEdQSU9fUmVhZElucHV0RGF0YUJpdChHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1Bpbik7DQordWludDE2X3QgR1BJT19SZWFkSW5wdXREYXRhKEdQSU9fVHlwZURlZiogR1BJT3gpOw0KK3VpbnQ4X3QgR1BJT19SZWFkT3V0cHV0RGF0YUJpdChHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1Bpbik7DQordWludDE2X3QgR1BJT19SZWFkT3V0cHV0RGF0YShHUElPX1R5cGVEZWYqIEdQSU94KTsNCit2b2lkIEdQSU9fU2V0Qml0cyhHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1Bpbik7DQordm9pZCBHUElPX1Jlc2V0Qml0cyhHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1Bpbik7DQordm9pZCBHUElPX1dyaXRlQml0KEdQSU9fVHlwZURlZiogR1BJT3gsIHVpbnQxNl90IEdQSU9fUGluLCBCaXRBY3Rpb24gQml0VmFsKTsNCit2b2lkIEdQSU9fV3JpdGUoR1BJT19UeXBlRGVmKiBHUElPeCwgdWludDE2X3QgUG9ydFZhbCk7DQordm9pZCBHUElPX1RvZ2dsZUJpdHMoR1BJT19UeXBlRGVmKiBHUElPeCwgdWludDE2X3QgR1BJT19QaW4pOw0KKw0KKy8qIEdQSU8gQWx0ZXJuYXRlIGZ1bmN0aW9ucyBjb25maWd1cmF0aW9uIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBHUElPX1BpbkFGQ29uZmlnKEdQSU9fVHlwZURlZiogR1BJT3gsIHVpbnQxNl90IEdQSU9fUGluU291cmNlLCB1aW50OF90IEdQSU9fQUYpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLypfX1NUTTMyRjJ4eF9HUElPX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2hhc2guaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDQ1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2hhc2guaApAQCAtMCwwICsxLDI1MCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2hhc2guaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBIQVNIIA0KKyAgKiAgICAgICAgICBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0hBU0hfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfSEFTSF9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgSEFTSA0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogDQorICAqIEBicmllZiAgIEhBU0ggSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KKyAgKi8gDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBIQVNIX0FsZ29TZWxlY3Rpb247IC8qITwgU0hBLTEgb3IgTUQ1LiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBAcmVmIEhBU0hfQWxnb19TZWxlY3Rpb24gKi8NCisgIHVpbnQzMl90IEhBU0hfQWxnb01vZGU7ICAgICAgLyohPCBIQVNIIG9yIEhNQUMuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIEByZWYgSEFTSF9wcm9jZXNzb3JfQWxnb3JpdGhtX01vZGUgKi8NCisgIHVpbnQzMl90IEhBU0hfRGF0YVR5cGU7ICAgICAgLyohPCAzMi1iaXQgZGF0YSwgMTYtYml0IGRhdGEsIDgtYml0IGRhdGEgb3IgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0LXN0cmluZy4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEhBU0hfRGF0YV9UeXBlICovDQorICB1aW50MzJfdCBIQVNIX0hNQUNLZXlUeXBlOyAgIC8qITwgSE1BQyBTaG9ydCBrZXkgb3IgSE1BQyBMb25nIEtleS4gVGhpcyBwYXJhbWV0ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEhBU0hfSE1BQ19Mb25nX2tleV9vbmx5X2Zvcl9ITUFDX21vZGUgKi8NCit9SEFTSF9Jbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgSEFTSCBtZXNzYWdlIGRpZ2VzdCByZXN1bHQgc3RydWN0dXJlIGRlZmluaXRpb24gIA0KKyAgKi8gDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBEYXRhWzVdOyAgICAgIC8qITwgTWVzc2FnZSBkaWdlc3QgcmVzdWx0IDogNXggMzJiaXQgd29yZHMgZm9yIFNIQTEgb3IgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNHggMzJiaXQgd29yZHMgZm9yIE1ENSAgKi8NCit9IEhBU0hfTXNnRGlnZXN0OyANCisNCisvKiogDQorICAqIEBicmllZiAgSEFTSCBjb250ZXh0IHN3YXBwaW5nIHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3QgSEFTSF9JTVI7IA0KKyAgdWludDMyX3QgSEFTSF9TVFI7ICAgICAgDQorICB1aW50MzJfdCBIQVNIX0NSOyAgICAgDQorICB1aW50MzJfdCBIQVNIX0NTUls1MV07ICAgICAgIA0KK31IQVNIX0NvbnRleHQ7DQorDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIEhBU0hfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIEhBU0hfQWxnb19TZWxlY3Rpb24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIEhBU0hfQWxnb1NlbGVjdGlvbl9TSEExICAgICgodWludDE2X3QpMHgwMDAwKSAvKiE8IEhBU0ggZnVuY3Rpb24gaXMgU0hBMSAqLw0KKyNkZWZpbmUgSEFTSF9BbGdvU2VsZWN0aW9uX01ENSAgICAgKCh1aW50MTZfdCkweDAwODApIC8qITwgSEFTSCBmdW5jdGlvbiBpcyBNRDUgKi8NCisNCisjZGVmaW5lIElTX0hBU0hfQUxHT1NFTEVDVElPTihBTEdPU0VMRUNUSU9OKSAoKChBTEdPU0VMRUNUSU9OKSA9PSBIQVNIX0FsZ29TZWxlY3Rpb25fU0hBMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFMR09TRUxFQ1RJT04pID09IEhBU0hfQWxnb1NlbGVjdGlvbl9NRDUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEhBU0hfcHJvY2Vzc29yX0FsZ29yaXRobV9Nb2RlIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBIQVNIX0FsZ29Nb2RlX0hBU0ggICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkgLyohPCBBbGdvcml0aG0gaXMgSEFTSCAqLyANCisjZGVmaW5lIEhBU0hfQWxnb01vZGVfSE1BQyAgICAgICAgICgodWludDE2X3QpMHgwMDQwKSAvKiE8IEFsZ29yaXRobSBpcyBITUFDICovDQorDQorI2RlZmluZSBJU19IQVNIX0FMR09NT0RFKEFMR09NT0RFKSAoKChBTEdPTU9ERSkgPT0gSEFTSF9BbGdvTW9kZV9IQVNIKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBTEdPTU9ERSkgPT0gSEFTSF9BbGdvTW9kZV9ITUFDKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBIQVNIX0RhdGFfVHlwZSAgDQorICAqIEB7DQorICAqLyAgDQorI2RlZmluZSBIQVNIX0RhdGFUeXBlXzMyYiAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIEhBU0hfRGF0YVR5cGVfMTZiICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKyNkZWZpbmUgSEFTSF9EYXRhVHlwZV84YiAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBIQVNIX0RhdGFUeXBlXzFiICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAzMCkNCisNCisjZGVmaW5lIElTX0hBU0hfREFUQVRZUEUoREFUQVRZUEUpICgoKERBVEFUWVBFKSA9PSBIQVNIX0RhdGFUeXBlXzMyYil8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChEQVRBVFlQRSkgPT0gSEFTSF9EYXRhVHlwZV8xNmIpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREFUQVRZUEUpID09IEhBU0hfRGF0YVR5cGVfOGIpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREFUQVRZUEUpID09IEhBU0hfRGF0YVR5cGVfMWIpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEhBU0hfSE1BQ19Mb25nX2tleV9vbmx5X2Zvcl9ITUFDX21vZGUgIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBIQVNIX0hNQUNLZXlUeXBlX1Nob3J0S2V5ICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSAvKiE8IEhNQUMgS2V5IGlzIDw9IDY0IGJ5dGVzICovDQorI2RlZmluZSBIQVNIX0hNQUNLZXlUeXBlX0xvbmdLZXkgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAvKiE8IEhNQUMgS2V5IGlzID4gNjQgYnl0ZXMgKi8NCisNCisjZGVmaW5lIElTX0hBU0hfSE1BQ19LRVlUWVBFKEtFWVRZUEUpICgoKEtFWVRZUEUpID09IEhBU0hfSE1BQ0tleVR5cGVfU2hvcnRLZXkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChLRVlUWVBFKSA9PSBIQVNIX0hNQUNLZXlUeXBlX0xvbmdLZXkpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIE51bWJlcl9vZl92YWxpZF9iaXRzX2luX2xhc3Rfd29yZF9vZl90aGVfbWVzc2FnZSAgIA0KKyAgKiBAew0KKyAgKi8gIA0KKyNkZWZpbmUgSVNfSEFTSF9WQUxJREJJVFNOVU1CRVIoVkFMSURCSVRTKSAoKFZBTElEQklUUykgPD0gMHgxRikNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBIQVNIX2ludGVycnVwdHNfZGVmaW5pdGlvbiAgIA0KKyAgKiBAew0KKyAgKi8gIA0KKyNkZWZpbmUgSEFTSF9JVF9ESU5JICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IEEgbmV3IGJsb2NrIGNhbiBiZSBlbnRlcmVkIGludG8gdGhlIGlucHV0IGJ1ZmZlciAoRElOKSovDQorI2RlZmluZSBIQVNIX0lUX0RDSSAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgIC8qITwgRGlnZXN0IGNhbGN1bGF0aW9uIGNvbXBsZXRlICovDQorDQorI2RlZmluZSBJU19IQVNIX0lUKElUKSAoKCgoSVQpICYgKHVpbnQ4X3QpMHhGQykgPT0gMHgwMCkgJiYgKChJVCkgIT0gMHgwMCkpDQorI2RlZmluZSBJU19IQVNIX0dFVF9JVChJVCkgKCgoSVQpID09IEhBU0hfSVRfRElOSSkgfHwgKChJVCkgPT0gSEFTSF9JVF9EQ0kpKQ0KKwkJCQkgICANCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBIQVNIX2ZsYWdzX2RlZmluaXRpb24gICANCisgICogQHsNCisgICovICANCisjZGVmaW5lIEhBU0hfRkxBR19ESU5JUyAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAgLyohPCAxNiBsb2NhdGlvbnMgYXJlIGZyZWUgaW4gdGhlIERJTiA6IEEgbmV3IGJsb2NrIGNhbiBiZSBlbnRlcmVkIGludG8gdGhlIGlucHV0IGJ1ZmZlci4qLw0KKyNkZWZpbmUgSEFTSF9GTEFHX0RDSVMgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICAvKiE8IERpZ2VzdCBjYWxjdWxhdGlvbiBjb21wbGV0ZSAqLw0KKyNkZWZpbmUgSEFTSF9GTEFHX0RNQVMgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpICAvKiE8IERNQSBpbnRlcmZhY2UgaXMgZW5hYmxlZCAoRE1BRT0xKSBvciBhIHRyYW5zZmVyIGlzIG9uZ29pbmcgKi8NCisjZGVmaW5lIEhBU0hfRkxBR19CVVNZICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAgLyohPCBUaGUgaGFzaCBjb3JlIGlzIEJ1c3kgOiBwcm9jZXNzaW5nIGEgYmxvY2sgb2YgZGF0YSAqLw0KKyNkZWZpbmUgSEFTSF9GTEFHX0RJTk5FICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApICAvKiE8IERJTiBub3QgZW1wdHkgOiBUaGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSB3b3JkIG9mIGRhdGEgKi8NCisNCisjZGVmaW5lIElTX0hBU0hfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gSEFTSF9GTEFHX0RJTklTKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEhBU0hfRkxBR19EQ0lTKSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBIQVNIX0ZMQUdfRE1BUykgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gSEFTSF9GTEFHX0JVU1kpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEhBU0hfRkxBR19ESU5ORSkpIA0KKw0KKyNkZWZpbmUgSVNfSEFTSF9DTEVBUl9GTEFHKEZMQUcpKCgoRkxBRykgPT0gSEFTSF9GTEFHX0RJTklTKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBIQVNIX0ZMQUdfRENJUykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorICANCisvKiAgRnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIEhBU0ggY29uZmlndXJhdGlvbiB0byB0aGUgZGVmYXVsdCByZXNldCBzdGF0ZSAqKioqLw0KK3ZvaWQgSEFTSF9EZUluaXQodm9pZCk7DQorDQorLyogSEFTSCBDb25maWd1cmF0aW9uIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIEhBU0hfSW5pdChIQVNIX0luaXRUeXBlRGVmKiBIQVNIX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgSEFTSF9TdHJ1Y3RJbml0KEhBU0hfSW5pdFR5cGVEZWYqIEhBU0hfSW5pdFN0cnVjdCk7DQordm9pZCBIQVNIX1Jlc2V0KHZvaWQpOw0KKw0KKy8qIEhBU0ggTWVzc2FnZSBEaWdlc3QgZ2VuZXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBIQVNIX0RhdGFJbih1aW50MzJfdCBEYXRhKTsNCit1aW50OF90IEhBU0hfR2V0SW5GSUZPV29yZHNOYnIodm9pZCk7DQordm9pZCBIQVNIX1NldExhc3RXb3JkVmFsaWRCaXRzTmJyKHVpbnQxNl90IFZhbGlkTnVtYmVyKTsNCit2b2lkIEhBU0hfU3RhcnREaWdlc3Qodm9pZCk7DQordm9pZCBIQVNIX0dldERpZ2VzdChIQVNIX01zZ0RpZ2VzdCogSEFTSF9NZXNzYWdlRGlnZXN0KTsNCisNCisvKiBIQVNIIENvbnRleHQgc3dhcHBpbmcgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgSEFTSF9TYXZlQ29udGV4dChIQVNIX0NvbnRleHQqIEhBU0hfQ29udGV4dFNhdmUpOw0KK3ZvaWQgSEFTSF9SZXN0b3JlQ29udGV4dChIQVNIX0NvbnRleHQqIEhBU0hfQ29udGV4dFJlc3RvcmUpOw0KKw0KKy8qIEhBU0gncyBETUEgaW50ZXJmYWNlIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBIQVNIX0RNQUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEhBU0ggSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBIQVNIX0lUQ29uZmlnKHVpbnQ4X3QgSEFTSF9JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCitGbGFnU3RhdHVzIEhBU0hfR2V0RmxhZ1N0YXR1cyh1aW50MTZfdCBIQVNIX0ZMQUcpOw0KK3ZvaWQgSEFTSF9DbGVhckZsYWcodWludDE2X3QgSEFTSF9GTEFHKTsNCitJVFN0YXR1cyBIQVNIX0dldElUU3RhdHVzKHVpbnQ4X3QgSEFTSF9JVCk7DQordm9pZCBIQVNIX0NsZWFySVRQZW5kaW5nQml0KHVpbnQ4X3QgSEFTSF9JVCk7DQorDQorLyogSGlnaCBMZXZlbCBTSEExIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitFcnJvclN0YXR1cyBIQVNIX1NIQTEodWludDhfdCAqSW5wdXQsIHVpbnQzMl90IElsZW4sIHVpbnQ4X3QgT3V0cHV0WzIwXSk7DQorRXJyb3JTdGF0dXMgSE1BQ19TSEExKHVpbnQ4X3QgKktleSwgdWludDMyX3QgS2V5bGVuLA0KKyAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbiwNCisgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBPdXRwdXRbMjBdKTsNCisNCisvKiBIaWdoIExldmVsIE1ENSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK0Vycm9yU3RhdHVzIEhBU0hfTUQ1KHVpbnQ4X3QgKklucHV0LCB1aW50MzJfdCBJbGVuLCB1aW50OF90IE91dHB1dFsxNl0pOw0KK0Vycm9yU3RhdHVzIEhNQUNfTUQ1KHVpbnQ4X3QgKktleSwgdWludDMyX3QgS2V5bGVuLA0KKyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKklucHV0LCB1aW50MzJfdCBJbGVuLA0KKyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgT3V0cHV0WzE2XSk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKl9fU1RNMzJGMnh4X0hBU0hfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfaTJjLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMzM4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2kyYy5oCkBAIC0wLDAgKzEsNjk4IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfaTJjLmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgSTJDIGZpcm13YXJlIA0KKyAgKiAgICAgICAgICBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0kyQ19IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9JMkNfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIEkyQw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBJMkMgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDMyX3QgSTJDX0Nsb2NrU3BlZWQ7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjbG9jayBmcmVxdWVuY3kuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBhIHZhbHVlIGxvd2VyIHRoYW4gNDAwa0h6ICovDQorDQorICB1aW50MTZfdCBJMkNfTW9kZTsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEkyQyBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMkNfbW9kZSAqLw0KKw0KKyAgdWludDE2X3QgSTJDX0R1dHlDeWNsZTsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBJMkMgZmFzdCBtb2RlIGR1dHkgY3ljbGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19kdXR5X2N5Y2xlX2luX2Zhc3RfbW9kZSAqLw0KKw0KKyAgdWludDE2X3QgSTJDX093bkFkZHJlc3MxOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaXJzdCBkZXZpY2Ugb3duIGFkZHJlc3MuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSA3LWJpdCBvciAxMC1iaXQgYWRkcmVzcy4gKi8NCisNCisgIHVpbnQxNl90IEkyQ19BY2s7ICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGFja25vd2xlZGdlbWVudC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJDX2Fja25vd2xlZGdlbWVudCAqLw0KKw0KKyAgdWludDE2X3QgSTJDX0Fja25vd2xlZGdlZEFkZHJlc3M7IC8qITwgU3BlY2lmaWVzIGlmIDctYml0IG9yIDEwLWJpdCBhZGRyZXNzIGlzIGFja25vd2xlZGdlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJDX2Fja25vd2xlZGdlZF9hZGRyZXNzICovDQorfUkyQ19Jbml0VHlwZURlZjsNCisNCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX0V4cG9ydGVkX0NvbnN0YW50cw0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIElTX0kyQ19BTExfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBJMkMxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gSTJDMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IEkyQzMpKQ0KKy8qKiBAZGVmZ3JvdXAgSTJDX21vZGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSTJDX01vZGVfSTJDICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIEkyQ19Nb2RlX1NNQnVzRGV2aWNlICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpICANCisjZGVmaW5lIEkyQ19Nb2RlX1NNQnVzSG9zdCAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEEpDQorI2RlZmluZSBJU19JMkNfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBJMkNfTW9kZV9JMkMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEkyQ19Nb2RlX1NNQnVzRGV2aWNlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBJMkNfTW9kZV9TTUJ1c0hvc3QpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEkyQ19kdXR5X2N5Y2xlX2luX2Zhc3RfbW9kZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJMkNfRHV0eUN5Y2xlXzE2XzkgICAgICAgICAgICAgICgodWludDE2X3QpMHg0MDAwKSAvKiE8IEkyQyBmYXN0IG1vZGUgVGxvdy9UaGlnaCA9IDE2LzkgKi8NCisjZGVmaW5lIEkyQ19EdXR5Q3ljbGVfMiAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweEJGRkYpIC8qITwgSTJDIGZhc3QgbW9kZSBUbG93L1RoaWdoID0gMiAqLw0KKyNkZWZpbmUgSVNfSTJDX0RVVFlfQ1lDTEUoQ1lDTEUpICgoKENZQ0xFKSA9PSBJMkNfRHV0eUN5Y2xlXzE2XzkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDWUNMRSkgPT0gSTJDX0R1dHlDeWNsZV8yKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX2Fja25vd2xlZGdlbWVudA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19BY2tfRW5hYmxlICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApDQorI2RlZmluZSBJMkNfQWNrX0Rpc2FibGUgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfSTJDX0FDS19TVEFURShTVEFURSkgKCgoU1RBVEUpID09IEkyQ19BY2tfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gSTJDX0Fja19EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJMkNfdHJhbnNmZXJfZGlyZWN0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lICBJMkNfRGlyZWN0aW9uX1RyYW5zbWl0dGVyICAgICAgKCh1aW50OF90KTB4MDApDQorI2RlZmluZSAgSTJDX0RpcmVjdGlvbl9SZWNlaXZlciAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgSVNfSTJDX0RJUkVDVElPTihESVJFQ1RJT04pICgoKERJUkVDVElPTikgPT0gSTJDX0RpcmVjdGlvbl9UcmFuc21pdHRlcikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERJUkVDVElPTikgPT0gSTJDX0RpcmVjdGlvbl9SZWNlaXZlcikpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX2Fja25vd2xlZGdlZF9hZGRyZXNzIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19BY2tub3dsZWRnZWRBZGRyZXNzXzdiaXQgICAgKCh1aW50MTZfdCkweDQwMDApDQorI2RlZmluZSBJMkNfQWNrbm93bGVkZ2VkQWRkcmVzc18xMGJpdCAgICgodWludDE2X3QpMHhDMDAwKQ0KKyNkZWZpbmUgSVNfSTJDX0FDS05PV0xFREdFX0FERFJFU1MoQUREUkVTUykgKCgoQUREUkVTUykgPT0gSTJDX0Fja25vd2xlZGdlZEFkZHJlc3NfN2JpdCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUREUkVTUykgPT0gSTJDX0Fja25vd2xlZGdlZEFkZHJlc3NfMTBiaXQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBJMkNfcmVnaXN0ZXJzIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19SZWdpc3Rlcl9DUjEgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDApDQorI2RlZmluZSBJMkNfUmVnaXN0ZXJfQ1IyICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgSTJDX1JlZ2lzdGVyX09BUjEgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOCkNCisjZGVmaW5lIEkyQ19SZWdpc3Rlcl9PQVIyICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MEMpDQorI2RlZmluZSBJMkNfUmVnaXN0ZXJfRFIgICAgICAgICAgICAgICAgICgodWludDhfdCkweDEwKQ0KKyNkZWZpbmUgSTJDX1JlZ2lzdGVyX1NSMSAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgxNCkNCisjZGVmaW5lIEkyQ19SZWdpc3Rlcl9TUjIgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MTgpDQorI2RlZmluZSBJMkNfUmVnaXN0ZXJfQ0NSICAgICAgICAgICAgICAgICgodWludDhfdCkweDFDKQ0KKyNkZWZpbmUgSTJDX1JlZ2lzdGVyX1RSSVNFICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgyMCkNCisjZGVmaW5lIElTX0kyQ19SRUdJU1RFUihSRUdJU1RFUikgKCgoUkVHSVNURVIpID09IEkyQ19SZWdpc3Rlcl9DUjEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHSVNURVIpID09IEkyQ19SZWdpc3Rlcl9DUjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHSVNURVIpID09IEkyQ19SZWdpc3Rlcl9PQVIxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR0lTVEVSKSA9PSBJMkNfUmVnaXN0ZXJfT0FSMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRUdJU1RFUikgPT0gSTJDX1JlZ2lzdGVyX0RSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR0lTVEVSKSA9PSBJMkNfUmVnaXN0ZXJfU1IxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR0lTVEVSKSA9PSBJMkNfUmVnaXN0ZXJfU1IyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR0lTVEVSKSA9PSBJMkNfUmVnaXN0ZXJfQ0NSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFR0lTVEVSKSA9PSBJMkNfUmVnaXN0ZXJfVFJJU0UpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEkyQ19OQUNLX3Bvc2l0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19OQUNLUG9zaXRpb25fTmV4dCAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApDQorI2RlZmluZSBJMkNfTkFDS1Bvc2l0aW9uX0N1cnJlbnQgICAgICAgICgodWludDE2X3QpMHhGN0ZGKQ0KKyNkZWZpbmUgSVNfSTJDX05BQ0tfUE9TSVRJT04oUE9TSVRJT04pICAoKChQT1NJVElPTikgPT0gSTJDX05BQ0tQb3NpdGlvbl9OZXh0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPU0lUSU9OKSA9PSBJMkNfTkFDS1Bvc2l0aW9uX0N1cnJlbnQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBJMkNfU01CdXNfYWxlcnRfcGluX2xldmVsIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19TTUJ1c0FsZXJ0X0xvdyAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApDQorI2RlZmluZSBJMkNfU01CdXNBbGVydF9IaWdoICAgICAgICAgICAgICgodWludDE2X3QpMHhERkZGKQ0KKyNkZWZpbmUgSVNfSTJDX1NNQlVTX0FMRVJUKEFMRVJUKSAoKChBTEVSVCkgPT0gSTJDX1NNQnVzQWxlcnRfTG93KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFMRVJUKSA9PSBJMkNfU01CdXNBbGVydF9IaWdoKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJMkNfUEVDX3Bvc2l0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19QRUNQb3NpdGlvbl9OZXh0ICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApDQorI2RlZmluZSBJMkNfUEVDUG9zaXRpb25fQ3VycmVudCAgICAgICAgICgodWludDE2X3QpMHhGN0ZGKQ0KKyNkZWZpbmUgSVNfSTJDX1BFQ19QT1NJVElPTihQT1NJVElPTikgKCgoUE9TSVRJT04pID09IEkyQ19QRUNQb3NpdGlvbl9OZXh0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT1NJVElPTikgPT0gSTJDX1BFQ1Bvc2l0aW9uX0N1cnJlbnQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBJMkNfaW50ZXJydXB0c19kZWZpbml0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyQ19JVF9CVUYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA0MDApDQorI2RlZmluZSBJMkNfSVRfRVZUICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKQ0KKyNkZWZpbmUgSTJDX0lUX0VSUiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkNCisjZGVmaW5lIElTX0kyQ19DT05GSUdfSVQoSVQpICgoKChJVCkgJiAodWludDE2X3QpMHhGOEZGKSA9PSAweDAwKSAmJiAoKElUKSAhPSAweDAwKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX2ludGVycnVwdHNfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJMkNfSVRfU01CQUxFUlQgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwODAwMCkNCisjZGVmaW5lIEkyQ19JVF9USU1FT1VUICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDA0MDAwKQ0KKyNkZWZpbmUgSTJDX0lUX1BFQ0VSUiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDEwMDApDQorI2RlZmluZSBJMkNfSVRfT1ZSICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDgwMCkNCisjZGVmaW5lIEkyQ19JVF9BRiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAxMDAwNDAwKQ0KKyNkZWZpbmUgSTJDX0lUX0FSTE8gICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDEwMDAyMDApDQorI2RlZmluZSBJMkNfSVRfQkVSUiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMTAwMDEwMCkNCisjZGVmaW5lIEkyQ19JVF9UWEUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDA2MDAwMDgwKQ0KKyNkZWZpbmUgSTJDX0lUX1JYTkUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDYwMDAwNDApDQorI2RlZmluZSBJMkNfSVRfU1RPUEYgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAxMCkNCisjZGVmaW5lIEkyQ19JVF9BREQxMCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDA4KQ0KKyNkZWZpbmUgSTJDX0lUX0JURiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDIwMDAwMDQpDQorI2RlZmluZSBJMkNfSVRfQUREUiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMikNCisjZGVmaW5lIEkyQ19JVF9TQiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAxKQ0KKw0KKyNkZWZpbmUgSVNfSTJDX0NMRUFSX0lUKElUKSAoKCgoSVQpICYgKHVpbnQxNl90KTB4MjBGRikgPT0gMHgwMCkgJiYgKChJVCkgIT0gKHVpbnQxNl90KTB4MDApKQ0KKw0KKyNkZWZpbmUgSVNfSTJDX0dFVF9JVChJVCkgKCgoSVQpID09IEkyQ19JVF9TTUJBTEVSVCkgfHwgKChJVCkgPT0gSTJDX0lUX1RJTUVPVVQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBJMkNfSVRfUEVDRVJSKSB8fCAoKElUKSA9PSBJMkNfSVRfT1ZSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gSTJDX0lUX0FGKSB8fCAoKElUKSA9PSBJMkNfSVRfQVJMTykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IEkyQ19JVF9CRVJSKSB8fCAoKElUKSA9PSBJMkNfSVRfVFhFKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gSTJDX0lUX1JYTkUpIHx8ICgoSVQpID09IEkyQ19JVF9TVE9QRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IEkyQ19JVF9BREQxMCkgfHwgKChJVCkgPT0gSTJDX0lUX0JURikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IEkyQ19JVF9BRERSKSB8fCAoKElUKSA9PSBJMkNfSVRfU0IpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEkyQ19mbGFnc19kZWZpbml0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgU1IyIHJlZ2lzdGVyIGZsYWdzICANCisgICovDQorDQorI2RlZmluZSBJMkNfRkxBR19EVUFMRiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkNCisjZGVmaW5lIEkyQ19GTEFHX1NNQkhPU1QgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgSTJDX0ZMQUdfU01CREVGQVVMVCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBJMkNfRkxBR19HRU5DQUxMICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIEkyQ19GTEFHX1RSQSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgSTJDX0ZMQUdfQlVTWSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBJMkNfRkxBR19NU0wgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisNCisvKiogDQorICAqIEBicmllZiAgU1IxIHJlZ2lzdGVyIGZsYWdzICANCisgICovDQorDQorI2RlZmluZSBJMkNfRkxBR19TTUJBTEVSVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwODAwMCkNCisjZGVmaW5lIEkyQ19GTEFHX1RJTUVPVVQgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDA0MDAwKQ0KKyNkZWZpbmUgSTJDX0ZMQUdfUEVDRVJSICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDEwMDApDQorI2RlZmluZSBJMkNfRkxBR19PVlIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDgwMCkNCisjZGVmaW5lIEkyQ19GTEFHX0FGICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwNDAwKQ0KKyNkZWZpbmUgSTJDX0ZMQUdfQVJMTyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAyMDApDQorI2RlZmluZSBJMkNfRkxBR19CRVJSICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDEwMCkNCisjZGVmaW5lIEkyQ19GTEFHX1RYRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDgwKQ0KKyNkZWZpbmUgSTJDX0ZMQUdfUlhORSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwNDApDQorI2RlZmluZSBJMkNfRkxBR19TVE9QRiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAxMCkNCisjZGVmaW5lIEkyQ19GTEFHX0FERDEwICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDA4KQ0KKyNkZWZpbmUgSTJDX0ZMQUdfQlRGICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDQpDQorI2RlZmluZSBJMkNfRkxBR19BRERSICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMikNCisjZGVmaW5lIEkyQ19GTEFHX1NCICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAxKQ0KKw0KKyNkZWZpbmUgSVNfSTJDX0NMRUFSX0ZMQUcoRkxBRykgKCgoKEZMQUcpICYgKHVpbnQxNl90KTB4MjBGRikgPT0gMHgwMCkgJiYgKChGTEFHKSAhPSAodWludDE2X3QpMHgwMCkpDQorDQorI2RlZmluZSBJU19JMkNfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gSTJDX0ZMQUdfRFVBTEYpIHx8ICgoRkxBRykgPT0gSTJDX0ZMQUdfU01CSE9TVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEkyQ19GTEFHX1NNQkRFRkFVTFQpIHx8ICgoRkxBRykgPT0gSTJDX0ZMQUdfR0VOQ0FMTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEkyQ19GTEFHX1RSQSkgfHwgKChGTEFHKSA9PSBJMkNfRkxBR19CVVNZKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gSTJDX0ZMQUdfTVNMKSB8fCAoKEZMQUcpID09IEkyQ19GTEFHX1NNQkFMRVJUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gSTJDX0ZMQUdfVElNRU9VVCkgfHwgKChGTEFHKSA9PSBJMkNfRkxBR19QRUNFUlIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBJMkNfRkxBR19PVlIpIHx8ICgoRkxBRykgPT0gSTJDX0ZMQUdfQUYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBJMkNfRkxBR19BUkxPKSB8fCAoKEZMQUcpID09IEkyQ19GTEFHX0JFUlIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBJMkNfRkxBR19UWEUpIHx8ICgoRkxBRykgPT0gSTJDX0ZMQUdfUlhORSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEkyQ19GTEFHX1NUT1BGKSB8fCAoKEZMQUcpID09IEkyQ19GTEFHX0FERDEwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gSTJDX0ZMQUdfQlRGKSB8fCAoKEZMQUcpID09IEkyQ19GTEFHX0FERFIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBJMkNfRkxBR19TQikpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX0V2ZW50cyANCisgICogQHsNCisgICovDQorDQorLyoqDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICBJMkMgTWFzdGVyIEV2ZW50cyAoRXZlbnRzIGdyb3VwZWQgaW4gb3JkZXIgb2YgY29tbXVuaWNhdGlvbikNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBDb21tdW5pY2F0aW9uIHN0YXJ0DQorICAqIA0KKyAgKiBBZnRlciBzZW5kaW5nIHRoZSBTVEFSVCBjb25kaXRpb24gKEkyQ19HZW5lcmF0ZVNUQVJUKCkgZnVuY3Rpb24pIHRoZSBtYXN0ZXIgDQorICAqIGhhcyB0byB3YWl0IGZvciB0aGlzIGV2ZW50LiBJdCBtZWFucyB0aGF0IHRoZSBTdGFydCBjb25kaXRpb24gaGFzIGJlZW4gY29ycmVjdGx5IA0KKyAgKiByZWxlYXNlZCBvbiB0aGUgSTJDIGJ1cyAodGhlIGJ1cyBpcyBmcmVlLCBubyBvdGhlciBkZXZpY2VzIGlzIGNvbW11bmljYXRpbmcpLg0KKyAgKiANCisgICovDQorLyogLS1FVjUgKi8NCisjZGVmaW5lICBJMkNfRVZFTlRfTUFTVEVSX01PREVfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAzMDAwMSkgIC8qIEJVU1ksIE1TTCBhbmQgU0IgZmxhZyAqLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBBZGRyZXNzIEFja25vd2xlZGdlDQorICAqIA0KKyAgKiBBZnRlciBjaGVja2luZyBvbiBFVjUgKHN0YXJ0IGNvbmRpdGlvbiBjb3JyZWN0bHkgcmVsZWFzZWQgb24gdGhlIGJ1cyksIHRoZSANCisgICogbWFzdGVyIHNlbmRzIHRoZSBhZGRyZXNzIG9mIHRoZSBzbGF2ZShzKSB3aXRoIHdoaWNoIGl0IHdpbGwgY29tbXVuaWNhdGUgDQorICAqIChJMkNfU2VuZDdiaXRBZGRyZXNzKCkgZnVuY3Rpb24sIGl0IGFsc28gZGV0ZXJtaW5lcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uOiANCisgICogTWFzdGVyIHRyYW5zbWl0dGVyIG9yIFJlY2VpdmVyKS4gVGhlbiB0aGUgbWFzdGVyIGhhcyB0byB3YWl0IHRoYXQgYSBzbGF2ZSBhY2tub3dsZWRnZXMgDQorICAqIGhpcyBhZGRyZXNzLiBJZiBhbiBhY2tub3dsZWRnZSBpcyBzZW50IG9uIHRoZSBidXMsIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cyB3aWxsIA0KKyAgKiBiZSBzZXQ6DQorICAqIA0KKyAgKiAgMSkgSW4gY2FzZSBvZiBNYXN0ZXIgUmVjZWl2ZXIgKDctYml0IGFkZHJlc3NpbmcpOiB0aGUgSTJDX0VWRU5UX01BU1RFUl9SRUNFSVZFUl9NT0RFX1NFTEVDVEVEIA0KKyAgKiAgICAgZXZlbnQgaXMgc2V0Lg0KKyAgKiAgDQorICAqICAyKSBJbiBjYXNlIG9mIE1hc3RlciBUcmFuc21pdHRlciAoNy1iaXQgYWRkcmVzc2luZyk6IHRoZSBJMkNfRVZFTlRfTUFTVEVSX1RSQU5TTUlUVEVSX01PREVfU0VMRUNURUQgDQorICAqICAgICBpcyBzZXQNCisgICogIA0KKyAgKiAgMykgSW4gY2FzZSBvZiAxMC1CaXQgYWRkcmVzc2luZyBtb2RlLCB0aGUgbWFzdGVyIChqdXN0IGFmdGVyIGdlbmVyYXRpbmcgdGhlIFNUQVJUIA0KKyAgKiAgYW5kIGNoZWNraW5nIG9uIEVWNSkgaGFzIHRvIHNlbmQgdGhlIGhlYWRlciBvZiAxMC1iaXQgYWRkcmVzc2luZyBtb2RlIChJMkNfU2VuZERhdGEoKSANCisgICogIGZ1bmN0aW9uKS4gVGhlbiBtYXN0ZXIgc2hvdWxkIHdhaXQgb24gRVY5LiBJdCBtZWFucyB0aGF0IHRoZSAxMC1iaXQgYWRkcmVzc2luZyANCisgICogIGhlYWRlciBoYXMgYmVlbiBjb3JyZWN0bHkgc2VudCBvbiB0aGUgYnVzLiBUaGVuIG1hc3RlciBzaG91bGQgc2VuZCB0aGUgc2Vjb25kIHBhcnQgb2YgDQorICAqICB0aGUgMTAtYml0IGFkZHJlc3MgKExTQikgdXNpbmcgdGhlIGZ1bmN0aW9uIEkyQ19TZW5kN2JpdEFkZHJlc3MoKS4gVGhlbiBtYXN0ZXIgDQorICAqICBzaG91bGQgd2FpdCBmb3IgZXZlbnQgRVY2LiANCisgICogICAgIA0KKyAgKi8NCisNCisvKiAtLUVWNiAqLw0KKyNkZWZpbmUgIEkyQ19FVkVOVF9NQVNURVJfVFJBTlNNSVRURVJfTU9ERV9TRUxFQ1RFRCAgICAgICAgKCh1aW50MzJfdCkweDAwMDcwMDgyKSAgLyogQlVTWSwgTVNMLCBBRERSLCBUWEUgYW5kIFRSQSBmbGFncyAqLw0KKyNkZWZpbmUgIEkyQ19FVkVOVF9NQVNURVJfUkVDRUlWRVJfTU9ERV9TRUxFQ1RFRCAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDAyKSAgLyogQlVTWSwgTVNMIGFuZCBBRERSIGZsYWdzICovDQorLyogLS1FVjkgKi8NCisjZGVmaW5lICBJMkNfRVZFTlRfTUFTVEVSX01PREVfQUREUkVTUzEwICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAzMDAwOCkgIC8qIEJVU1ksIE1TTCBhbmQgQUREMTAgZmxhZ3MgKi8NCisNCisvKiogDQorICAqIEBicmllZiBDb21tdW5pY2F0aW9uIGV2ZW50cw0KKyAgKiANCisgICogSWYgYSBjb21tdW5pY2F0aW9uIGlzIGVzdGFibGlzaGVkIChTVEFSVCBjb25kaXRpb24gZ2VuZXJhdGVkIGFuZCBzbGF2ZSBhZGRyZXNzIA0KKyAgKiBhY2tub3dsZWRnZWQpIHRoZW4gdGhlIG1hc3RlciBoYXMgdG8gY2hlY2sgb24gb25lIG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzIGZvciANCisgICogY29tbXVuaWNhdGlvbiBwcm9jZWR1cmVzOg0KKyAgKiAgDQorICAqIDEpIE1hc3RlciBSZWNlaXZlciBtb2RlOiBUaGUgbWFzdGVyIGhhcyB0byB3YWl0IG9uIHRoZSBldmVudCBFVjcgdGhlbiB0byByZWFkIA0KKyAgKiAgICB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBzbGF2ZSAoSTJDX1JlY2VpdmVEYXRhKCkgZnVuY3Rpb24pLg0KKyAgKiANCisgICogMikgTWFzdGVyIFRyYW5zbWl0dGVyIG1vZGU6IFRoZSBtYXN0ZXIgaGFzIHRvIHNlbmQgZGF0YSAoSTJDX1NlbmREYXRhKCkgDQorICAqICAgIGZ1bmN0aW9uKSB0aGVuIHRvIHdhaXQgb24gZXZlbnQgRVY4IG9yIEVWOF8yLg0KKyAgKiAgICBUaGVzZSB0d28gZXZlbnRzIGFyZSBzaW1pbGFyOiANCisgICogICAgIC0gRVY4IG1lYW5zIHRoYXQgdGhlIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiBpbiB0aGUgZGF0YSByZWdpc3RlciBhbmQgaXMgDQorICAqICAgICAgIGJlaW5nIHNoaWZ0ZWQgb3V0Lg0KKyAgKiAgICAgLSBFVjhfMiBtZWFucyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHBoeXNpY2FsbHkgc2hpZnRlZCBvdXQgYW5kIG91dHB1dCANCisgICogICAgICAgb24gdGhlIGJ1cy4NCisgICogICAgIEluIG1vc3QgY2FzZXMsIHVzaW5nIEVWOCBpcyBzdWZmaWNpZW50IGZvciB0aGUgYXBwbGljYXRpb24uDQorICAqICAgICBVc2luZyBFVjhfMiBsZWFkcyB0byBhIHNsb3dlciBjb21tdW5pY2F0aW9uIGJ1dCBlbnN1cmUgbW9yZSByZWxpYWJsZSB0ZXN0Lg0KKyAgKiAgICAgRVY4XzIgaXMgYWxzbyBtb3JlIHN1aXRhYmxlIHRoYW4gRVY4IGZvciB0ZXN0aW5nIG9uIHRoZSBsYXN0IGRhdGEgdHJhbnNtaXNzaW9uIA0KKyAgKiAgICAgKGJlZm9yZSBTdG9wIGNvbmRpdGlvbiBnZW5lcmF0aW9uKS4NCisgICogICAgIA0KKyAgKiAgQG5vdGUgSW4gY2FzZSB0aGUgIHVzZXIgc29mdHdhcmUgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhpcyBldmVudCBFVjcgaXMgDQorICAqICAgICAgICBtYW5hZ2VkIGJlZm9yZSB0aGUgY3VycmVudCBieXRlIGVuZCBvZiB0cmFuc2ZlciwgdGhlbiB1c2VyIG1heSBjaGVjayBvbiBFVjcgDQorICAqICAgICAgICBhbmQgQlRGIGZsYWcgYXQgdGhlIHNhbWUgdGltZSAoaWUuIChJMkNfRVZFTlRfTUFTVEVSX0JZVEVfUkVDRUlWRUQgfCBJMkNfRkxBR19CVEYpKS4NCisgICogICAgICAgIEluIHRoaXMgY2FzZSB0aGUgY29tbXVuaWNhdGlvbiBtYXkgYmUgc2xvd2VyLg0KKyAgKiANCisgICovDQorDQorLyogTWFzdGVyIFJFQ0VJVkVSIG1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyANCisvKiAtLUVWNyAqLw0KKyNkZWZpbmUgIEkyQ19FVkVOVF9NQVNURVJfQllURV9SRUNFSVZFRCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDMwMDQwKSAgLyogQlVTWSwgTVNMIGFuZCBSWE5FIGZsYWdzICovDQorDQorLyogTWFzdGVyIFRSQU5TTUlUVEVSIG1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIC0tRVY4ICovDQorI2RlZmluZSBJMkNfRVZFTlRfTUFTVEVSX0JZVEVfVFJBTlNNSVRUSU5HICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNzAwODApIC8qIFRSQSwgQlVTWSwgTVNMLCBUWEUgZmxhZ3MgKi8NCisvKiAtLUVWOF8yICovDQorI2RlZmluZSAgSTJDX0VWRU5UX01BU1RFUl9CWVRFX1RSQU5TTUlUVEVEICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNzAwODQpICAvKiBUUkEsIEJVU1ksIE1TTCwgVFhFIGFuZCBCVEYgZmxhZ3MgKi8NCisNCisNCisvKioNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgIEkyQyBTbGF2ZSBFdmVudHMgKEV2ZW50cyBncm91cGVkIGluIG9yZGVyIG9mIGNvbW11bmljYXRpb24pDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKi8NCisNCisNCisvKiogDQorICAqIEBicmllZiAgQ29tbXVuaWNhdGlvbiBzdGFydCBldmVudHMNCisgICogDQorICAqIFdhaXQgb24gb25lIG9mIHRoZXNlIGV2ZW50cyBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbW11bmljYXRpb24uIEl0IG1lYW5zIHRoYXQgDQorICAqIHRoZSBJMkMgcGVyaXBoZXJhbCBkZXRlY3RlZCBhIFN0YXJ0IGNvbmRpdGlvbiBvbiB0aGUgYnVzIChnZW5lcmF0ZWQgYnkgbWFzdGVyIA0KKyAgKiBkZXZpY2UpIGZvbGxvd2VkIGJ5IHRoZSBwZXJpcGhlcmFsIGFkZHJlc3MuIFRoZSBwZXJpcGhlcmFsIGdlbmVyYXRlcyBhbiBBQ0sgDQorICAqIGNvbmRpdGlvbiBvbiB0aGUgYnVzIChpZiB0aGUgYWNrbm93bGVkZ2UgZmVhdHVyZSBpcyBlbmFibGVkIHRocm91Z2ggZnVuY3Rpb24gDQorICAqIEkyQ19BY2tub3dsZWRnZUNvbmZpZygpKSBhbmQgdGhlIGV2ZW50cyBsaXN0ZWQgYWJvdmUgYXJlIHNldCA6DQorICAqICANCisgICogMSkgSW4gbm9ybWFsIGNhc2UgKG9ubHkgb25lIGFkZHJlc3MgbWFuYWdlZCBieSB0aGUgc2xhdmUpLCB3aGVuIHRoZSBhZGRyZXNzIA0KKyAgKiAgIHNlbnQgYnkgdGhlIG1hc3RlciBtYXRjaGVzIHRoZSBvd24gYWRkcmVzcyBvZiB0aGUgcGVyaXBoZXJhbCAoY29uZmlndXJlZCBieSANCisgICogICBJMkNfT3duQWRkcmVzczEgZmllbGQpIHRoZSBJMkNfRVZFTlRfU0xBVkVfWFhYX0FERFJFU1NfTUFUQ0hFRCBldmVudCBpcyBzZXQgDQorICAqICAgKHdoZXJlIFhYWCBjb3VsZCBiZSBUUkFOU01JVFRFUiBvciBSRUNFSVZFUikuDQorICAqICAgIA0KKyAgKiAyKSBJbiBjYXNlIHRoZSBhZGRyZXNzIHNlbnQgYnkgdGhlIG1hc3RlciBtYXRjaGVzIHRoZSBzZWNvbmQgYWRkcmVzcyBvZiB0aGUgDQorICAqICAgcGVyaXBoZXJhbCAoY29uZmlndXJlZCBieSB0aGUgZnVuY3Rpb24gSTJDX093bkFkZHJlc3MyQ29uZmlnKCkgYW5kIGVuYWJsZWQgDQorICAqICAgYnkgdGhlIGZ1bmN0aW9uIEkyQ19EdWFsQWRkcmVzc0NtZCgpKSB0aGUgZXZlbnRzIEkyQ19FVkVOVF9TTEFWRV9YWFhfU0VDT05EQUREUkVTU19NQVRDSEVEIA0KKyAgKiAgICh3aGVyZSBYWFggY291bGQgYmUgVFJBTlNNSVRURVIgb3IgUkVDRUlWRVIpIGFyZSBzZXQuDQorICAqICAgDQorICAqIDMpIEluIGNhc2UgdGhlIGFkZHJlc3Mgc2VudCBieSB0aGUgbWFzdGVyIGlzIEdlbmVyYWwgQ2FsbCAoYWRkcmVzcyAweDAwKSBhbmQgDQorICAqICAgaWYgdGhlIEdlbmVyYWwgQ2FsbCBpcyBlbmFibGVkIGZvciB0aGUgcGVyaXBoZXJhbCAodXNpbmcgZnVuY3Rpb24gSTJDX0dlbmVyYWxDYWxsQ21kKCkpIA0KKyAgKiAgIHRoZSBmb2xsb3dpbmcgZXZlbnQgaXMgc2V0IEkyQ19FVkVOVF9TTEFWRV9HRU5FUkFMQ0FMTEFERFJFU1NfTUFUQ0hFRC4gICANCisgICogDQorICAqLw0KKw0KKy8qIC0tRVYxICAoYWxsIHRoZSBldmVudHMgYmVsb3cgYXJlIHZhcmlhbnRzIG9mIEVWMSkgKi8gICANCisvKiAxKSBDYXNlIG9mIE9uZSBTaW5nbGUgQWRkcmVzcyBtYW5hZ2VkIGJ5IHRoZSBzbGF2ZSAqLw0KKyNkZWZpbmUgIEkyQ19FVkVOVF9TTEFWRV9SRUNFSVZFUl9BRERSRVNTX01BVENIRUQgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAyKSAvKiBCVVNZIGFuZCBBRERSIGZsYWdzICovDQorI2RlZmluZSAgSTJDX0VWRU5UX1NMQVZFX1RSQU5TTUlUVEVSX0FERFJFU1NfTUFUQ0hFRCAgICAgICAoKHVpbnQzMl90KTB4MDAwNjAwODIpIC8qIFRSQSwgQlVTWSwgVFhFIGFuZCBBRERSIGZsYWdzICovDQorDQorLyogMikgQ2FzZSBvZiBEdWFsIGFkZHJlc3MgbWFuYWdlZCBieSB0aGUgc2xhdmUgKi8NCisjZGVmaW5lICBJMkNfRVZFTlRfU0xBVkVfUkVDRUlWRVJfU0VDT05EQUREUkVTU19NQVRDSEVEICAgICgodWludDMyX3QpMHgwMDgyMDAwMCkgIC8qIERVQUxGIGFuZCBCVVNZIGZsYWdzICovDQorI2RlZmluZSAgSTJDX0VWRU5UX1NMQVZFX1RSQU5TTUlUVEVSX1NFQ09OREFERFJFU1NfTUFUQ0hFRCAoKHVpbnQzMl90KTB4MDA4NjAwODApICAvKiBEVUFMRiwgVFJBLCBCVVNZIGFuZCBUWEUgZmxhZ3MgKi8NCisNCisvKiAzKSBDYXNlIG9mIEdlbmVyYWwgQ2FsbCBlbmFibGVkIGZvciB0aGUgc2xhdmUgKi8NCisjZGVmaW5lICBJMkNfRVZFTlRfU0xBVkVfR0VORVJBTENBTExBRERSRVNTX01BVENIRUQgICAgICAgICgodWludDMyX3QpMHgwMDEyMDAwMCkgIC8qIEdFTkNBTEwgYW5kIEJVU1kgZmxhZ3MgKi8NCisNCisvKiogDQorICAqIEBicmllZiAgQ29tbXVuaWNhdGlvbiBldmVudHMNCisgICogDQorICAqIFdhaXQgb24gb25lIG9mIHRoZXNlIGV2ZW50cyB3aGVuIEVWMSBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgYW5kOiANCisgICogDQorICAqIC0gU2xhdmUgUkVDRUlWRVIgbW9kZToNCisgICogICAgIC0gRVYyOiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgYSBkYXRhIGJ5dGUgdG8gYmUgcmVjZWl2ZWQuIA0KKyAgKiAgICAgLSBFVjQ6IFdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGluZyB0aGUgZW5kIG9mIHRoZSBjb21tdW5pY2F0aW9uOiBtYXN0ZXIgDQorICAqICAgICAgIHNlbmRzIGEgc3RvcCBjb25kaXRpb24gYW5kIGRhdGEgdHJhbnNtaXNzaW9uIGlzIHN0b3BwZWQuDQorICAqICAgIA0KKyAgKiAtIFNsYXZlIFRyYW5zbWl0dGVyIG1vZGU6DQorICAqICAgIC0gRVYzOiBXaGVuIGEgYnl0ZSBoYXMgYmVlbiB0cmFuc21pdHRlZCBieSB0aGUgc2xhdmUgYW5kIHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RpbmcgDQorICAqICAgICAgdGhlIGVuZCBvZiB0aGUgYnl0ZSB0cmFuc21pc3Npb24uIFRoZSB0d28gZXZlbnRzIEkyQ19FVkVOVF9TTEFWRV9CWVRFX1RSQU5TTUlUVEVEIGFuZA0KKyAgKiAgICAgIEkyQ19FVkVOVF9TTEFWRV9CWVRFX1RSQU5TTUlUVElORyBhcmUgc2ltaWxhci4gVGhlIHNlY29uZCBvbmUgY2FuIG9wdGlvbmFsbHkgYmUgDQorICAqICAgICAgdXNlZCB3aGVuIHRoZSB1c2VyIHNvZnR3YXJlIGRvZXNuJ3QgZ3VhcmFudGVlIHRoZSBFVjMgaXMgbWFuYWdlZCBiZWZvcmUgdGhlDQorICAqICAgICAgY3VycmVudCBieXRlIGVuZCBvZiB0cmFuc2Zlci4NCisgICogICAgLSBFVjNfMjogV2hlbiB0aGUgbWFzdGVyIHNlbmRzIGEgTkFDSyBpbiBvcmRlciB0byB0ZWxsIHNsYXZlIHRoYXQgZGF0YSB0cmFuc21pc3Npb24gDQorICAqICAgICAgc2hhbGwgZW5kIChiZWZvcmUgc2VuZGluZyB0aGUgU1RPUCBjb25kaXRpb24pLiBJbiB0aGlzIGNhc2Ugc2xhdmUgaGFzIHRvIHN0b3Agc2VuZGluZyANCisgICogICAgICBkYXRhIGJ5dGVzIGFuZCBleHBlY3QgYSBTdG9wIGNvbmRpdGlvbiBvbiB0aGUgYnVzLg0KKyAgKiAgICAgIA0KKyAgKiAgQG5vdGUgSW4gY2FzZSB0aGUgIHVzZXIgc29mdHdhcmUgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGV2ZW50IEVWMiBpcyANCisgICogICAgICAgIG1hbmFnZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJ5dGUgZW5kIG9mIHRyYW5zZmVyLCB0aGVuIHVzZXIgbWF5IGNoZWNrIG9uIEVWMiANCisgICogICAgICAgIGFuZCBCVEYgZmxhZyBhdCB0aGUgc2FtZSB0aW1lIChpZS4gKEkyQ19FVkVOVF9TTEFWRV9CWVRFX1JFQ0VJVkVEIHwgSTJDX0ZMQUdfQlRGKSkuDQorICAqICAgICAgICBJbiB0aGlzIGNhc2UgdGhlIGNvbW11bmljYXRpb24gbWF5IGJlIHNsb3dlci4NCisgICoNCisgICovDQorDQorLyogU2xhdmUgUkVDRUlWRVIgbW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKy8qIC0tRVYyICovDQorI2RlZmluZSAgSTJDX0VWRU5UX1NMQVZFX0JZVEVfUkVDRUlWRUQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwNDApICAvKiBCVVNZIGFuZCBSWE5FIGZsYWdzICovDQorLyogLS1FVjQgICovDQorI2RlZmluZSAgSTJDX0VWRU5UX1NMQVZFX1NUT1BfREVURUNURUQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApICAvKiBTVE9QRiBmbGFnICovDQorDQorLyogU2xhdmUgVFJBTlNNSVRURVIgbW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogLS1FVjMgKi8NCisjZGVmaW5lICBJMkNfRVZFTlRfU0xBVkVfQllURV9UUkFOU01JVFRFRCAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA2MDA4NCkgIC8qIFRSQSwgQlVTWSwgVFhFIGFuZCBCVEYgZmxhZ3MgKi8NCisjZGVmaW5lICBJMkNfRVZFTlRfU0xBVkVfQllURV9UUkFOU01JVFRJTkcgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA2MDA4MCkgIC8qIFRSQSwgQlVTWSBhbmQgVFhFIGZsYWdzICovDQorLyogLS1FVjNfMiAqLw0KKyNkZWZpbmUgIEkyQ19FVkVOVF9TTEFWRV9BQ0tfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSAgLyogQUYgZmxhZyAqLw0KKw0KKy8qDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZCBvZiBFdmVudHMgRGVzY3JpcHRpb24NCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqLw0KKw0KKyNkZWZpbmUgSVNfSTJDX0VWRU5UKEVWRU5UKSAoKChFVkVOVCkgPT0gSTJDX0VWRU5UX1NMQVZFX1RSQU5TTUlUVEVSX0FERFJFU1NfTUFUQ0hFRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gSTJDX0VWRU5UX1NMQVZFX1JFQ0VJVkVSX0FERFJFU1NfTUFUQ0hFRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gSTJDX0VWRU5UX1NMQVZFX1RSQU5TTUlUVEVSX1NFQ09OREFERFJFU1NfTUFUQ0hFRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gSTJDX0VWRU5UX1NMQVZFX1JFQ0VJVkVSX1NFQ09OREFERFJFU1NfTUFUQ0hFRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gSTJDX0VWRU5UX1NMQVZFX0dFTkVSQUxDQUxMQUREUkVTU19NQVRDSEVEKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVWRU5UKSA9PSBJMkNfRVZFTlRfU0xBVkVfQllURV9SRUNFSVZFRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gKEkyQ19FVkVOVF9TTEFWRV9CWVRFX1JFQ0VJVkVEIHwgSTJDX0ZMQUdfRFVBTEYpKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVWRU5UKSA9PSAoSTJDX0VWRU5UX1NMQVZFX0JZVEVfUkVDRUlWRUQgfCBJMkNfRkxBR19HRU5DQUxMKSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gSTJDX0VWRU5UX1NMQVZFX0JZVEVfVFJBTlNNSVRURUQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVZFTlQpID09IChJMkNfRVZFTlRfU0xBVkVfQllURV9UUkFOU01JVFRFRCB8IEkyQ19GTEFHX0RVQUxGKSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gKEkyQ19FVkVOVF9TTEFWRV9CWVRFX1RSQU5TTUlUVEVEIHwgSTJDX0ZMQUdfR0VOQ0FMTCkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVZFTlQpID09IEkyQ19FVkVOVF9TTEFWRV9TVE9QX0RFVEVDVEVEKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVWRU5UKSA9PSBJMkNfRVZFTlRfTUFTVEVSX01PREVfU0VMRUNUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVWRU5UKSA9PSBJMkNfRVZFTlRfTUFTVEVSX1RSQU5TTUlUVEVSX01PREVfU0VMRUNURUQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVZFTlQpID09IEkyQ19FVkVOVF9NQVNURVJfUkVDRUlWRVJfTU9ERV9TRUxFQ1RFRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gSTJDX0VWRU5UX01BU1RFUl9CWVRFX1JFQ0VJVkVEKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVWRU5UKSA9PSBJMkNfRVZFTlRfTUFTVEVSX0JZVEVfVFJBTlNNSVRURUQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVZFTlQpID09IEkyQ19FVkVOVF9NQVNURVJfQllURV9UUkFOU01JVFRJTkcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVZFTlQpID09IEkyQ19FVkVOVF9NQVNURVJfTU9ERV9BRERSRVNTMTApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVZFTlQpID09IEkyQ19FVkVOVF9TTEFWRV9BQ0tfRkFJTFVSRSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX293bl9hZGRyZXNzMSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJU19JMkNfT1dOX0FERFJFU1MxKEFERFJFU1MxKSAoKEFERFJFU1MxKSA8PSAweDNGRikNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJMkNfY2xvY2tfc3BlZWQgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSVNfSTJDX0NMT0NLX1NQRUVEKFNQRUVEKSAoKChTUEVFRCkgPj0gMHgxKSAmJiAoKFNQRUVEKSA8PSA0MDAwMDApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyANCisNCisvKiAgRnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIEkyQyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKioqLw0KK3ZvaWQgSTJDX0RlSW5pdChJMkNfVHlwZURlZiogSTJDeCk7DQorDQorLyogSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIEkyQ19Jbml0KEkyQ19UeXBlRGVmKiBJMkN4LCBJMkNfSW5pdFR5cGVEZWYqIEkyQ19Jbml0U3RydWN0KTsNCit2b2lkIEkyQ19TdHJ1Y3RJbml0KEkyQ19Jbml0VHlwZURlZiogSTJDX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgSTJDX0NtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19HZW5lcmF0ZVNUQVJUKEkyQ19UeXBlRGVmKiBJMkN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgSTJDX0dlbmVyYXRlU1RPUChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19TZW5kN2JpdEFkZHJlc3MoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQ4X3QgQWRkcmVzcywgdWludDhfdCBJMkNfRGlyZWN0aW9uKTsNCit2b2lkIEkyQ19BY2tub3dsZWRnZUNvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19Pd25BZGRyZXNzMkNvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDhfdCBBZGRyZXNzKTsNCit2b2lkIEkyQ19EdWFsQWRkcmVzc0NtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19HZW5lcmFsQ2FsbENtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19Tb2Z0d2FyZVJlc2V0Q21kKEkyQ19UeXBlRGVmKiBJMkN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgSTJDX1N0cmV0Y2hDbG9ja0NtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19GYXN0TW9kZUR1dHlDeWNsZUNvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDE2X3QgSTJDX0R1dHlDeWNsZSk7DQordm9pZCBJMkNfTkFDS1Bvc2l0aW9uQ29uZmlnKEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50MTZfdCBJMkNfTkFDS1Bvc2l0aW9uKTsNCit2b2lkIEkyQ19TTUJ1c0FsZXJ0Q29uZmlnKEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50MTZfdCBJMkNfU01CdXNBbGVydCk7DQordm9pZCBJMkNfQVJQQ21kKEkyQ19UeXBlRGVmKiBJMkN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIA0KK3ZvaWQgSTJDX1NlbmREYXRhKEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50OF90IERhdGEpOw0KK3VpbnQ4X3QgSTJDX1JlY2VpdmVEYXRhKEkyQ19UeXBlRGVmKiBJMkN4KTsNCisNCisvKiBQRUMgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIEkyQ19UcmFuc21pdFBFQyhJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19QRUNQb3NpdGlvbkNvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDE2X3QgSTJDX1BFQ1Bvc2l0aW9uKTsNCit2b2lkIEkyQ19DYWxjdWxhdGVQRUMoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordWludDhfdCBJMkNfR2V0UEVDKEkyQ19UeXBlRGVmKiBJMkN4KTsNCisNCisvKiBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgSTJDX0RNQUNtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyQ19ETUFMYXN0VHJhbnNmZXJDbWQoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogSW50ZXJydXB0cywgZXZlbnRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit1aW50MTZfdCBJMkNfUmVhZFJlZ2lzdGVyKEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50OF90IEkyQ19SZWdpc3Rlcik7DQordm9pZCBJMkNfSVRDb25maWcoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQxNl90IEkyQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDIFN0YXRlIE1vbml0b3JpbmcgRnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgIFRoaXMgSTJDIGRyaXZlciBwcm92aWRlcyB0aHJlZSBkaWZmZXJlbnQgd2F5cyBmb3IgSTJDIHN0YXRlIG1vbml0b3JpbmcNCisgIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBjb25zdHJhaW50czoNCisgICAgICAgICANCisgICANCisgICAgIDEuIEJhc2ljIHN0YXRlIG1vbml0b3JpbmcgKFVzaW5nIEkyQ19DaGVja0V2ZW50KCkgZnVuY3Rpb24pDQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgSXQgY29tcGFyZXMgdGhlIHN0YXR1cyByZWdpc3RlcnMgKFNSMSBhbmQgU1IyKSBjb250ZW50IHRvIGEgZ2l2ZW4gZXZlbnQNCisgICAgICAgIChjYW4gYmUgdGhlIGNvbWJpbmF0aW9uIG9mIG9uZSBvciBtb3JlIGZsYWdzKS4NCisgICAgICAgIEl0IHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgY3VycmVudCBzdGF0dXMgaW5jbHVkZXMgdGhlIGdpdmVuIGZsYWdzIA0KKyAgICAgICAgYW5kIHJldHVybnMgRVJST1IgaWYgb25lIG9yIG1vcmUgZmxhZ3MgYXJlIG1pc3NpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdHVzLg0KKw0KKyAgICAgICAgICAtIFdoZW4gdG8gdXNlDQorICAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBzdWl0YWJsZSBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcyBmb3Igc3RhcnR1cCANCisgICAgICAgICAgICAgICBhY3Rpdml0eSBzaW5jZSB0aGUgZXZlbnRzIGFyZSBmdWxseSBkZXNjcmliZWQgaW4gdGhlIHByb2R1Y3QgcmVmZXJlbmNlIA0KKyAgICAgICAgICAgICAgIG1hbnVhbCAoUk0wMDMzKS4NCisgICAgICAgICAgICAgLSBJdCBpcyBhbHNvIHN1aXRhYmxlIGZvciB1c2VycyB3aG8gbmVlZCB0byBkZWZpbmUgdGhlaXIgb3duIGV2ZW50cy4NCisNCisgICAgICAgICAgLSBMaW1pdGF0aW9ucw0KKyAgICAgICAgICAgICAtIElmIGFuIGVycm9yIG9jY3VycyAoaWUuIGVycm9yIGZsYWdzIGFyZSBzZXQgYmVzaWRlcyB0byB0aGUgbW9uaXRvcmVkIA0KKyAgICAgICAgICAgICAgIGZsYWdzKSwgdGhlIEkyQ19DaGVja0V2ZW50KCkgZnVuY3Rpb24gbWF5IHJldHVybiBTVUNDRVNTIGRlc3BpdGUgDQorICAgICAgICAgICAgICAgdGhlIGNvbW11bmljYXRpb24gaG9sZCBvciBjb3JydXB0ZWQgcmVhbCBzdGF0ZS4gDQorICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBpdCBpcyBhZHZpc2VkIHRvIHVzZSBlcnJvciBpbnRlcnJ1cHRzIHRvIG1vbml0b3IgDQorICAgICAgICAgICAgICAgdGhlIGVycm9yIGV2ZW50cyBhbmQgaGFuZGxlIHRoZW0gaW4gdGhlIGludGVycnVwdCBJUlEgaGFuZGxlci4NCisgICAgICAgICANCisgICAgIE5vdGUgDQorICAgICAgICAgRm9yIGVycm9yIG1hbmFnZW1lbnQsIGl0IGlzIGFkdmlzZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgICAgICAgICAgLSBJMkNfSVRDb25maWcoKSB0byBjb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgZXJyb3IgaW50ZXJydXB0cyAoSTJDX0lUX0VSUikuDQorICAgICAgICAgICAtIEkyQ3hfRVJfSVJRSGFuZGxlcigpIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBlcnJvciBpbnRlcnJ1cHQgb2NjdXJzLg0KKyAgICAgICAgICAgICBXaGVyZSB4IGlzIHRoZSBwZXJpcGhlcmFsIGluc3RhbmNlIChJMkMxLCBJMkMyIC4uLikNCisgICAgICAgICAgIC0gSTJDX0dldEZsYWdTdGF0dXMoKSBvciBJMkNfR2V0SVRTdGF0dXMoKSAgdG8gYmUgY2FsbGVkIGludG8gdGhlIA0KKyAgICAgICAgICAgICBJMkN4X0VSX0lSUUhhbmRsZXIoKSBmdW5jdGlvbiBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hpY2ggZXJyb3Igb2NjdXJyZWQuDQorICAgICAgICAgICAtIEkyQ19DbGVhckZsYWcoKSBvciBJMkNfQ2xlYXJJVFBlbmRpbmdCaXQoKSBhbmQvb3IgSTJDX1NvZnR3YXJlUmVzZXRDbWQoKSANCisgICAgICAgICAgICAgYW5kL29yIEkyQ19HZW5lcmF0ZVN0b3AoKSBpbiBvcmRlciB0byBjbGVhciB0aGUgZXJyb3IgZmxhZyBhbmQgc291cmNlIA0KKyAgICAgICAgICAgICBhbmQgcmV0dXJuIHRvIGNvcnJlY3QgIGNvbW11bmljYXRpb24gc3RhdHVzLg0KKyAgICAgICAgICAgICANCisgDQorICAgICAyLiBBZHZhbmNlZCBzdGF0ZSBtb25pdG9yaW5nIChVc2luZyB0aGUgZnVuY3Rpb24gSTJDX0dldExhc3RFdmVudCgpKQ0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gDQorICAgICAgICBVc2luZyB0aGUgZnVuY3Rpb24gSTJDX0dldExhc3RFdmVudCgpIHdoaWNoIHJldHVybnMgdGhlIGltYWdlIG9mIGJvdGggc3RhdHVzIA0KKyAgICAgICAgcmVnaXN0ZXJzIGluIGEgc2luZ2xlIHdvcmQgKHVpbnQzMl90KSAoU3RhdHVzIFJlZ2lzdGVyIDIgdmFsdWUgaXMgc2hpZnRlZCBsZWZ0IA0KKyAgICAgICAgYnkgMTYgYml0cyBhbmQgY29uY2F0ZW5hdGVkIHRvIFN0YXR1cyBSZWdpc3RlciAxKS4NCisNCisgICAgICAgICAgLSBXaGVuIHRvIHVzZQ0KKyAgICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgc3VpdGFibGUgZm9yIHRoZSBzYW1lIGFwcGxpY2F0aW9ucyBhYm92ZSBidXQgaXQgDQorICAgICAgICAgICAgICAgYWxsb3dzIHRvIG92ZXJjb21lIHRoZSBtZW50aW9uZWQgbGltaXRhdGlvbiBvZiBJMkNfR2V0RmxhZ1N0YXR1cygpIA0KKyAgICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgICAgICAgICAgICAtIFRoZSByZXR1cm5lZCB2YWx1ZSBjb3VsZCBiZSBjb21wYXJlZCB0byBldmVudHMgYWxyZWFkeSBkZWZpbmVkIGluIA0KKyAgICAgICAgICAgICAgIHRoaXMgZmlsZSBvciB0byBjdXN0b20gdmFsdWVzIGRlZmluZWQgYnkgdXNlci4NCisgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHN1aXRhYmxlIHdoZW4gbXVsdGlwbGUgZmxhZ3MgYXJlIG1vbml0b3JlZCBhdCB0aGUgDQorICAgICAgICAgICAgICAgc2FtZSB0aW1lLg0KKyAgICAgICAgICAgICAtIEF0IHRoZSBvcHBvc2l0ZSBvZiBJMkNfQ2hlY2tFdmVudCgpIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uIGFsbG93cyANCisgICAgICAgICAgICAgICB1c2VyIHRvIGNob29zZSB3aGVuIGFuIGV2ZW50IGlzIGFjY2VwdGVkICh3aGVuIGFsbCBldmVudHMgZmxhZ3MgYXJlIA0KKyAgICAgICAgICAgICAgIHNldCBhbmQgbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBvciBqdXN0IHdoZW4gdGhlIG5lZWRlZCBmbGFncyBhcmUgc2V0IA0KKyAgICAgICAgICAgICAgIGxpa2UgSTJDX0NoZWNrRXZlbnQoKSBmdW5jdGlvbi4NCisNCisgICAgICAgICAgLSBMaW1pdGF0aW9ucw0KKyAgICAgICAgICAgICAtIFVzZXIgbWF5IG5lZWQgdG8gZGVmaW5lIGhpcyBvd24gZXZlbnRzLg0KKyAgICAgICAgICAgICAtIFNhbWUgcmVtYXJrIGNvbmNlcm5pbmcgdGhlIGVycm9yIG1hbmFnZW1lbnQgaXMgYXBwbGljYWJsZSBmb3IgdGhpcyANCisgICAgICAgICAgICAgICBmdW5jdGlvbiBpZiB1c2VyIGRlY2lkZXMgdG8gY2hlY2sgb25seSByZWd1bGFyIGNvbW11bmljYXRpb24gZmxhZ3MgDQorICAgICAgICAgICAgICAgKGFuZCBpZ25vcmVzIGVycm9yIGZsYWdzKS4NCisgICAgICANCisgDQorICAgICAzLiBGbGFnLWJhc2VkIHN0YXRlIG1vbml0b3JpbmcgKFVzaW5nIHRoZSBmdW5jdGlvbiBJMkNfR2V0RmxhZ1N0YXR1cygpKQ0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgIA0KKyAgICAgIFVzaW5nIHRoZSBmdW5jdGlvbiBJMkNfR2V0RmxhZ1N0YXR1cygpIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBzdGF0dXMgb2YgDQorICAgICAgb25lIHNpbmdsZSBmbGFnIChpZS4gSTJDX0ZMQUdfUlhORSAuLi4pLiANCisNCisgICAgICAgICAgLSBXaGVuIHRvIHVzZQ0KKyAgICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgdXNlZCBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zIG9yIGluIGRlYnVnIA0KKyAgICAgICAgICAgICAgIHBoYXNlLg0KKyAgICAgICAgICAgICAtIEl0IGlzIHN1aXRhYmxlIHdoZW4gb25seSBvbmUgZmxhZyBjaGVja2luZyBpcyBuZWVkZWQgKG1vc3QgSTJDIA0KKyAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgbW9uaXRvcmVkIHRocm91Z2ggbXVsdGlwbGUgZmxhZ3MpLg0KKyAgICAgICAgICAtIExpbWl0YXRpb25zOiANCisgICAgICAgICAgICAgLSBXaGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIFN0YXR1cyByZWdpc3RlciBpcyBhY2Nlc3NlZC4gDQorICAgICAgICAgICAgICAgU29tZSBmbGFncyBhcmUgY2xlYXJlZCB3aGVuIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgYWNjZXNzZWQuIA0KKyAgICAgICAgICAgICAgIFNvIGNoZWNraW5nIHRoZSBzdGF0dXMgb2Ygb25lIEZsYWcsIG1heSBjbGVhciBvdGhlciBvbmVzLg0KKyAgICAgICAgICAgICAtIEZ1bmN0aW9uIG1heSBuZWVkIHRvIGJlIGNhbGxlZCB0d2ljZSBvciBtb3JlIGluIG9yZGVyIHRvIG1vbml0b3IgDQorICAgICAgICAgICAgICAgb25lIHNpbmdsZSBldmVudC4gICAgICAgICAgIA0KKyAqLw0KKw0KKy8qDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEuIEJhc2ljIHN0YXRlIG1vbml0b3JpbmcNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqLw0KK0Vycm9yU3RhdHVzIEkyQ19DaGVja0V2ZW50KEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50MzJfdCBJMkNfRVZFTlQpOw0KKy8qDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIuIEFkdmFuY2VkIHN0YXRlIG1vbml0b3JpbmcNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqLw0KK3VpbnQzMl90IEkyQ19HZXRMYXN0RXZlbnQoSTJDX1R5cGVEZWYqIEkyQ3gpOw0KKy8qDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMuIEZsYWctYmFzZWQgc3RhdGUgbW9uaXRvcmluZw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICovDQorRmxhZ1N0YXR1cyBJMkNfR2V0RmxhZ1N0YXR1cyhJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0ZMQUcpOw0KKw0KKw0KK3ZvaWQgSTJDX0NsZWFyRmxhZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0ZMQUcpOw0KK0lUU3RhdHVzIEkyQ19HZXRJVFN0YXR1cyhJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0lUKTsNCit2b2lkIEkyQ19DbGVhcklUUGVuZGluZ0JpdChJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfSTJDX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2l3ZGcuaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfaXdkZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODliZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X2l3ZGcuaApAQCAtMCwwICsxLDEzMSBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2l3ZGcuaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBJV0RHIA0KKyAgKiAgICAgICAgICBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X0lXREdfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfSVdER19IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgSVdERw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBJV0RHX0V4cG9ydGVkX0NvbnN0YW50cw0KKyAgKiBAew0KKyAgKi8NCisgIA0KKy8qKiBAZGVmZ3JvdXAgSVdER19Xcml0ZUFjY2Vzcw0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElXREdfV3JpdGVBY2Nlc3NfRW5hYmxlICAgICAoKHVpbnQxNl90KTB4NTU1NSkNCisjZGVmaW5lIElXREdfV3JpdGVBY2Nlc3NfRGlzYWJsZSAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX0lXREdfV1JJVEVfQUNDRVNTKEFDQ0VTUykgKCgoQUNDRVNTKSA9PSBJV0RHX1dyaXRlQWNjZXNzX0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBQ0NFU1MpID09IElXREdfV3JpdGVBY2Nlc3NfRGlzYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSVdER19wcmVzY2FsZXIgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfNCAgICAgICAgICAgICgodWludDhfdCkweDAwKQ0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfOCAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfMTYgICAgICAgICAgICgodWludDhfdCkweDAyKQ0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfMzIgICAgICAgICAgICgodWludDhfdCkweDAzKQ0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfNjQgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfMTI4ICAgICAgICAgICgodWludDhfdCkweDA1KQ0KKyNkZWZpbmUgSVdER19QcmVzY2FsZXJfMjU2ICAgICAgICAgICgodWludDhfdCkweDA2KQ0KKyNkZWZpbmUgSVNfSVdER19QUkVTQ0FMRVIoUFJFU0NBTEVSKSAoKChQUkVTQ0FMRVIpID09IElXREdfUHJlc2NhbGVyXzQpICB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gSVdER19QcmVzY2FsZXJfOCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBJV0RHX1ByZXNjYWxlcl8xNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IElXREdfUHJlc2NhbGVyXzMyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gSVdER19QcmVzY2FsZXJfNjQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBJV0RHX1ByZXNjYWxlcl8xMjgpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IElXREdfUHJlc2NhbGVyXzI1NikpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSVdER19GbGFnIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIElXREdfRkxBR19QVlUgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkNCisjZGVmaW5lIElXREdfRkxBR19SVlUgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIElTX0lXREdfRkxBRyhGTEFHKSAoKChGTEFHKSA9PSBJV0RHX0ZMQUdfUFZVKSB8fCAoKEZMQUcpID09IElXREdfRkxBR19SVlUpKQ0KKyNkZWZpbmUgSVNfSVdER19SRUxPQUQoUkVMT0FEKSAoKFJFTE9BRCkgPD0gMHhGRkYpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogUHJlc2NhbGVyIGFuZCBDb3VudGVyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIElXREdfV3JpdGVBY2Nlc3NDbWQodWludDE2X3QgSVdER19Xcml0ZUFjY2Vzcyk7DQordm9pZCBJV0RHX1NldFByZXNjYWxlcih1aW50OF90IElXREdfUHJlc2NhbGVyKTsNCit2b2lkIElXREdfU2V0UmVsb2FkKHVpbnQxNl90IFJlbG9hZCk7DQordm9pZCBJV0RHX1JlbG9hZENvdW50ZXIodm9pZCk7DQorDQorLyogSVdERyBhY3RpdmF0aW9uIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIElXREdfRW5hYmxlKHZvaWQpOw0KKw0KKy8qIEZsYWcgbWFuYWdlbWVudCBmdW5jdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorRmxhZ1N0YXR1cyBJV0RHX0dldEZsYWdTdGF0dXModWludDE2X3QgSVdER19GTEFHKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fU1RNMzJGMnh4X0lXREdfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3B3ci5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9wd3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTljZjNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9wd3IuaApAQCAtMCwwICsxLDE2NiBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3B3ci5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFBXUiBmaXJtd2FyZSANCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLyANCisNCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZm5kZWYgX19TVE0zMkYyeHhfUFdSX0gNCisjZGVmaW5lIF9fU1RNMzJGMnh4X1BXUl9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgUFdSDQorICAqIEB7DQorICAqLyANCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBQV1JfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFBXUl9QVkRfZGV0ZWN0aW9uX2xldmVsIA0KKyAgKiBAew0KKyAgKi8gDQorDQorI2RlZmluZSBQV1JfUFZETGV2ZWxfMCAgICAgICAgICAgICAgICAgIFBXUl9DUl9QTFNfTEVWMA0KKyNkZWZpbmUgUFdSX1BWRExldmVsXzEgICAgICAgICAgICAgICAgICBQV1JfQ1JfUExTX0xFVjENCisjZGVmaW5lIFBXUl9QVkRMZXZlbF8yICAgICAgICAgICAgICAgICAgUFdSX0NSX1BMU19MRVYyDQorI2RlZmluZSBQV1JfUFZETGV2ZWxfMyAgICAgICAgICAgICAgICAgIFBXUl9DUl9QTFNfTEVWMw0KKyNkZWZpbmUgUFdSX1BWRExldmVsXzQgICAgICAgICAgICAgICAgICBQV1JfQ1JfUExTX0xFVjQNCisjZGVmaW5lIFBXUl9QVkRMZXZlbF81ICAgICAgICAgICAgICAgICAgUFdSX0NSX1BMU19MRVY1DQorI2RlZmluZSBQV1JfUFZETGV2ZWxfNiAgICAgICAgICAgICAgICAgIFBXUl9DUl9QTFNfTEVWNg0KKyNkZWZpbmUgUFdSX1BWRExldmVsXzcgICAgICAgICAgICAgICAgICBQV1JfQ1JfUExTX0xFVjcNCisNCisjZGVmaW5lIElTX1BXUl9QVkRfTEVWRUwoTEVWRUwpICgoKExFVkVMKSA9PSBQV1JfUFZETGV2ZWxfMCkgfHwgKChMRVZFTCkgPT0gUFdSX1BWRExldmVsXzEpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVWRUwpID09IFBXUl9QVkRMZXZlbF8yKSB8fCAoKExFVkVMKSA9PSBQV1JfUFZETGV2ZWxfMyl8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMRVZFTCkgPT0gUFdSX1BWRExldmVsXzQpIHx8ICgoTEVWRUwpID09IFBXUl9QVkRMZXZlbF81KXx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFVkVMKSA9PSBQV1JfUFZETGV2ZWxfNikgfHwgKChMRVZFTCkgPT0gUFdSX1BWRExldmVsXzcpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisgIA0KKy8qKiBAZGVmZ3JvdXAgUFdSX1JlZ3VsYXRvcl9zdGF0ZV9pbl9TVE9QX21vZGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgUFdSX1JlZ3VsYXRvcl9PTiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBQV1JfUmVndWxhdG9yX0xvd1Bvd2VyICAgICAgICAgIFBXUl9DUl9MUERTDQorI2RlZmluZSBJU19QV1JfUkVHVUxBVE9SKFJFR1VMQVRPUikgKCgoUkVHVUxBVE9SKSA9PSBQV1JfUmVndWxhdG9yX09OKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVHVUxBVE9SKSA9PSBQV1JfUmVndWxhdG9yX0xvd1Bvd2VyKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfU1RPUF9tb2RlX2VudHJ5IA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFBXUl9TVE9QRW50cnlfV0ZJICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpDQorI2RlZmluZSBQV1JfU1RPUEVudHJ5X1dGRSAgICAgICAgICAgICAgICgodWludDhfdCkweDAyKQ0KKyNkZWZpbmUgSVNfUFdSX1NUT1BfRU5UUlkoRU5UUlkpICgoKEVOVFJZKSA9PSBQV1JfU1RPUEVudHJ5X1dGSSkgfHwgKChFTlRSWSkgPT0gUFdSX1NUT1BFbnRyeV9XRkUpKQ0KKyANCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfRmxhZyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBQV1JfRkxBR19XVSAgICAgICAgICAgICAgICAgICAgIFBXUl9DU1JfV1VGDQorI2RlZmluZSBQV1JfRkxBR19TQiAgICAgICAgICAgICAgICAgICAgIFBXUl9DU1JfU0JGDQorI2RlZmluZSBQV1JfRkxBR19QVkRPICAgICAgICAgICAgICAgICAgIFBXUl9DU1JfUFZETw0KKyNkZWZpbmUgUFdSX0ZMQUdfQlJSICAgICAgICAgICAgICAgICAgICBQV1JfQ1NSX0JSUg0KKw0KKyNkZWZpbmUgSVNfUFdSX0dFVF9GTEFHKEZMQUcpICgoKEZMQUcpID09IFBXUl9GTEFHX1dVKSB8fCAoKEZMQUcpID09IFBXUl9GTEFHX1NCKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUFdSX0ZMQUdfUFZETykgfHwgKChGTEFHKSA9PSBQV1JfRkxBR19CUlIpKQ0KKw0KKyNkZWZpbmUgSVNfUFdSX0NMRUFSX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gUFdSX0ZMQUdfV1UpIHx8ICgoRkxBRykgPT0gUFdSX0ZMQUdfU0IpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyANCisNCisvKiBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgUFdSIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgKioqKioqLyANCit2b2lkIFBXUl9EZUluaXQodm9pZCk7DQorDQorLyogQmFja3VwIERvbWFpbiBBY2Nlc3MgZnVuY3Rpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gDQordm9pZCBQV1JfQmFja3VwQWNjZXNzQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogUFZEIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gDQordm9pZCBQV1JfUFZETGV2ZWxDb25maWcodWludDMyX3QgUFdSX1BWRExldmVsKTsNCit2b2lkIFBXUl9QVkRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBXYWtlVXAgcGlucyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIFBXUl9XYWtlVXBQaW5DbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBCYWNrdXAgUmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIFBXUl9CYWNrdXBSZWd1bGF0b3JDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBGTEFTSCBQb3dlciBEb3duIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIFBXUl9GbGFzaFBvd2VyRG93bkNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIExvdyBQb3dlciBtb2RlcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIA0KK3ZvaWQgUFdSX0VudGVyU1RPUE1vZGUodWludDMyX3QgUFdSX1JlZ3VsYXRvciwgdWludDhfdCBQV1JfU1RPUEVudHJ5KTsNCit2b2lkIFBXUl9FbnRlclNUQU5EQllNb2RlKHZvaWQpOw0KKw0KKy8qIEZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIA0KK0ZsYWdTdGF0dXMgUFdSX0dldEZsYWdTdGF0dXModWludDMyX3QgUFdSX0ZMQUcpOw0KK3ZvaWQgUFdSX0NsZWFyRmxhZyh1aW50MzJfdCBQV1JfRkxBRyk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9QV1JfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3JjYy5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9yY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmUwZjBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9yY2MuaApAQCAtMCwwICsxLDUxNSBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3JjYy5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFJDQyBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaWZuZGVmIF9fU1RNMzJGMnh4X1JDQ19IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9SQ0NfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIFJDQw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IFNZU0NMS19GcmVxdWVuY3k7IC8qITwgIFNZU0NMSyBjbG9jayBmcmVxdWVuY3kgZXhwcmVzc2VkIGluIEh6ICovDQorICB1aW50MzJfdCBIQ0xLX0ZyZXF1ZW5jeTsgICAvKiE8ICBIQ0xLIGNsb2NrIGZyZXF1ZW5jeSBleHByZXNzZWQgaW4gSHogKi8NCisgIHVpbnQzMl90IFBDTEsxX0ZyZXF1ZW5jeTsgIC8qITwgIFBDTEsxIGNsb2NrIGZyZXF1ZW5jeSBleHByZXNzZWQgaW4gSHogKi8NCisgIHVpbnQzMl90IFBDTEsyX0ZyZXF1ZW5jeTsgIC8qITwgIFBDTEsyIGNsb2NrIGZyZXF1ZW5jeSBleHByZXNzZWQgaW4gSHogKi8NCit9UkNDX0Nsb2Nrc1R5cGVEZWY7DQorDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIFJDQ19FeHBvcnRlZF9Db25zdGFudHMNCisgICogQHsNCisgICovDQorICANCisvKiogQGRlZmdyb3VwIFJDQ19IU0VfY29uZmlndXJhdGlvbiANCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfSFNFX09GRiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisjZGVmaW5lIFJDQ19IU0VfT04gICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgUkNDX0hTRV9CeXBhc3MgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDUpDQorI2RlZmluZSBJU19SQ0NfSFNFKEhTRSkgKCgoSFNFKSA9PSBSQ0NfSFNFX09GRikgfHwgKChIU0UpID09IFJDQ19IU0VfT04pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgKChIU0UpID09IFJDQ19IU0VfQnlwYXNzKSkNCisvKioNCisgICogQH0NCisgICovIA0KKyAgDQorLyoqIEBkZWZncm91cCBSQ0NfUExMX0Nsb2NrX1NvdXJjZSANCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfUExMU291cmNlX0hTSSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSQ0NfUExMU291cmNlX0hTRSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBJU19SQ0NfUExMX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gUkNDX1BMTFNvdXJjZV9IU0kpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUExMU291cmNlX0hTRSkpDQorI2RlZmluZSBJU19SQ0NfUExMTV9WQUxVRShWQUxVRSkgKChWQUxVRSkgPD0gNjMpDQorI2RlZmluZSBJU19SQ0NfUExMTl9WQUxVRShWQUxVRSkgKCgxOTIgPD0gKFZBTFVFKSkgJiYgKChWQUxVRSkgPD0gNDMyKSkNCisjZGVmaW5lIElTX1JDQ19QTExQX1ZBTFVFKFZBTFVFKSAoKChWQUxVRSkgPT0gMikgfHwgKChWQUxVRSkgPT0gNCkgfHwgKChWQUxVRSkgPT0gNikgfHwgKChWQUxVRSkgPT0gOCkpDQorI2RlZmluZSBJU19SQ0NfUExMUV9WQUxVRShWQUxVRSkgKCg0IDw9IChWQUxVRSkpICYmICgoVkFMVUUpIDw9IDE1KSkNCisgDQorI2RlZmluZSBJU19SQ0NfUExMSTJTTl9WQUxVRShWQUxVRSkgKCgxOTIgPD0gKFZBTFVFKSkgJiYgKChWQUxVRSkgPD0gNDMyKSkNCisjZGVmaW5lIElTX1JDQ19QTExJMlNSX1ZBTFVFKFZBTFVFKSAoKDIgPD0gKFZBTFVFKSkgJiYgKChWQUxVRSkgPD0gNykpICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgUkNDX1N5c3RlbV9DbG9ja19Tb3VyY2UgDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgUkNDX1NZU0NMS1NvdXJjZV9IU0kgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUkNDX1NZU0NMS1NvdXJjZV9IU0UgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgUkNDX1NZU0NMS1NvdXJjZV9QTExDTEsgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgSVNfUkNDX1NZU0NMS19TT1VSQ0UoU09VUkNFKSAoKChTT1VSQ0UpID09IFJDQ19TWVNDTEtTb3VyY2VfSFNJKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1NZU0NMS1NvdXJjZV9IU0UpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfU1lTQ0xLU291cmNlX1BMTENMSykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgUkNDX0FIQl9DbG9ja19Tb3VyY2UNCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjEgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwOTApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjggICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQTApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjE2ICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQjApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjY0ICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQzApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjEyOCAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRDApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjI1NiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRTApDQorI2RlZmluZSBSQ0NfU1lTQ0xLX0RpdjUxMiAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRjApDQorI2RlZmluZSBJU19SQ0NfSENMSyhIQ0xLKSAoKChIQ0xLKSA9PSBSQ0NfU1lTQ0xLX0RpdjEpIHx8ICgoSENMSykgPT0gUkNDX1NZU0NMS19EaXYyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIQ0xLKSA9PSBSQ0NfU1lTQ0xLX0RpdjQpIHx8ICgoSENMSykgPT0gUkNDX1NZU0NMS19EaXY4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIQ0xLKSA9PSBSQ0NfU1lTQ0xLX0RpdjE2KSB8fCAoKEhDTEspID09IFJDQ19TWVNDTEtfRGl2NjQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEhDTEspID09IFJDQ19TWVNDTEtfRGl2MTI4KSB8fCAoKEhDTEspID09IFJDQ19TWVNDTEtfRGl2MjU2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIQ0xLKSA9PSBSQ0NfU1lTQ0xLX0RpdjUxMikpDQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgUkNDX0FQQjFfQVBCMl9DbG9ja19Tb3VyY2UNCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfSENMS19EaXYxICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSQ0NfSENMS19EaXYyICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSQ0NfSENMS19EaXY0ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDE0MDApDQorI2RlZmluZSBSQ0NfSENMS19EaXY4ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDE4MDApDQorI2RlZmluZSBSQ0NfSENMS19EaXYxNiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDFDMDApDQorI2RlZmluZSBJU19SQ0NfUENMSyhQQ0xLKSAoKChQQ0xLKSA9PSBSQ0NfSENMS19EaXYxKSB8fCAoKFBDTEspID09IFJDQ19IQ0xLX0RpdjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBDTEspID09IFJDQ19IQ0xLX0RpdjQpIHx8ICgoUENMSykgPT0gUkNDX0hDTEtfRGl2OCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUENMSykgPT0gUkNDX0hDTEtfRGl2MTYpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorICANCisvKiogQGRlZmdyb3VwIFJDQ19JbnRlcnJ1cHRfU291cmNlIA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIFJDQ19JVF9MU0lSRFkgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgUkNDX0lUX0xTRVJEWSAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBSQ0NfSVRfSFNJUkRZICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkNCisjZGVmaW5lIFJDQ19JVF9IU0VSRFkgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA4KQ0KKyNkZWZpbmUgUkNDX0lUX1BMTFJEWSAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MTApDQorI2RlZmluZSBSQ0NfSVRfUExMSTJTUkRZICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgyMCkNCisjZGVmaW5lIFJDQ19JVF9DU1MgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDgwKQ0KKyNkZWZpbmUgSVNfUkNDX0lUKElUKSAoKCgoSVQpICYgKHVpbnQ4X3QpMHhDMCkgPT0gMHgwMCkgJiYgKChJVCkgIT0gMHgwMCkpDQorI2RlZmluZSBJU19SQ0NfR0VUX0lUKElUKSAoKChJVCkgPT0gUkNDX0lUX0xTSVJEWSkgfHwgKChJVCkgPT0gUkNDX0lUX0xTRVJEWSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFJDQ19JVF9IU0lSRFkpIHx8ICgoSVQpID09IFJDQ19JVF9IU0VSRFkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBSQ0NfSVRfUExMUkRZKSB8fCAoKElUKSA9PSBSQ0NfSVRfQ1NTKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gUkNDX0lUX1BMTEkyU1JEWSkpDQorI2RlZmluZSBJU19SQ0NfQ0xFQVJfSVQoSVQpICgoKChJVCkgJiAodWludDhfdCkweDQwKSA9PSAweDAwKSAmJiAoKElUKSAhPSAweDAwKSkNCisvKioNCisgICogQH0NCisgICovIA0KKyAgDQorLyoqIEBkZWZncm91cCBSQ0NfTFNFX0NvbmZpZ3VyYXRpb24gDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgUkNDX0xTRV9PRkYgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDApDQorI2RlZmluZSBSQ0NfTFNFX09OICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkNCisjZGVmaW5lIFJDQ19MU0VfQnlwYXNzICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgSVNfUkNDX0xTRShMU0UpICgoKExTRSkgPT0gUkNDX0xTRV9PRkYpIHx8ICgoTFNFKSA9PSBSQ0NfTFNFX09OKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICgoTFNFKSA9PSBSQ0NfTFNFX0J5cGFzcykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgUkNDX1JUQ19DbG9ja19Tb3VyY2UNCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0xTRSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0xTSSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYzICAgICAgICAoKHVpbnQzMl90KTB4MDAwMzAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY0ICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY1ICAgICAgICAoKHVpbnQzMl90KTB4MDAwNTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY2ICAgICAgICAoKHVpbnQzMl90KTB4MDAwNjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY3ICAgICAgICAoKHVpbnQzMl90KTB4MDAwNzAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY4ICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY5ICAgICAgICAoKHVpbnQzMl90KTB4MDAwOTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxMCAgICAgICAoKHVpbnQzMl90KTB4MDAwQTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxMSAgICAgICAoKHVpbnQzMl90KTB4MDAwQjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxMiAgICAgICAoKHVpbnQzMl90KTB4MDAwQzAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxMyAgICAgICAoKHVpbnQzMl90KTB4MDAwRDAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxNCAgICAgICAoKHVpbnQzMl90KTB4MDAwRTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxNSAgICAgICAoKHVpbnQzMl90KTB4MDAwRjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxNiAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxNyAgICAgICAoKHVpbnQzMl90KTB4MDAxMTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxOCAgICAgICAoKHVpbnQzMl90KTB4MDAxMjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxOSAgICAgICAoKHVpbnQzMl90KTB4MDAxMzAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyMCAgICAgICAoKHVpbnQzMl90KTB4MDAxNDAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyMSAgICAgICAoKHVpbnQzMl90KTB4MDAxNTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyMiAgICAgICAoKHVpbnQzMl90KTB4MDAxNjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyMyAgICAgICAoKHVpbnQzMl90KTB4MDAxNzAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyNCAgICAgICAoKHVpbnQzMl90KTB4MDAxODAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyNSAgICAgICAoKHVpbnQzMl90KTB4MDAxOTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyNiAgICAgICAoKHVpbnQzMl90KTB4MDAxQTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyNyAgICAgICAoKHVpbnQzMl90KTB4MDAxQjAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyOCAgICAgICAoKHVpbnQzMl90KTB4MDAxQzAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyOSAgICAgICAoKHVpbnQzMl90KTB4MDAxRDAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYzMCAgICAgICAoKHVpbnQzMl90KTB4MDAxRTAzMDApDQorI2RlZmluZSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYzMSAgICAgICAoKHVpbnQzMl90KTB4MDAxRjAzMDApDQorI2RlZmluZSBJU19SQ0NfUlRDQ0xLX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9MU0UpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0xTSSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2NCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2NykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXY5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MTApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjEyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjE1KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MTYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYxNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjE4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MTkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjIxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjI0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MjUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjI3KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MjgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUlRDQ0xLU291cmNlX0hTRV9EaXYyOSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19SVENDTEtTb3VyY2VfSFNFX0RpdjMwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2MzEpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorICANCisvKiogQGRlZmdyb3VwIFJDQ19JMlNfQ2xvY2tfU291cmNlDQorICAqIEB7DQorICAqLw0KKyNkZWZpbmUgUkNDX0kyUzJDTEtTb3VyY2VfUExMSTJTICAgICAgICAgICAgICgodWludDhfdCkweDAwKQ0KKyNkZWZpbmUgUkNDX0kyUzJDTEtTb3VyY2VfRXh0ICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKw0KKyNkZWZpbmUgSVNfUkNDX0kyU0NMS19TT1VSQ0UoU09VUkNFKSAoKChTT1VSQ0UpID09IFJDQ19JMlMyQ0xLU291cmNlX1BMTEkyUykgfHwgKChTT1VSQ0UpID09IFJDQ19JMlMyQ0xLU291cmNlX0V4dCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisvKioNCisgICogQH0NCisgICovIA0KKyAgDQorLyoqIEBkZWZncm91cCBSQ0NfQUhCMV9QZXJpcGhlcmFscyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0EgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0IgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0MgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0QgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0UgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0YgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0cgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0ggICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfR1BJT0kgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfQ1JDICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRkxJVEYgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfU1JBTTEgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfU1JBTTIgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfQktQU1JBTSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRE1BMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRE1BMiAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRVRIX01BQyAgICAgICAgICAgKCh1aW50MzJfdCkweDAyMDAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRVRIX01BQ19UeCAgICAgICAgKCh1aW50MzJfdCkweDA0MDAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRVRIX01BQ19SeCAgICAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfRVRIX01BQ19QVFAgICAgICAgKCh1aW50MzJfdCkweDEwMDAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfT1RHX0hTICAgICAgICAgICAgKCh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKyNkZWZpbmUgUkNDX0FIQjFQZXJpcGhfT1RHX0hTX1VMUEkgICAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwKQ0KKyNkZWZpbmUgSVNfUkNDX0FIQjFfQ0xPQ0tfUEVSSVBIKFBFUklQSCkgKCgoKFBFUklQSCkgJiAweDgxOUJFRTAwKSA9PSAweDAwKSAmJiAoKFBFUklQSCkgIT0gMHgwMCkpDQorI2RlZmluZSBJU19SQ0NfQUhCMV9SRVNFVF9QRVJJUEgoUEVSSVBIKSAoKCgoUEVSSVBIKSAmIDB4REQ5RkVFMDApID09IDB4MDApICYmICgoUEVSSVBIKSAhPSAweDAwKSkNCisjZGVmaW5lIElTX1JDQ19BSEIxX0xQTU9ERV9QRVJJUEgoUEVSSVBIKSAoKCgoUEVSSVBIKSAmIDB4ODE5ODZFMDApID09IDB4MDApICYmICgoUEVSSVBIKSAhPSAweDAwKSkNCisvKioNCisgICogQH0NCisgICovIA0KKyAgDQorLyoqIEBkZWZncm91cCBSQ0NfQUhCMl9QZXJpcGhlcmFscyANCisgICogQHsNCisgICovICANCisjZGVmaW5lIFJDQ19BSEIyUGVyaXBoX0RDTUkgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIFJDQ19BSEIyUGVyaXBoX0NSWVAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIFJDQ19BSEIyUGVyaXBoX0hBU0ggICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJDQ19BSEIyUGVyaXBoX1JORyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIFJDQ19BSEIyUGVyaXBoX09UR19GUyAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIElTX1JDQ19BSEIyX1BFUklQSChQRVJJUEgpICgoKChQRVJJUEgpICYgMHhGRkZGRkYwRSkgPT0gMHgwMCkgJiYgKChQRVJJUEgpICE9IDB4MDApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorICANCisvKiogQGRlZmdyb3VwIFJDQ19BSEIzX1BlcmlwaGVyYWxzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSQ0NfQUhCM1BlcmlwaF9GU01DICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgSVNfUkNDX0FIQjNfUEVSSVBIKFBFUklQSCkgKCgoKFBFUklQSCkgJiAweEZGRkZGRkZFKSA9PSAweDAwKSAmJiAoKFBFUklQSCkgIT0gMHgwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgUkNDX0FQQjFfUGVyaXBoZXJhbHMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTQgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTUgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTYgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTcgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTEyICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTEzICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1RJTTE0ICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1dXREcgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1NQSTIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1NQSTMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1VTQVJUMiAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1VTQVJUMyAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA0MDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1VBUlQ0ICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA4MDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1VBUlQ1ICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDEwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX0kyQzEgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX0kyQzIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDQwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX0kyQzMgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDgwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX0NBTjEgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX0NBTjIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwNDAwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX1BXUiAgICAgICAgICAgICAgICgodWludDMyX3QpMHgxMDAwMDAwMCkNCisjZGVmaW5lIFJDQ19BUEIxUGVyaXBoX0RBQyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkNCisjZGVmaW5lIElTX1JDQ19BUEIxX1BFUklQSChQRVJJUEgpICgoKChQRVJJUEgpICYgMHhDOTAxMzYwMCkgPT0gMHgwMCkgJiYgKChQRVJJUEgpICE9IDB4MDApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorICANCisvKiogQGRlZmdyb3VwIFJDQ19BUEIyX1BlcmlwaGVyYWxzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9USU0xICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9USU04ICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9VU0FSVDEgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9VU0FSVDYgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9BREMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9BREMxICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9BREMyICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9BREMzICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9TRElPICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9TUEkxICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9TWVNDRkcgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9USU05ICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9USU0xMCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBSQ0NfQVBCMlBlcmlwaF9USU0xMSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBJU19SQ0NfQVBCMl9QRVJJUEgoUEVSSVBIKSAoKCgoUEVSSVBIKSAmIDB4RkZGOEEwQ0MpID09IDB4MDApICYmICgoUEVSSVBIKSAhPSAweDAwKSkNCisjZGVmaW5lIElTX1JDQ19BUEIyX1JFU0VUX1BFUklQSChQRVJJUEgpICgoKChQRVJJUEgpICYgMHhGRkY4QTZDQykgPT0gMHgwMCkgJiYgKChQRVJJUEgpICE9IDB4MDApKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorICANCisvKiogQGRlZmdyb3VwIFJDQ19NQ08xX0Nsb2NrX1NvdXJjZV9QcmVzY2FsZXINCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfTUNPMVNvdXJjZV9IU0kgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMVNvdXJjZV9MU0UgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMVNvdXJjZV9IU0UgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMVNvdXJjZV9QTExDTEsgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA2MDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMURpdl8xICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMURpdl8yICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMURpdl8zICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDUwMDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMURpdl80ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDYwMDAwMDApDQorI2RlZmluZSBSQ0NfTUNPMURpdl81ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDcwMDAwMDApDQorI2RlZmluZSBJU19SQ0NfTUNPMVNPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gUkNDX01DTzFTb3VyY2VfSFNJKSB8fCAoKFNPVVJDRSkgPT0gUkNDX01DTzFTb3VyY2VfTFNFKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX01DTzFTb3VyY2VfSFNFKSB8fCAoKFNPVVJDRSkgPT0gUkNDX01DTzFTb3VyY2VfUExMQ0xLKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyNkZWZpbmUgSVNfUkNDX01DTzFESVYoRElWKSAoKChESVYpID09IFJDQ19NQ08xRGl2XzEpIHx8ICgoRElWKSA9PSBSQ0NfTUNPMURpdl8yKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERJVikgPT0gUkNDX01DTzFEaXZfMykgfHwgKChESVYpID09IFJDQ19NQ08xRGl2XzQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRElWKSA9PSBSQ0NfTUNPMURpdl81KSkgDQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgUkNDX01DTzJfQ2xvY2tfU291cmNlX1ByZXNjYWxlcg0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIFJDQ19NQ08yU291cmNlX1NZU0NMSyAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yU291cmNlX1BMTEkyU0NMSyAgICAgICAgICgodWludDMyX3QpMHg0MDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yU291cmNlX0hTRSAgICAgICAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yU291cmNlX1BMTENMSyAgICAgICAgICAgICgodWludDMyX3QpMHhDMDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yRGl2XzEgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yRGl2XzIgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyMDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yRGl2XzMgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgyODAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yRGl2XzQgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgzMDAwMDAwMCkNCisjZGVmaW5lIFJDQ19NQ08yRGl2XzUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgzODAwMDAwMCkNCisjZGVmaW5lIElTX1JDQ19NQ08yU09VUkNFKFNPVVJDRSkgKCgoU09VUkNFKSA9PSBSQ0NfTUNPMlNvdXJjZV9TWVNDTEspIHx8ICgoU09VUkNFKSA9PSBSQ0NfTUNPMlNvdXJjZV9QTExJMlNDTEspfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19NQ08yU291cmNlX0hTRSkgfHwgKChTT1VSQ0UpID09IFJDQ19NQ08yU291cmNlX1BMTENMSykpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIElTX1JDQ19NQ08yRElWKERJVikgKCgoRElWKSA9PSBSQ0NfTUNPMkRpdl8xKSB8fCAoKERJVikgPT0gUkNDX01DTzJEaXZfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChESVYpID09IFJDQ19NQ08yRGl2XzMpIHx8ICgoRElWKSA9PSBSQ0NfTUNPMkRpdl80KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKERJVikgPT0gUkNDX01DTzJEaXZfNSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisvKioNCisgICogQH0NCisgICovIA0KKyAgDQorLyoqIEBkZWZncm91cCBSQ0NfRmxhZyANCisgICogQHsNCisgICovDQorI2RlZmluZSBSQ0NfRkxBR19IU0lSRFkgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgyMSkNCisjZGVmaW5lIFJDQ19GTEFHX0hTRVJEWSAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDMxKQ0KKyNkZWZpbmUgUkNDX0ZMQUdfUExMUkRZICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MzkpDQorI2RlZmluZSBSQ0NfRkxBR19QTExJMlNSRFkgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgzQikNCisjZGVmaW5lIFJDQ19GTEFHX0xTRVJEWSAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDQxKQ0KKyNkZWZpbmUgUkNDX0ZMQUdfTFNJUkRZICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NjEpDQorI2RlZmluZSBSQ0NfRkxBR19CT1JSU1QgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg3OSkNCisjZGVmaW5lIFJDQ19GTEFHX1BJTlJTVCAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDdBKQ0KKyNkZWZpbmUgUkNDX0ZMQUdfUE9SUlNUICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4N0IpDQorI2RlZmluZSBSQ0NfRkxBR19TRlRSU1QgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg3QykNCisjZGVmaW5lIFJDQ19GTEFHX0lXREdSU1QgICAgICAgICAgICAgICAgICgodWludDhfdCkweDdEKQ0KKyNkZWZpbmUgUkNDX0ZMQUdfV1dER1JTVCAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4N0UpDQorI2RlZmluZSBSQ0NfRkxBR19MUFdSUlNUICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg3RikNCisjZGVmaW5lIElTX1JDQ19GTEFHKEZMQUcpICgoKEZMQUcpID09IFJDQ19GTEFHX0hTSVJEWSkgfHwgKChGTEFHKSA9PSBSQ0NfRkxBR19IU0VSRFkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJDQ19GTEFHX1BMTFJEWSkgfHwgKChGTEFHKSA9PSBSQ0NfRkxBR19MU0VSRFkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJDQ19GTEFHX0xTSVJEWSkgfHwgKChGTEFHKSA9PSBSQ0NfRkxBR19CT1JSU1QpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJDQ19GTEFHX1BJTlJTVCkgfHwgKChGTEFHKSA9PSBSQ0NfRkxBR19QT1JSU1QpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJDQ19GTEFHX1NGVFJTVCkgfHwgKChGTEFHKSA9PSBSQ0NfRkxBR19JV0RHUlNUKXx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJDQ19GTEFHX1dXREdSU1QpfHwgKChGTEFHKSA9PSBSQ0NfRkxBR19MUFdSUlNUKXx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJDQ19GTEFHX1BMTEkyU1JEWSkpDQorI2RlZmluZSBJU19SQ0NfQ0FMSUJSQVRJT05fVkFMVUUoVkFMVUUpICgoVkFMVUUpIDw9IDB4MUYpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorDQorLyogRnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIFJDQyBjbG9jayBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICovDQordm9pZCBSQ0NfRGVJbml0KHZvaWQpOw0KKw0KKy8qIEludGVybmFsL2V4dGVybmFsIGNsb2NrcywgUExMLCBDU1MgYW5kIE1DTyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKiovDQordm9pZCBSQ0NfSFNFQ29uZmlnKHVpbnQ4X3QgUkNDX0hTRSk7DQorRXJyb3JTdGF0dXMgUkNDX1dhaXRGb3JIU0VTdGFydFVwKHZvaWQpOw0KK3ZvaWQgUkNDX0FkanVzdEhTSUNhbGlicmF0aW9uVmFsdWUodWludDhfdCBIU0lDYWxpYnJhdGlvblZhbHVlKTsNCit2b2lkIFJDQ19IU0lDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19MU0VDb25maWcodWludDhfdCBSQ0NfTFNFKTsNCit2b2lkIFJDQ19MU0lDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCit2b2lkIFJDQ19QTExDb25maWcodWludDMyX3QgUkNDX1BMTFNvdXJjZSwgdWludDMyX3QgUExMTSwgdWludDMyX3QgUExMTiwgdWludDMyX3QgUExMUCwgdWludDMyX3QgUExMUSk7DQordm9pZCBSQ0NfUExMQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBSQ0NfUExMSTJTQ29uZmlnKHVpbnQzMl90IFBMTEkyU04sIHVpbnQzMl90IFBMTEkyU1IpOw0KK3ZvaWQgUkNDX1BMTEkyU0NtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KK3ZvaWQgUkNDX0Nsb2NrU2VjdXJpdHlTeXN0ZW1DbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19NQ08xQ29uZmlnKHVpbnQzMl90IFJDQ19NQ08xU291cmNlLCB1aW50MzJfdCBSQ0NfTUNPMURpdik7DQordm9pZCBSQ0NfTUNPMkNvbmZpZyh1aW50MzJfdCBSQ0NfTUNPMlNvdXJjZSwgdWludDMyX3QgUkNDX01DTzJEaXYpOw0KKw0KKy8qIFN5c3RlbSwgQUhCIGFuZCBBUEIgYnVzc2VzIGNsb2NrcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKiovDQordm9pZCBSQ0NfU1lTQ0xLQ29uZmlnKHVpbnQzMl90IFJDQ19TWVNDTEtTb3VyY2UpOw0KK3VpbnQ4X3QgUkNDX0dldFNZU0NMS1NvdXJjZSh2b2lkKTsNCit2b2lkIFJDQ19IQ0xLQ29uZmlnKHVpbnQzMl90IFJDQ19TWVNDTEspOw0KK3ZvaWQgUkNDX1BDTEsxQ29uZmlnKHVpbnQzMl90IFJDQ19IQ0xLKTsNCit2b2lkIFJDQ19QQ0xLMkNvbmZpZyh1aW50MzJfdCBSQ0NfSENMSyk7DQordm9pZCBSQ0NfR2V0Q2xvY2tzRnJlcShSQ0NfQ2xvY2tzVHlwZURlZiogUkNDX0Nsb2Nrcyk7DQorDQorLyogUGVyaXBoZXJhbCBjbG9ja3MgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFJDQ19SVENDTEtDb25maWcodWludDMyX3QgUkNDX1JUQ0NMS1NvdXJjZSk7DQordm9pZCBSQ0NfUlRDQ0xLQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBSQ0NfQmFja3VwUmVzZXRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19JMlNDTEtDb25maWcodWludDMyX3QgUkNDX0kyU0NMS1NvdXJjZSk7IA0KKw0KK3ZvaWQgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZCh1aW50MzJfdCBSQ0NfQUhCMVBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19BSEIyUGVyaXBoQ2xvY2tDbWQodWludDMyX3QgUkNDX0FIQjJQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBSQ0NfQUhCM1BlcmlwaENsb2NrQ21kKHVpbnQzMl90IFJDQ19BSEIzUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgUkNDX0FQQjFQZXJpcGhDbG9ja0NtZCh1aW50MzJfdCBSQ0NfQVBCMVBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQodWludDMyX3QgUkNDX0FQQjJQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQordm9pZCBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKHVpbnQzMl90IFJDQ19BSEIxUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgUkNDX0FIQjJQZXJpcGhSZXNldENtZCh1aW50MzJfdCBSQ0NfQUhCMlBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19BSEIzUGVyaXBoUmVzZXRDbWQodWludDMyX3QgUkNDX0FIQjNQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKHVpbnQzMl90IFJDQ19BUEIxUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgUkNDX0FQQjJQZXJpcGhSZXNldENtZCh1aW50MzJfdCBSQ0NfQVBCMlBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCit2b2lkIFJDQ19BSEIxUGVyaXBoQ2xvY2tMUE1vZGVDbWQodWludDMyX3QgUkNDX0FIQjFQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBSQ0NfQUhCMlBlcmlwaENsb2NrTFBNb2RlQ21kKHVpbnQzMl90IFJDQ19BSEIyUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgUkNDX0FIQjNQZXJpcGhDbG9ja0xQTW9kZUNtZCh1aW50MzJfdCBSQ0NfQUhCM1BlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJDQ19BUEIxUGVyaXBoQ2xvY2tMUE1vZGVDbWQodWludDMyX3QgUkNDX0FQQjFQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBSQ0NfQVBCMlBlcmlwaENsb2NrTFBNb2RlQ21kKHVpbnQzMl90IFJDQ19BUEIyUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBSQ0NfSVRDb25maWcodWludDhfdCBSQ0NfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRmxhZ1N0YXR1cyBSQ0NfR2V0RmxhZ1N0YXR1cyh1aW50OF90IFJDQ19GTEFHKTsNCit2b2lkIFJDQ19DbGVhckZsYWcodm9pZCk7DQorSVRTdGF0dXMgUkNDX0dldElUU3RhdHVzKHVpbnQ4X3QgUkNDX0lUKTsNCit2b2lkIFJDQ19DbGVhcklUUGVuZGluZ0JpdCh1aW50OF90IFJDQ19JVCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKiBfX1NUTTMyRjJ4eF9SQ0NfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfcm5nLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3JuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjUyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3JuZy5oCkBAIC0wLDAgKzEsMTIwIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfcm5nLmgNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIGZvciB0aGUgUmFuZG9tIA0KKyAgKiAgICAgICAgICBOdW1iZXIgR2VuZXJhdG9yKFJORykgZmlybXdhcmUgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9STkdfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfUk5HX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBSTkcNCisgICogQHsNCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorDQorLyoqIEBkZWZncm91cCBSTkdfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKyAgDQorLyoqIEBkZWZncm91cCBSTkdfZmxhZ3NfZGVmaW5pdGlvbiAgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJOR19GTEFHX0RSRFkgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMDAxKSAvKiE8IERhdGEgcmVhZHkgKi8NCisjZGVmaW5lIFJOR19GTEFHX0NFQ1MgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMDAyKSAvKiE8IENsb2NrIGVycm9yIGN1cnJlbnQgc3RhdHVzICovDQorI2RlZmluZSBSTkdfRkxBR19TRUNTICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDAwNCkgLyohPCBTZWVkIGVycm9yIGN1cnJlbnQgc3RhdHVzICovDQorDQorI2RlZmluZSBJU19STkdfR0VUX0ZMQUcoUk5HX0ZMQUcpICgoKFJOR19GTEFHKSA9PSBSTkdfRkxBR19EUkRZKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJOR19GTEFHKSA9PSBSTkdfRkxBR19DRUNTKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJOR19GTEFHKSA9PSBSTkdfRkxBR19TRUNTKSkNCisjZGVmaW5lIElTX1JOR19DTEVBUl9GTEFHKFJOR19GTEFHKSAoKChSTkdfRkxBRykgPT0gUk5HX0ZMQUdfQ0VDUykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUk5HX0ZMQUcpID09IFJOR19GTEFHX1NFQ1MpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSTkdfaW50ZXJydXB0c19kZWZpbml0aW9uICAgDQorICAqIEB7DQorICAqLyAgDQorI2RlZmluZSBSTkdfSVRfQ0VJICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MjApIC8qITwgQ2xvY2sgZXJyb3IgaW50ZXJydXB0ICovDQorI2RlZmluZSBSTkdfSVRfU0VJICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NDApIC8qITwgU2VlZCBlcnJvciBpbnRlcnJ1cHQgKi8NCisNCisjZGVmaW5lIElTX1JOR19JVChJVCkgKCgoKElUKSAmICh1aW50OF90KTB4OUYpID09IDB4MDApICYmICgoSVQpICE9IDB4MDApKQ0KKyNkZWZpbmUgSVNfUk5HX0dFVF9JVChSTkdfSVQpICgoKFJOR19JVCkgPT0gUk5HX0lUX0NFSSkgfHwgKChSTkdfSVQpID09IFJOR19JVF9TRUkpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKw0KKy8qICBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgUk5HIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgKioqKiovIA0KK3ZvaWQgUk5HX0RlSW5pdCh2b2lkKTsNCisNCisvKiBDb25maWd1cmF0aW9uIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUk5HX0NtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEdldCAzMiBiaXQgUmFuZG9tIG51bWJlciBmdW5jdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordWludDMyX3QgUk5HX0dldFJhbmRvbU51bWJlcih2b2lkKTsNCisNCisvKiBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUk5HX0lUQ29uZmlnKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRmxhZ1N0YXR1cyBSTkdfR2V0RmxhZ1N0YXR1cyh1aW50OF90IFJOR19GTEFHKTsNCit2b2lkIFJOR19DbGVhckZsYWcodWludDhfdCBSTkdfRkxBRyk7DQorSVRTdGF0dXMgUk5HX0dldElUU3RhdHVzKHVpbnQ4X3QgUk5HX0lUKTsNCit2b2lkIFJOR19DbGVhcklUUGVuZGluZ0JpdCh1aW50OF90IFJOR19JVCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvKl9fU1RNMzJGMnh4X1JOR19IICovDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9ydGMuaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfcnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiN2UyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfcnRjLmgKQEAgLTAsMCArMSw2NTAgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9ydGMuaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBSVEMgZmlybXdhcmUNCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9SVENfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfUlRDX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBSVEMNCisgICogQHsNCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIFJUQyBJbml0IHN0cnVjdHVyZXMgZGVmaW5pdGlvbiAgDQorICAqLyANCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IFJUQ19Ib3VyRm9ybWF0OyAgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgSG91ciBGb3JtYXQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ19Ib3VyX0Zvcm1hdHMgKi8NCisgIA0KKyAgdWludDMyX3QgUlRDX0FzeW5jaFByZWRpdjsgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBBc3luY2hyb25vdXMgUHJlZGl2aWRlciB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAweDdGICovDQorICANCisgIHVpbnQzMl90IFJUQ19TeW5jaFByZWRpdjsgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgU3luY2hyb25vdXMgUHJlZGl2aWRlciB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIGEgdmFsdWUgbG93ZXIgdGhhbiAweDFGRkYgKi8NCit9UlRDX0luaXRUeXBlRGVmOw0KKw0KKy8qKiANCisgICogQGJyaWVmICBSVEMgVGltZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDhfdCBSVENfSG91cnM7ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgVGltZSBIb3VyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIGEgdmFsdWUgaW4gdGhlIDAtMTIgcmFuZ2UNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgUlRDX0hvdXJGb3JtYXRfMTIgaXMgc2VsZWN0ZWQgb3IgMC0yMyByYW5nZSBpZg0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBSVENfSG91ckZvcm1hdF8yNCBpcyBzZWxlY3RlZC4gKi8NCisNCisgIHVpbnQ4X3QgUlRDX01pbnV0ZXM7ICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIFRpbWUgTWludXRlcy4NCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBhIHZhbHVlIGluIHRoZSAwLTU5IHJhbmdlLiAqLw0KKyAgDQorICB1aW50OF90IFJUQ19TZWNvbmRzOyAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBUaW1lIFNlY29uZHMuDQorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gYSB2YWx1ZSBpbiB0aGUgMC01OSByYW5nZS4gKi8NCisNCisgIHVpbnQ4X3QgUlRDX0gxMjsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIEFNL1BNIFRpbWUuDQorICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfQU1fUE1fRGVmaW5pdGlvbnMgKi8NCit9UlRDX1RpbWVUeXBlRGVmOyANCisNCisvKiogDQorICAqIEBicmllZiAgUlRDIERhdGUgc3RydWN0dXJlIGRlZmluaXRpb24gIA0KKyAgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQ4X3QgUlRDX1dlZWtEYXk7IC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgRGF0ZSBXZWVrRGF5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX1dlZWtEYXlfRGVmaW5pdGlvbnMgKi8NCisgIA0KKyAgdWludDhfdCBSVENfTW9udGg7ICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBEYXRlIE1vbnRoIChpbiBCQ0QgZm9ybWF0KS4NCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ19Nb250aF9EYXRlX0RlZmluaXRpb25zICovDQorDQorICB1aW50OF90IFJUQ19EYXRlOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBEYXRlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IHRvIGEgdmFsdWUgaW4gdGhlIDEtMzEgcmFuZ2UuICovDQorICANCisgIHVpbnQ4X3QgUlRDX1llYXI7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIERhdGUgWWVhci4NCisgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIHNldCB0byBhIHZhbHVlIGluIHRoZSAwLTk5IHJhbmdlLiAqLw0KK31SVENfRGF0ZVR5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIFJUQyBBbGFybSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgUlRDX1RpbWVUeXBlRGVmIFJUQ19BbGFybVRpbWU7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUlRDIEFsYXJtIFRpbWUgbWVtYmVycy4gKi8NCisNCisgIHVpbnQzMl90IFJUQ19BbGFybU1hc2s7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBBbGFybSBNYXNrcy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfQWxhcm1NYXNrX0RlZmluaXRpb25zICovDQorDQorICB1aW50MzJfdCBSVENfQWxhcm1EYXRlV2Vla0RheVNlbDsgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgQWxhcm0gaXMgb24gRGF0ZSBvciBXZWVrRGF5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ19BbGFybURhdGVXZWVrRGF5X0RlZmluaXRpb25zICovDQorICANCisgIHVpbnQ4X3QgUlRDX0FsYXJtRGF0ZVdlZWtEYXk7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBBbGFybSBEYXRlL1dlZWtEYXkuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBBbGFybSBEYXRlIGlzIHNlbGVjdGVkLCB0aGlzIHBhcmFtZXRlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIHNldCB0byBhIHZhbHVlIGluIHRoZSAxLTMxIHJhbmdlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgQWxhcm0gV2Vla0RheSBpcyBzZWxlY3RlZCwgdGhpcyANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX1dlZWtEYXlfRGVmaW5pdGlvbnMgKi8NCit9UlRDX0FsYXJtVHlwZURlZjsNCisNCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0V4cG9ydGVkX0NvbnN0YW50cw0KKyAgKiBAew0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBSVENfSG91cl9Gb3JtYXRzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfSG91ckZvcm1hdF8yNCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0hvdXJGb3JtYXRfMTIgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MCkNCisjZGVmaW5lIElTX1JUQ19IT1VSX0ZPUk1BVChGT1JNQVQpICAgICAoKChGT1JNQVQpID09IFJUQ19Ib3VyRm9ybWF0XzEyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRk9STUFUKSA9PSBSVENfSG91ckZvcm1hdF8yNCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFJUQ19Bc3luY2hyb25vdXNfUHJlZGl2aWRlciANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgSVNfUlRDX0FTWU5DSF9QUkVESVYoUFJFRElWKSAgICgoUFJFRElWKSA8PSAweDdGKQ0KKyANCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX1N5bmNocm9ub3VzX1ByZWRpdmlkZXIgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIElTX1JUQ19TWU5DSF9QUkVESVYoUFJFRElWKSAgICAoKFBSRURJVikgPD0gMHgxRkZGKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfVGltZV9EZWZpbml0aW9ucyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgSVNfUlRDX0hPVVIxMihIT1VSKSAgICAgICAgICAgICgoKEhPVVIpID4gMCkgJiYgKChIT1VSKSA8PSAxMikpDQorI2RlZmluZSBJU19SVENfSE9VUjI0KEhPVVIpICAgICAgICAgICAgKChIT1VSKSA8PSAyMykNCisjZGVmaW5lIElTX1JUQ19NSU5VVEVTKE1JTlVURVMpICAgICAgICAoKE1JTlVURVMpIDw9IDU5KQ0KKyNkZWZpbmUgSVNfUlRDX1NFQ09ORFMoU0VDT05EUykgICAgICAgICgoU0VDT05EUykgPD0gNTkpDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFJUQ19BTV9QTV9EZWZpbml0aW9ucyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgUlRDX0gxMl9BTSAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAwKQ0KKyNkZWZpbmUgUlRDX0gxMl9QTSAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDQwKQ0KKyNkZWZpbmUgSVNfUlRDX0gxMihQTSkgKCgoUE0pID09IFJUQ19IMTJfQU0pIHx8ICgoUE0pID09IFJUQ19IMTJfUE0pKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfWWVhcl9EYXRlX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBJU19SVENfWUVBUihZRUFSKSAgICAgICAgICAgICAgKChZRUFSKSA8PSA5OSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX01vbnRoX0RhdGVfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisNCisvKiBDb2RlZCBpbiBCQ0QgZm9ybWF0ICovDQorI2RlZmluZSBSVENfTW9udGhfSmFudWFyeSAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDEpDQorI2RlZmluZSBSVENfTW9udGhfRmVicnVhcnkgICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBSVENfTW9udGhfTWFyY2ggICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDMpDQorI2RlZmluZSBSVENfTW9udGhfQXByaWwgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDQpDQorI2RlZmluZSBSVENfTW9udGhfTWF5ICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDUpDQorI2RlZmluZSBSVENfTW9udGhfSnVuZSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDYpDQorI2RlZmluZSBSVENfTW9udGhfSnVseSAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDcpDQorI2RlZmluZSBSVENfTW9udGhfQXVndXN0ICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpDQorI2RlZmluZSBSVENfTW9udGhfU2VwdGVtYmVyICAgICAgICAgICAgKCh1aW50OF90KTB4MDkpDQorI2RlZmluZSBSVENfTW9udGhfT2N0b2JlciAgICAgICAgICAgICAgKCh1aW50OF90KTB4MTApDQorI2RlZmluZSBSVENfTW9udGhfTm92ZW1iZXIgICAgICAgICAgICAgKCh1aW50OF90KTB4MTEpDQorI2RlZmluZSBSVENfTW9udGhfRGVjZW1iZXIgICAgICAgICAgICAgKCh1aW50OF90KTB4MTIpDQorI2RlZmluZSBJU19SVENfTU9OVEgoTU9OVEgpICAgICAgICAgICAgKCgoTU9OVEgpID49IDEpICYmICgoTU9OVEgpIDw9IDEyKSkNCisjZGVmaW5lIElTX1JUQ19EQVRFKERBVEUpICAgICAgICAgICAgICAoKChEQVRFKSA+PSAxKSAmJiAoKERBVEUpIDw9IDMxKSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX1dlZWtEYXlfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisgIA0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfTW9uZGF5ICAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfVHVlc2RheSAgICAgICAgICAgICgodWludDhfdCkweDAyKQ0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfV2VkbmVzZGF5ICAgICAgICAgICgodWludDhfdCkweDAzKQ0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfVGh1cnNkYXkgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfRnJpZGF5ICAgICAgICAgICAgICgodWludDhfdCkweDA1KQ0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfU2F0dXJkYXkgICAgICAgICAgICgodWludDhfdCkweDA2KQ0KKyNkZWZpbmUJUlRDX1dlZWtkYXlfU3VuZGF5ICAgICAgICAgICAgICgodWludDhfdCkweDA3KQ0KKyNkZWZpbmUgSVNfUlRDX1dFRUtEQVkoV0VFS0RBWSkgKCgoV0VFS0RBWSkgPT0gUlRDX1dlZWtkYXlfTW9uZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV2Vla2RheV9UdWVzZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV2Vla2RheV9XZWRuZXNkYXkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XZWVrZGF5X1RodXJzZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV2Vla2RheV9GcmlkYXkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XZWVrZGF5X1NhdHVyZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV2Vla2RheV9TdW5kYXkpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBSVENfQWxhcm1fRGVmaW5pdGlvbnMNCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9EQVRFKERBVEUpICgoKERBVEUpID4gMCkgJiYgKChEQVRFKSA8PSAzMSkpDQorI2RlZmluZSBJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1dFRUtEQVkoV0VFS0RBWSkgKCgoV0VFS0RBWSkgPT0gUlRDX1dlZWtkYXlfTW9uZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dlZWtkYXlfVHVlc2RheSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XZWVrZGF5X1dlZG5lc2RheSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdFRUtEQVkpID09IFJUQ19XZWVrZGF5X1RodXJzZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dlZWtkYXlfRnJpZGF5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0VFS0RBWSkgPT0gUlRDX1dlZWtkYXlfU2F0dXJkYXkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXRUVLREFZKSA9PSBSVENfV2Vla2RheV9TdW5kYXkpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBSVENfQWxhcm1EYXRlV2Vla0RheV9EZWZpbml0aW9ucyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgUlRDX0FsYXJtRGF0ZVdlZWtEYXlTZWxfRGF0ZSAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19BbGFybURhdGVXZWVrRGF5U2VsX1dlZWtEYXkgICAoKHVpbnQzMl90KTB4NDAwMDAwMDApDQorDQorI2RlZmluZSBJU19SVENfQUxBUk1fREFURV9XRUVLREFZX1NFTChTRUwpICgoKFNFTCkgPT0gUlRDX0FsYXJtRGF0ZVdlZWtEYXlTZWxfRGF0ZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTRUwpID09IFJUQ19BbGFybURhdGVXZWVrRGF5U2VsX1dlZWtEYXkpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBSVENfQWxhcm1NYXNrX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfQWxhcm1NYXNrX05vbmUgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0FsYXJtTWFza19EYXRlV2Vla0RheSAgICAgICAgICgodWludDMyX3QpMHg4MDAwMDAwMCkNCisjZGVmaW5lIFJUQ19BbGFybU1hc2tfSG91cnMgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBSVENfQWxhcm1NYXNrX01pbnV0ZXMgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgUlRDX0FsYXJtTWFza19TZWNvbmRzICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA4MCkNCisjZGVmaW5lIFJUQ19BbGFybU1hc2tfQWxsICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4ODA4MDgwODApDQorI2RlZmluZSBJU19BTEFSTV9NQVNLKE1BU0spICAoKChNQVNLKSAmIDB4N0Y3RjdGN0YpID09ICh1aW50MzJfdClSRVNFVCkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0FsYXJtc19EZWZpbml0aW9ucyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgUlRDX0FsYXJtX0EgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkNCisjZGVmaW5lIFJUQ19BbGFybV9CICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBJU19SVENfQUxBUk0oQUxBUk0pICAgICAoKChBTEFSTSkgPT0gUlRDX0FsYXJtX0EpIHx8ICgoQUxBUk0pID09IFJUQ19BbGFybV9CKSkNCisjZGVmaW5lIElTX1JUQ19DTURfQUxBUk0oQUxBUk0pICgoKEFMQVJNKSAmIChSVENfQWxhcm1fQSB8IFJUQ19BbGFybV9CKSkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfV2FrZXVwX1RpbWVyX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0RpdjE2ICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0RpdjggICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0RpdjQgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0RpdjIgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDMpDQorI2RlZmluZSBSVENfV2FrZVVwQ2xvY2tfQ0tfU1BSRV8xNmJpdHMgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBSVENfV2FrZVVwQ2xvY2tfQ0tfU1BSRV8xN2JpdHMgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDYpDQorI2RlZmluZSBJU19SVENfV0FLRVVQX0NMT0NLKENMT0NLKSAoKChDTE9DSykgPT0gUlRDX1dha2VVcENsb2NrX1JUQ0NMS19EaXYxNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XYWtlVXBDbG9ja19SVENDTEtfRGl2OCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XYWtlVXBDbG9ja19SVENDTEtfRGl2NCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XYWtlVXBDbG9ja19SVENDTEtfRGl2MikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XYWtlVXBDbG9ja19DS19TUFJFXzE2Yml0cykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFJUQ19XYWtlVXBDbG9ja19DS19TUFJFXzE3Yml0cykpDQorI2RlZmluZSBJU19SVENfV0FLRVVQX0NPVU5URVIoQ09VTlRFUikgICgoQ09VTlRFUikgPD0gMHhGRkZGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfVGltZV9TdGFtcF9FZGdlc19kZWZpbml0aW9ucyANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgUlRDX1RpbWVTdGFtcEVkZ2VfUmlzaW5nICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19UaW1lU3RhbXBFZGdlX0ZhbGxpbmcgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBJU19SVENfVElNRVNUQU1QX0VER0UoRURHRSkgKCgoRURHRSkgPT0gUlRDX1RpbWVTdGFtcEVkZ2VfUmlzaW5nKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRURHRSkgPT0gUlRDX1RpbWVTdGFtcEVkZ2VfRmFsbGluZykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFJUQ19PdXRwdXRfc2VsZWN0aW9uX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfT3V0cHV0X0Rpc2FibGUgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX091dHB1dF9BbGFybUEgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDIwMDAwMCkNCisjZGVmaW5lIFJUQ19PdXRwdXRfQWxhcm1CICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBSVENfT3V0cHV0X1dha2VVcCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNjAwMDAwKQ0KKyANCisjZGVmaW5lIElTX1JUQ19PVVRQVVQoT1VUUFVUKSAoKChPVVRQVVQpID09IFJUQ19PdXRwdXRfRGlzYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9VVFBVVCkgPT0gUlRDX091dHB1dF9BbGFybUEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPVVRQVVQpID09IFJUQ19PdXRwdXRfQWxhcm1CKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1VUUFVUKSA9PSBSVENfT3V0cHV0X1dha2VVcCkpDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFJUQ19PdXRwdXRfUG9sYXJpdHlfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19PdXRwdXRQb2xhcml0eV9IaWdoICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBSVENfT3V0cHV0UG9sYXJpdHlfTG93ICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgSVNfUlRDX09VVFBVVF9QT0woUE9MKSAoKChQT0wpID09IFJUQ19PdXRwdXRQb2xhcml0eV9IaWdoKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPTCkgPT0gUlRDX091dHB1dFBvbGFyaXR5X0xvdykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIFJUQ19EaWdpdGFsX0NhbGlicmF0aW9uX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfQ2FsaWJTaWduX1Bvc2l0aXZlICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSANCisjZGVmaW5lIFJUQ19DYWxpYlNpZ25fTmVnYXRpdmUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBJU19SVENfQ0FMSUJfU0lHTihTSUdOKSAoKChTSUdOKSA9PSBSVENfQ2FsaWJTaWduX1Bvc2l0aXZlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSUdOKSA9PSBSVENfQ2FsaWJTaWduX05lZ2F0aXZlKSkNCisjZGVmaW5lIElTX1JUQ19DQUxJQl9WQUxVRShWQUxVRSkgKChWQUxVRSkgPCAweDIwKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBSVENfRGF5TGlnaHRTYXZpbmdfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19EYXlMaWdodFNhdmluZ19TVUIxSCAgICgodWludDMyX3QpMHgwMDAyMDAwMCkNCisjZGVmaW5lIFJUQ19EYXlMaWdodFNhdmluZ19BREQxSCAgICgodWludDMyX3QpMHgwMDAxMDAwMCkNCisjZGVmaW5lIElTX1JUQ19EQVlMSUdIVF9TQVZJTkcoU0FWRSkgKCgoU0FWRSkgPT0gUlRDX0RheUxpZ2h0U2F2aW5nX1NVQjFIKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNBVkUpID09IFJUQ19EYXlMaWdodFNhdmluZ19BREQxSCkpDQorDQorI2RlZmluZSBSVENfU3RvcmVPcGVyYXRpb25fUmVzZXQgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19TdG9yZU9wZXJhdGlvbl9TZXQgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgSVNfUlRDX1NUT1JFX09QRVJBVElPTihPUEVSQVRJT04pICgoKE9QRVJBVElPTikgPT0gUlRDX1N0b3JlT3BlcmF0aW9uX1Jlc2V0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1BFUkFUSU9OKSA9PSBSVENfU3RvcmVPcGVyYXRpb25fU2V0KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX1RhbXBlcl9UcmlnZ2VyX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfVGFtcGVyVHJpZ2dlcl9SaXNpbmdFZGdlICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX1RhbXBlclRyaWdnZXJfRmFsbGluZ0VkZ2UgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkNCisjZGVmaW5lIElTX1JUQ19UQU1QRVJfVFJJR0dFUihUUklHR0VSKSAoKChUUklHR0VSKSA9PSBSVENfVGFtcGVyVHJpZ2dlcl9SaXNpbmdFZGdlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gUlRDX1RhbXBlclRyaWdnZXJfRmFsbGluZ0VkZ2UpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfVGFtcGVyX1BpbnNfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19UYW1wZXJfMSAgICAgICAgICAgICAgICAgICAgUlRDX1RBRkNSX1RBTVAxRQ0KKyNkZWZpbmUgSVNfUlRDX1RBTVBFUihUQU1QRVIpICgoKFRBTVBFUikgPT0gUlRDX1RhbXBlcl8xKSkNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSVENfVGFtcGVyX1Bpbl9TZWxlY3Rpb24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19UYW1wZXJQaW5fUEMxMyAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX1RhbXBlclBpbl9QSTggICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBJU19SVENfVEFNUEVSX1BJTihQSU4pICgoKFBJTikgPT0gUlRDX1RhbXBlclBpbl9QQzEzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gUlRDX1RhbXBlclBpbl9QSTgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfVGltZVN0YW1wX1Bpbl9TZWxlY3Rpb24gDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19UaW1lU3RhbXBQaW5fUEMxMyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX1RpbWVTdGFtcFBpbl9QSTggICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBJU19SVENfVElNRVNUQU1QX1BJTihQSU4pICgoKFBJTikgPT0gUlRDX1RpbWVTdGFtcFBpbl9QQzEzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTikgPT0gUlRDX1RpbWVTdGFtcFBpbl9QSTgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfT3V0cHV0X1R5cGVfQUxBUk1fT1VUIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfT3V0cHV0VHlwZV9PcGVuRHJhaW4gICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19PdXRwdXRUeXBlX1B1c2hQdWxsICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgSVNfUlRDX09VVFBVVF9UWVBFKFRZUEUpICgoKFRZUEUpID09IFJUQ19PdXRwdXRUeXBlX09wZW5EcmFpbikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IFJUQ19PdXRwdXRUeXBlX1B1c2hQdWxsKSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0JhY2t1cF9SZWdpc3RlcnNfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgUlRDX0JLUF9EUjAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFJUQ19CS1BfRFIxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBSVENfQktQX0RSMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgUlRDX0JLUF9EUjMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMykNCisjZGVmaW5lIFJUQ19CS1BfRFI0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBSVENfQktQX0RSNSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA1KQ0KKyNkZWZpbmUgUlRDX0JLUF9EUjYgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNikNCisjZGVmaW5lIFJUQ19CS1BfRFI3ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDcpDQorI2RlZmluZSBSVENfQktQX0RSOCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgUlRDX0JLUF9EUjkgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOSkNCisjZGVmaW5lIFJUQ19CS1BfRFIxMCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEEpDQorI2RlZmluZSBSVENfQktQX0RSMTEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBCKQ0KKyNkZWZpbmUgUlRDX0JLUF9EUjEyICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwQykNCisjZGVmaW5lIFJUQ19CS1BfRFIxMyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEQpDQorI2RlZmluZSBSVENfQktQX0RSMTQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBFKQ0KKyNkZWZpbmUgUlRDX0JLUF9EUjE1ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwRikNCisjZGVmaW5lIFJUQ19CS1BfRFIxNiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSVENfQktQX0RSMTcgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDExKQ0KKyNkZWZpbmUgUlRDX0JLUF9EUjE4ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMikNCisjZGVmaW5lIFJUQ19CS1BfRFIxOSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTMpDQorI2RlZmluZSBJU19SVENfQktQKEJLUCkgICAgICAgICAgICAgICAgICAgKCgoQktQKSA9PSBSVENfQktQX0RSMCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFI1KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSNikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFI4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSOSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjEwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjEzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMTQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxNSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjE2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQktQKSA9PSBSVENfQktQX0RSMTcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCS1ApID09IFJUQ19CS1BfRFIxOCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJLUCkgPT0gUlRDX0JLUF9EUjE5KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0lucHV0X3BhcmFtZXRlcl9mb3JtYXRfZGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19Gb3JtYXRfQklOICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDAwKQ0KKyNkZWZpbmUgUlRDX0Zvcm1hdF9CQ0QgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMDEpDQorI2RlZmluZSBJU19SVENfRk9STUFUKEZPUk1BVCkgKCgoRk9STUFUKSA9PSBSVENfRm9ybWF0X0JJTikgfHwgKChGT1JNQVQpID09IFJUQ19Gb3JtYXRfQkNEKSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0ZsYWdzX0RlZmluaXRpb25zIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfRkxBR19UQU1QMUYgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgUlRDX0ZMQUdfVFNPVkYgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIFJUQ19GTEFHX1RTRiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBSVENfRkxBR19XVVRGICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQkYgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCisjZGVmaW5lIFJUQ19GTEFHX0FMUkFGICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBSVENfRkxBR19JTklURiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgUlRDX0ZMQUdfUlNGICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisjZGVmaW5lIFJUQ19GTEFHX0lOSVRTICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBSVENfRkxBR19XVVRXRiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgUlRDX0ZMQUdfQUxSQldGICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIFJUQ19GTEFHX0FMUkFXRiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBJU19SVENfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gUlRDX0ZMQUdfVFNPVkYpIHx8ICgoRkxBRykgPT0gUlRDX0ZMQUdfVFNGKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUlRDX0ZMQUdfV1VURikgfHwgKChGTEFHKSA9PSBSVENfRkxBR19BTFJCRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJUQ19GTEFHX0FMUkFGKSB8fCAoKEZMQUcpID09IFJUQ19GTEFHX0lOSVRGKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUlRDX0ZMQUdfUlNGKSB8fCAoKEZMQUcpID09IFJUQ19GTEFHX1dVVFdGKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUlRDX0ZMQUdfQUxSQldGKSB8fCAoKEZMQUcpID09IFJUQ19GTEFHX0FMUkFXRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFJUQ19GTEFHX1RBTVAxRikpDQorI2RlZmluZSBJU19SVENfQ0xFQVJfRkxBRyhGTEFHKSAoKChGTEFHKSAhPSAodWludDMyX3QpUkVTRVQpICYmICgoKEZMQUcpICYgMHhGRkZGQzBERikgPT0gKHVpbnQzMl90KVJFU0VUKSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0ludGVycnVwdHNfRGVmaW5pdGlvbnMgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFJUQ19JVF9UUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorI2RlZmluZSBSVENfSVRfV1VUICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgUlRDX0lUX0FMUkIgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisjZGVmaW5lIFJUQ19JVF9BTFJBICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBSVENfSVRfVEFNUCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KSAvKiBVc2VkIG9ubHkgdG8gRW5hYmxlIHRoZSBUYW1wZXIgSW50ZXJydXB0ICovDQorI2RlZmluZSBSVENfSVRfVEFNUDEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKw0KKyNkZWZpbmUgSVNfUlRDX0NPTkZJR19JVChJVCkgKCgoSVQpICE9ICh1aW50MzJfdClSRVNFVCkgJiYgKCgoSVQpICYgMHhGRkZGMEZGQikgPT0gKHVpbnQzMl90KVJFU0VUKSkNCisjZGVmaW5lIElTX1JUQ19HRVRfSVQoSVQpICgoKElUKSA9PSBSVENfSVRfVFMpIHx8ICgoSVQpID09IFJUQ19JVF9XVVQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBSVENfSVRfQUxSQikgfHwgKChJVCkgPT0gUlRDX0lUX0FMUkEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBSVENfSVRfVEFNUDEpKQ0KKyNkZWZpbmUgSVNfUlRDX0NMRUFSX0lUKElUKSAoKChJVCkgIT0gKHVpbnQzMl90KVJFU0VUKSAmJiAoKChJVCkgJiAweEZGRkQwRkZGKSA9PSAodWludDMyX3QpUkVTRVQpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBSVENfTGVnYWN5IA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBSVENfRGlnaXRhbENhbGliQ29uZmlnICBSVENfQ29hcnNlQ2FsaWJDb25maWcNCisjZGVmaW5lIFJUQ19EaWdpdGFsQ2FsaWJDbWQgICAgIFJUQ19Db2Fyc2VDYWxpYkNtZA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKw0KKy8qICBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgUlRDIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgKioqKiovDQorRXJyb3JTdGF0dXMgUlRDX0RlSW5pdCh2b2lkKTsNCisNCisvKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK0Vycm9yU3RhdHVzIFJUQ19Jbml0KFJUQ19Jbml0VHlwZURlZiogUlRDX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgUlRDX1N0cnVjdEluaXQoUlRDX0luaXRUeXBlRGVmKiBSVENfSW5pdFN0cnVjdCk7DQordm9pZCBSVENfV3JpdGVQcm90ZWN0aW9uQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRXJyb3JTdGF0dXMgUlRDX0VudGVySW5pdE1vZGUodm9pZCk7DQordm9pZCBSVENfRXhpdEluaXRNb2RlKHZvaWQpOw0KK0Vycm9yU3RhdHVzIFJUQ19XYWl0Rm9yU3luY2hybyh2b2lkKTsNCitFcnJvclN0YXR1cyBSVENfUmVmQ2xvY2tDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBUaW1lIGFuZCBEYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK0Vycm9yU3RhdHVzIFJUQ19TZXRUaW1lKHVpbnQzMl90IFJUQ19Gb3JtYXQsIFJUQ19UaW1lVHlwZURlZiogUlRDX1RpbWVTdHJ1Y3QpOw0KK3ZvaWQgUlRDX1RpbWVTdHJ1Y3RJbml0KFJUQ19UaW1lVHlwZURlZiogUlRDX1RpbWVTdHJ1Y3QpOw0KK3ZvaWQgUlRDX0dldFRpbWUodWludDMyX3QgUlRDX0Zvcm1hdCwgUlRDX1RpbWVUeXBlRGVmKiBSVENfVGltZVN0cnVjdCk7DQorRXJyb3JTdGF0dXMgUlRDX1NldERhdGUodWludDMyX3QgUlRDX0Zvcm1hdCwgUlRDX0RhdGVUeXBlRGVmKiBSVENfRGF0ZVN0cnVjdCk7DQordm9pZCBSVENfRGF0ZVN0cnVjdEluaXQoUlRDX0RhdGVUeXBlRGVmKiBSVENfRGF0ZVN0cnVjdCk7DQordm9pZCBSVENfR2V0RGF0ZSh1aW50MzJfdCBSVENfRm9ybWF0LCBSVENfRGF0ZVR5cGVEZWYqIFJUQ19EYXRlU3RydWN0KTsNCisNCisvKiBBbGFybXMgKEFsYXJtIEEgYW5kIEFsYXJtIEIpIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUlRDX1NldEFsYXJtKHVpbnQzMl90IFJUQ19Gb3JtYXQsIHVpbnQzMl90IFJUQ19BbGFybSwgUlRDX0FsYXJtVHlwZURlZiogUlRDX0FsYXJtU3RydWN0KTsNCit2b2lkIFJUQ19BbGFybVN0cnVjdEluaXQoUlRDX0FsYXJtVHlwZURlZiogUlRDX0FsYXJtU3RydWN0KTsNCit2b2lkIFJUQ19HZXRBbGFybSh1aW50MzJfdCBSVENfRm9ybWF0LCB1aW50MzJfdCBSVENfQWxhcm0sIFJUQ19BbGFybVR5cGVEZWYqIFJUQ19BbGFybVN0cnVjdCk7DQorRXJyb3JTdGF0dXMgUlRDX0FsYXJtQ21kKHVpbnQzMl90IFJUQ19BbGFybSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBXYWtlVXAgVGltZXIgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUlRDX1dha2VVcENsb2NrQ29uZmlnKHVpbnQzMl90IFJUQ19XYWtlVXBDbG9jayk7DQordm9pZCBSVENfU2V0V2FrZVVwQ291bnRlcih1aW50MzJfdCBSVENfV2FrZVVwQ291bnRlcik7DQordWludDMyX3QgUlRDX0dldFdha2VVcENvdW50ZXIodm9pZCk7DQorRXJyb3JTdGF0dXMgUlRDX1dha2VVcENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIERheWxpZ2h0IFNhdmluZyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBSVENfRGF5TGlnaHRTYXZpbmdDb25maWcodWludDMyX3QgUlRDX0RheUxpZ2h0U2F2aW5nLCB1aW50MzJfdCBSVENfU3RvcmVPcGVyYXRpb24pOw0KK3VpbnQzMl90IFJUQ19HZXRTdG9yZU9wZXJhdGlvbih2b2lkKTsNCisNCisvKiBPdXRwdXQgcGluIENvbmZpZ3VyYXRpb24gZnVuY3Rpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUlRDX091dHB1dENvbmZpZyh1aW50MzJfdCBSVENfT3V0cHV0LCB1aW50MzJfdCBSVENfT3V0cHV0UG9sYXJpdHkpOw0KKw0KKy8qIENvYXJzZSBDYWxpYnJhdGlvbiBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorRXJyb3JTdGF0dXMgUlRDX0NvYXJzZUNhbGliQ29uZmlnKHVpbnQzMl90IFJUQ19DYWxpYlNpZ24sIHVpbnQzMl90IFZhbHVlKTsNCitFcnJvclN0YXR1cyBSVENfQ29hcnNlQ2FsaWJDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFJUQ19DYWxpYk91dHB1dENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIFRpbWVTdGFtcCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBSVENfVGltZVN0YW1wQ21kKHVpbnQzMl90IFJUQ19UaW1lU3RhbXBFZGdlLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgUlRDX0dldFRpbWVTdGFtcCh1aW50MzJfdCBSVENfRm9ybWF0LCBSVENfVGltZVR5cGVEZWYqIFJUQ19TdGFtcFRpbWVTdHJ1Y3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRGF0ZVR5cGVEZWYqIFJUQ19TdGFtcERhdGVTdHJ1Y3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisNCisvKiBUYW1wZXJzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUlRDX1RhbXBlclRyaWdnZXJDb25maWcodWludDMyX3QgUlRDX1RhbXBlciwgdWludDMyX3QgUlRDX1RhbXBlclRyaWdnZXIpOw0KK3ZvaWQgUlRDX1RhbXBlckNtZCh1aW50MzJfdCBSVENfVGFtcGVyLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEJhY2t1cCBEYXRhIFJlZ2lzdGVycyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBSVENfV3JpdGVCYWNrdXBSZWdpc3Rlcih1aW50MzJfdCBSVENfQktQX0RSLCB1aW50MzJfdCBEYXRhKTsNCit1aW50MzJfdCBSVENfUmVhZEJhY2t1cFJlZ2lzdGVyKHVpbnQzMl90IFJUQ19CS1BfRFIpOw0KKw0KKy8qIFJUQyBUYW1wZXIgYW5kIFRpbWVTdGFtcCBQaW5zIFNlbGVjdGlvbiBhbmQgT3V0cHV0IFR5cGUgQ29uZmlnIGNvbmZpZ3VyYXRpb24NCisgICBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgUlRDX1RhbXBlclBpblNlbGVjdGlvbih1aW50MzJfdCBSVENfVGFtcGVyUGluKTsNCit2b2lkIFJUQ19UaW1lU3RhbXBQaW5TZWxlY3Rpb24odWludDMyX3QgUlRDX1RpbWVTdGFtcFBpbik7DQordm9pZCBSVENfT3V0cHV0VHlwZUNvbmZpZyh1aW50MzJfdCBSVENfT3V0cHV0VHlwZSk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFJUQ19JVENvbmZpZyh1aW50MzJfdCBSVENfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRmxhZ1N0YXR1cyBSVENfR2V0RmxhZ1N0YXR1cyh1aW50MzJfdCBSVENfRkxBRyk7DQordm9pZCBSVENfQ2xlYXJGbGFnKHVpbnQzMl90IFJUQ19GTEFHKTsNCitJVFN0YXR1cyBSVENfR2V0SVRTdGF0dXModWludDMyX3QgUlRDX0lUKTsNCit2b2lkIFJUQ19DbGVhcklUUGVuZGluZ0JpdCh1aW50MzJfdCBSVENfSVQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLypfX1NUTTMyRjJ4eF9SVENfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfc2Rpby5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9zZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlZmRlZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfc2Rpby5oCkBAIC0wLDAgKzEsNTM2IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfc2Rpby5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFNESU8gZmlybXdhcmUNCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9TRElPX0gNCisjZGVmaW5lIF9fU1RNMzJGMnh4X1NESU9fSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIFNESU8NCisgICogQHsNCisgICovDQorDQorLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IFNESU9fQ2xvY2tFZGdlOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjbG9jayB0cmFuc2l0aW9uIG9uIHdoaWNoIHRoZSBiaXQgY2FwdHVyZSBpcyBtYWRlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNESU9fQ2xvY2tfRWRnZSAqLw0KKw0KKyAgdWludDMyX3QgU0RJT19DbG9ja0J5cGFzczsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgU0RJTyBDbG9jayBkaXZpZGVyIGJ5cGFzcyBpcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNESU9fQ2xvY2tfQnlwYXNzICovDQorDQorICB1aW50MzJfdCBTRElPX0Nsb2NrUG93ZXJTYXZlOyAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIFNESU8gQ2xvY2sgb3V0cHV0IGlzIGVuYWJsZWQgb3INCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgd2hlbiB0aGUgYnVzIGlzIGlkbGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU0RJT19DbG9ja19Qb3dlcl9TYXZlICovDQorDQorICB1aW50MzJfdCBTRElPX0J1c1dpZGU7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgU0RJTyBidXMgd2lkdGguDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU0RJT19CdXNfV2lkZSAqLw0KKw0KKyAgdWludDMyX3QgU0RJT19IYXJkd2FyZUZsb3dDb250cm9sOyAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgU0RJTyBoYXJkd2FyZSBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTRElPX0hhcmR3YXJlX0Zsb3dfQ29udHJvbCAqLw0KKw0KKyAgdWludDhfdCBTRElPX0Nsb2NrRGl2OyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGNsb2NrIGZyZXF1ZW5jeSBvZiB0aGUgU0RJTyBjb250cm9sbGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAgYW5kIDB4RkYuICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KK30gU0RJT19Jbml0VHlwZURlZjsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQzMl90IFNESU9fQXJndW1lbnQ7ICAvKiE8IFNwZWNpZmllcyB0aGUgU0RJTyBjb21tYW5kIGFyZ3VtZW50IHdoaWNoIGlzIHNlbnQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgY2FyZCBhcyBwYXJ0IG9mIGEgY29tbWFuZCBtZXNzYWdlLiBJZiBhIGNvbW1hbmQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGFuIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGxvYWRlZCBpbnRvIHRoaXMgcmVnaXN0ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB3cml0aW5nIHRoZSBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyICovDQorDQorICB1aW50MzJfdCBTRElPX0NtZEluZGV4OyAgLyohPCBTcGVjaWZpZXMgdGhlIFNESU8gY29tbWFuZCBpbmRleC4gSXQgbXVzdCBiZSBsb3dlciB0aGFuIDB4NDAuICovDQorDQorICB1aW50MzJfdCBTRElPX1Jlc3BvbnNlOyAgLyohPCBTcGVjaWZpZXMgdGhlIFNESU8gcmVzcG9uc2UgdHlwZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU0RJT19SZXNwb25zZV9UeXBlICovDQorDQorICB1aW50MzJfdCBTRElPX1dhaXQ7ICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBTRElPIHdhaXQtZm9yLWludGVycnVwdCByZXF1ZXN0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNESU9fV2FpdF9JbnRlcnJ1cHRfU3RhdGUgKi8NCisNCisgIHVpbnQzMl90IFNESU9fQ1BTTTsgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIFNESU8gQ29tbWFuZCBwYXRoIHN0YXRlIG1hY2hpbmUgKENQU00pDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTRElPX0NQU01fU3RhdGUgKi8NCit9IFNESU9fQ21kSW5pdFR5cGVEZWY7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBTRElPX0RhdGFUaW1lT3V0OyAgICAvKiE8IFNwZWNpZmllcyB0aGUgZGF0YSB0aW1lb3V0IHBlcmlvZCBpbiBjYXJkIGJ1cyBjbG9jayBwZXJpb2RzLiAqLw0KKw0KKyAgdWludDMyX3QgU0RJT19EYXRhTGVuZ3RoOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLiAqLw0KKyANCisgIHVpbnQzMl90IFNESU9fRGF0YUJsb2NrU2l6ZTsgIC8qITwgU3BlY2lmaWVzIHRoZSBkYXRhIGJsb2NrIHNpemUgZm9yIGJsb2NrIHRyYW5zZmVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNESU9fRGF0YV9CbG9ja19TaXplICovDQorIA0KKyAgdWludDMyX3QgU0RJT19UcmFuc2ZlckRpcjsgICAgLyohPCBTcGVjaWZpZXMgdGhlIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uLCB3aGV0aGVyIHRoZSB0cmFuc2Zlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhIHJlYWQgb3Igd3JpdGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU0RJT19UcmFuc2Zlcl9EaXJlY3Rpb24gKi8NCisgDQorICB1aW50MzJfdCBTRElPX1RyYW5zZmVyTW9kZTsgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIGRhdGEgdHJhbnNmZXIgaXMgaW4gc3RyZWFtIG9yIGJsb2NrIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU0RJT19UcmFuc2Zlcl9UeXBlICovDQorIA0KKyAgdWludDMyX3QgU0RJT19EUFNNOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBTRElPIERhdGEgcGF0aCBzdGF0ZSBtYWNoaW5lIChEUFNNKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNESU9fRFBTTV9TdGF0ZSAqLw0KK30gU0RJT19EYXRhSW5pdFR5cGVEZWY7DQorDQorDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIFNESU9fRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19DbG9ja19FZGdlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNESU9fQ2xvY2tFZGdlX1Jpc2luZyAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFNESU9fQ2xvY2tFZGdlX0ZhbGxpbmcgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkNCisjZGVmaW5lIElTX1NESU9fQ0xPQ0tfRURHRShFREdFKSAoKChFREdFKSA9PSBTRElPX0Nsb2NrRWRnZV9SaXNpbmcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFREdFKSA9PSBTRElPX0Nsb2NrRWRnZV9GYWxsaW5nKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0Nsb2NrX0J5cGFzcyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX0Nsb2NrQnlwYXNzX0Rpc2FibGUgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgU0RJT19DbG9ja0J5cGFzc19FbmFibGUgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkgICAgDQorI2RlZmluZSBJU19TRElPX0NMT0NLX0JZUEFTUyhCWVBBU1MpICgoKEJZUEFTUykgPT0gU0RJT19DbG9ja0J5cGFzc19EaXNhYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQllQQVNTKSA9PSBTRElPX0Nsb2NrQnlwYXNzX0VuYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFNESU9fQ2xvY2tfUG93ZXJfU2F2ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX0Nsb2NrUG93ZXJTYXZlX0Rpc2FibGUgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBTRElPX0Nsb2NrUG93ZXJTYXZlX0VuYWJsZSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApIA0KKyNkZWZpbmUgSVNfU0RJT19DTE9DS19QT1dFUl9TQVZFKFNBVkUpICgoKFNBVkUpID09IFNESU9fQ2xvY2tQb3dlclNhdmVfRGlzYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNBVkUpID09IFNESU9fQ2xvY2tQb3dlclNhdmVfRW5hYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0J1c19XaWRlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNESU9fQnVzV2lkZV8xYiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFNESU9fQnVzV2lkZV80YiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDgwMCkNCisjZGVmaW5lIFNESU9fQnVzV2lkZV84YiAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCisjZGVmaW5lIElTX1NESU9fQlVTX1dJREUoV0lERSkgKCgoV0lERSkgPT0gU0RJT19CdXNXaWRlXzFiKSB8fCAoKFdJREUpID09IFNESU9fQnVzV2lkZV80YikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXSURFKSA9PSBTRElPX0J1c1dpZGVfOGIpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNESU9fSGFyZHdhcmVfRmxvd19Db250cm9sIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNESU9fSGFyZHdhcmVGbG93Q29udHJvbF9EaXNhYmxlICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFNESU9fSGFyZHdhcmVGbG93Q29udHJvbF9FbmFibGUgICAgICgodWludDMyX3QpMHgwMDAwNDAwMCkNCisjZGVmaW5lIElTX1NESU9fSEFSRFdBUkVfRkxPV19DT05UUk9MKENPTlRST0wpICgoKENPTlRST0wpID09IFNESU9fSGFyZHdhcmVGbG93Q29udHJvbF9EaXNhYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05UUk9MKSA9PSBTRElPX0hhcmR3YXJlRmxvd0NvbnRyb2xfRW5hYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX1Bvd2VyX1N0YXRlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNESU9fUG93ZXJTdGF0ZV9PRkYgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFNESU9fUG93ZXJTdGF0ZV9PTiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMykNCisjZGVmaW5lIElTX1NESU9fUE9XRVJfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBTRElPX1Bvd2VyU3RhdGVfT0ZGKSB8fCAoKFNUQVRFKSA9PSBTRElPX1Bvd2VyU3RhdGVfT04pKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBTRElPX0ludGVycnVwdF9zb3VyY2VzDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgU0RJT19JVF9DQ1JDRkFJTCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKQ0KKyNkZWZpbmUgU0RJT19JVF9EQ1JDRkFJTCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KKyNkZWZpbmUgU0RJT19JVF9DVElNRU9VVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgU0RJT19JVF9EVElNRU9VVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKyNkZWZpbmUgU0RJT19JVF9UWFVOREVSUiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KKyNkZWZpbmUgU0RJT19JVF9SWE9WRVJSICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KKyNkZWZpbmUgU0RJT19JVF9DTURSRU5EICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKyNkZWZpbmUgU0RJT19JVF9DTURTRU5UICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgU0RJT19JVF9EQVRBRU5EICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KKyNkZWZpbmUgU0RJT19JVF9TVEJJVEVSUiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMjAwKQ0KKyNkZWZpbmUgU0RJT19JVF9EQkNLRU5EICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9DTURBQ1QgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwODAwKQ0KKyNkZWZpbmUgU0RJT19JVF9UWEFDVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAxMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9SWEFDVCAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAyMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9UWEZJRk9IRSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9SWEZJRk9IRiAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA4MDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9UWEZJRk9GICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9SWEZJRk9GICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9UWEZJRk9FICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDQwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9SWEZJRk9FICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9UWERBVkwgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMTAwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9SWERBVkwgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMjAwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9TRElPSVQgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwKQ0KKyNkZWZpbmUgU0RJT19JVF9DRUFUQUVORCAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwODAwMDAwKQ0KKyNkZWZpbmUgSVNfU0RJT19JVChJVCkgKCgoKElUKSAmICh1aW50MzJfdCkweEZGMDAwMDAwKSA9PSAweDAwKSAmJiAoKElUKSAhPSAodWludDMyX3QpMHgwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFNESU9fQ29tbWFuZF9JbmRleA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIElTX1NESU9fQ01EX0lOREVYKElOREVYKSAgICAgICAgICAgICgoSU5ERVgpIDwgMHg0MCkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX1Jlc3BvbnNlX1R5cGUNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX1Jlc3BvbnNlX05vICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBTRElPX1Jlc3BvbnNlX1Nob3J0ICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBTRElPX1Jlc3BvbnNlX0xvbmcgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQzApDQorI2RlZmluZSBJU19TRElPX1JFU1BPTlNFKFJFU1BPTlNFKSAoKChSRVNQT05TRSkgPT0gU0RJT19SZXNwb25zZV9ObykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVTUE9OU0UpID09IFNESU9fUmVzcG9uc2VfU2hvcnQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFU1BPTlNFKSA9PSBTRElPX1Jlc3BvbnNlX0xvbmcpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNESU9fV2FpdF9JbnRlcnJ1cHRfU3RhdGUNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX1dhaXRfTm8gICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIC8qITwgU0RJTyBObyBXYWl0LCBUaW1lT3V0IGlzIGVuYWJsZWQgKi8NCisjZGVmaW5lIFNESU9fV2FpdF9JVCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDEwMCkgLyohPCBTRElPIFdhaXQgSW50ZXJydXB0IFJlcXVlc3QgKi8NCisjZGVmaW5lIFNESU9fV2FpdF9QZW5kICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkgLyohPCBTRElPIFdhaXQgRW5kIG9mIHRyYW5zZmVyICovDQorI2RlZmluZSBJU19TRElPX1dBSVQoV0FJVCkgKCgoV0FJVCkgPT0gU0RJT19XYWl0X05vKSB8fCAoKFdBSVQpID09IFNESU9fV2FpdF9JVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFdBSVQpID09IFNESU9fV2FpdF9QZW5kKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0NQU01fU3RhdGUNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX0NQU01fRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgU0RJT19DUFNNX0VuYWJsZSAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDQwMCkNCisjZGVmaW5lIElTX1NESU9fQ1BTTShDUFNNKSAoKChDUFNNKSA9PSBTRElPX0NQU01fRW5hYmxlKSB8fCAoKENQU00pID09IFNESU9fQ1BTTV9EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19SZXNwb25zZV9SZWdpc3RlcnMNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX1JFU1AxICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBTRElPX1JFU1AyICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBTRElPX1JFU1AzICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBTRElPX1JFU1A0ICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMEMpDQorI2RlZmluZSBJU19TRElPX1JFU1AoUkVTUCkgKCgoUkVTUCkgPT0gU0RJT19SRVNQMSkgfHwgKChSRVNQKSA9PSBTRElPX1JFU1AyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVTUCkgPT0gU0RJT19SRVNQMykgfHwgKChSRVNQKSA9PSBTRElPX1JFU1A0KSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0RhdGFfTGVuZ3RoIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIElTX1NESU9fREFUQV9MRU5HVEgoTEVOR1RIKSAoKExFTkdUSCkgPD0gMHgwMUZGRkZGRikNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0RhdGFfQmxvY2tfU2l6ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMWIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMmIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfNGIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfOGIgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMzApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMTZiICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMzJiICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNTApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfNjRiICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNjApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMTI4YiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNzApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMjU2YiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfNTEyYiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwOTApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMTAyNGIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQTApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMjA0OGIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQjApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfNDA5NmIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwQzApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfODE5MmIgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRDApDQorI2RlZmluZSBTRElPX0RhdGFCbG9ja1NpemVfMTYzODRiICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwRTApDQorI2RlZmluZSBJU19TRElPX0JMT0NLX1NJWkUoU0laRSkgKCgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzFiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzJiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzRiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzhiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzE2YikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fRGF0YUJsb2NrU2l6ZV8zMmIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RhdGFCbG9ja1NpemVfNjRiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzEyOGIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBTRElPX0RhdGFCbG9ja1NpemVfMjU2YikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IFNESU9fRGF0YUJsb2NrU2l6ZV81MTJiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzEwMjRiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzIwNDhiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzQwOTZiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzgxOTJiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gU0RJT19EYXRhQmxvY2tTaXplXzE2Mzg0YikpIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNESU9fVHJhbnNmZXJfRGlyZWN0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNESU9fVHJhbnNmZXJEaXJfVG9DYXJkICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFNESU9fVHJhbnNmZXJEaXJfVG9TRElPICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCisjZGVmaW5lIElTX1NESU9fVFJBTlNGRVJfRElSKERJUikgKCgoRElSKSA9PSBTRElPX1RyYW5zZmVyRGlyX1RvQ2FyZCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChESVIpID09IFNESU9fVHJhbnNmZXJEaXJfVG9TRElPKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX1RyYW5zZmVyX1R5cGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgU0RJT19UcmFuc2Zlck1vZGVfQmxvY2sgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KKyNkZWZpbmUgU0RJT19UcmFuc2Zlck1vZGVfU3RyZWFtICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KKyNkZWZpbmUgSVNfU0RJT19UUkFOU0ZFUl9NT0RFKE1PREUpICgoKE1PREUpID09IFNESU9fVHJhbnNmZXJNb2RlX1N0cmVhbSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNESU9fVHJhbnNmZXJNb2RlX0Jsb2NrKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0RQU01fU3RhdGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgU0RJT19EUFNNX0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFNESU9fRFBTTV9FbmFibGUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBJU19TRElPX0RQU00oRFBTTSkgKCgoRFBTTSkgPT0gU0RJT19EUFNNX0VuYWJsZSkgfHwgKChEUFNNKSA9PSBTRElPX0RQU01fRGlzYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19GbGFncyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX0ZMQUdfQ0NSQ0ZBSUwgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBTRElPX0ZMQUdfRENSQ0ZBSUwgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQorI2RlZmluZSBTRElPX0ZMQUdfQ1RJTUVPVVQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDQpDQorI2RlZmluZSBTRElPX0ZMQUdfRFRJTUVPVVQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQorI2RlZmluZSBTRElPX0ZMQUdfVFhVTkRFUlIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMTApDQorI2RlZmluZSBTRElPX0ZMQUdfUlhPVkVSUiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjApDQorI2RlZmluZSBTRElPX0ZMQUdfQ01EUkVORCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBTRElPX0ZMQUdfQ01EU0VOVCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwODApDQorI2RlZmluZSBTRElPX0ZMQUdfREFUQUVORCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBTRElPX0ZMQUdfU1RCSVRFUlIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAyMDApDQorI2RlZmluZSBTRElPX0ZMQUdfREJDS0VORCAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA0MDApDQorI2RlZmluZSBTRElPX0ZMQUdfQ01EQUNUICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApDQorI2RlZmluZSBTRElPX0ZMQUdfVFhBQ1QgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfUlhBQ1QgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDIwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfVFhGSUZPSEUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDQwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfUlhGSUZPSEYgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDgwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfVFhGSUZPRiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMTAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfUlhGSUZPRiAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMjAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfVFhGSUZPRSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfUlhGSUZPRSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfVFhEQVZMICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAxMDAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfUlhEQVZMICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfU0RJT0lUICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA0MDAwMDApDQorI2RlZmluZSBTRElPX0ZMQUdfQ0VBVEFFTkQgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDA4MDAwMDApDQorI2RlZmluZSBJU19TRElPX0ZMQUcoRkxBRykgKCgoRkxBRykgID09IFNESU9fRkxBR19DQ1JDRkFJTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpICA9PSBTRElPX0ZMQUdfRENSQ0ZBSUwpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX0NUSU1FT1VUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19EVElNRU9VVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpICA9PSBTRElPX0ZMQUdfVFhVTkRFUlIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX1JYT1ZFUlIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX0NNRFJFTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX0NNRFNFTlQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX0RBVEFFTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX1NUQklURVJSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19EQkNLRU5EKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19DTURBQ1QpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX1RYQUNUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19SWEFDVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpICA9PSBTRElPX0ZMQUdfVFhGSUZPSEUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX1JYRklGT0hGKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19UWEZJRk9GKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19SWEZJRk9GKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19UWEZJRk9FKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19SWEZJRk9FKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19UWERBVkwpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSAgPT0gU0RJT19GTEFHX1JYREFWTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpICA9PSBTRElPX0ZMQUdfU0RJT0lUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgID09IFNESU9fRkxBR19DRUFUQUVORCkpDQorDQorI2RlZmluZSBJU19TRElPX0NMRUFSX0ZMQUcoRkxBRykgKCgoKEZMQUcpICYgKHVpbnQzMl90KTB4RkYzRkY4MDApID09IDB4MDApICYmICgoRkxBRykgIT0gKHVpbnQzMl90KTB4MDApKQ0KKw0KKyNkZWZpbmUgSVNfU0RJT19HRVRfSVQoSVQpICgoKElUKSAgPT0gU0RJT19JVF9DQ1JDRkFJTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9EQ1JDRkFJTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9DVElNRU9VVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9EVElNRU9VVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9UWFVOREVSUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9SWE9WRVJSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX0NNRFJFTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgID09IFNESU9fSVRfQ01EU0VOVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9EQVRBRU5EKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1NUQklURVJSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX0RCQ0tFTkQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgID09IFNESU9fSVRfQ01EQUNUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1RYQUNUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1JYQUNUKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1RYRklGT0hFKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1JYRklGT0hGKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1RYRklGT0YpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgID09IFNESU9fSVRfUlhGSUZPRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9UWEZJRk9FKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1JYRklGT0UpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgID09IFNESU9fSVRfVFhEQVZMKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpICA9PSBTRElPX0lUX1JYREFWTCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSAgPT0gU0RJT19JVF9TRElPSVQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgID09IFNESU9fSVRfQ0VBVEFFTkQpKQ0KKw0KKyNkZWZpbmUgSVNfU0RJT19DTEVBUl9JVChJVCkgKCgoKElUKSAmICh1aW50MzJfdCkweEZGM0ZGODAwKSA9PSAweDAwKSAmJiAoKElUKSAhPSAodWludDMyX3QpMHgwMCkpDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19SZWFkX1dhaXRfTW9kZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTRElPX1JlYWRXYWl0TW9kZV9DTEsgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQorI2RlZmluZSBTRElPX1JlYWRXYWl0TW9kZV9EQVRBMiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBJU19TRElPX1JFQURXQUlUX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gU0RJT19SZWFkV2FpdE1vZGVfQ0xLKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU0RJT19SZWFkV2FpdE1vZGVfREFUQTIpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qICBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgU0RJTyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKiovDQordm9pZCBTRElPX0RlSW5pdCh2b2lkKTsNCisNCisvKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgU0RJT19Jbml0KFNESU9fSW5pdFR5cGVEZWYqIFNESU9fSW5pdFN0cnVjdCk7DQordm9pZCBTRElPX1N0cnVjdEluaXQoU0RJT19Jbml0VHlwZURlZiogU0RJT19Jbml0U3RydWN0KTsNCit2b2lkIFNESU9fQ2xvY2tDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFNESU9fU2V0UG93ZXJTdGF0ZSh1aW50MzJfdCBTRElPX1Bvd2VyU3RhdGUpOw0KK3VpbnQzMl90IFNESU9fR2V0UG93ZXJTdGF0ZSh2b2lkKTsNCisNCisvKiBDb21tYW5kIHBhdGggc3RhdGUgbWFjaGluZSAoQ1BTTSkgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgU0RJT19TZW5kQ29tbWFuZChTRElPX0NtZEluaXRUeXBlRGVmICpTRElPX0NtZEluaXRTdHJ1Y3QpOw0KK3ZvaWQgU0RJT19DbWRTdHJ1Y3RJbml0KFNESU9fQ21kSW5pdFR5cGVEZWYqIFNESU9fQ21kSW5pdFN0cnVjdCk7DQordWludDhfdCBTRElPX0dldENvbW1hbmRSZXNwb25zZSh2b2lkKTsNCit1aW50MzJfdCBTRElPX0dldFJlc3BvbnNlKHVpbnQzMl90IFNESU9fUkVTUCk7DQorDQorLyogRGF0YSBwYXRoIHN0YXRlIG1hY2hpbmUgKERQU00pIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFNESU9fRGF0YUNvbmZpZyhTRElPX0RhdGFJbml0VHlwZURlZiogU0RJT19EYXRhSW5pdFN0cnVjdCk7DQordm9pZCBTRElPX0RhdGFTdHJ1Y3RJbml0KFNESU9fRGF0YUluaXRUeXBlRGVmKiBTRElPX0RhdGFJbml0U3RydWN0KTsNCit1aW50MzJfdCBTRElPX0dldERhdGFDb3VudGVyKHZvaWQpOw0KK3VpbnQzMl90IFNESU9fUmVhZERhdGEodm9pZCk7DQordm9pZCBTRElPX1dyaXRlRGF0YSh1aW50MzJfdCBEYXRhKTsNCit1aW50MzJfdCBTRElPX0dldEZJRk9Db3VudCh2b2lkKTsNCisNCisvKiBTRElPIElPIENhcmRzIG1vZGUgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgU0RJT19TdGFydFNESU9SZWFkV2FpdChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgU0RJT19TdG9wU0RJT1JlYWRXYWl0KEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBTRElPX1NldFNESU9SZWFkV2FpdE1vZGUodWludDMyX3QgU0RJT19SZWFkV2FpdE1vZGUpOw0KK3ZvaWQgU0RJT19TZXRTRElPT3BlcmF0aW9uKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBTRElPX1NlbmRTRElPU3VzcGVuZENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIENFLUFUQSBtb2RlIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBTRElPX0NvbW1hbmRDb21wbGV0aW9uQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBTRElPX0NFQVRBSVRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFNESU9fU2VuZENFQVRBQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFNESU9fRE1BQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFNESU9fSVRDb25maWcodWludDMyX3QgU0RJT19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCitGbGFnU3RhdHVzIFNESU9fR2V0RmxhZ1N0YXR1cyh1aW50MzJfdCBTRElPX0ZMQUcpOw0KK3ZvaWQgU0RJT19DbGVhckZsYWcodWludDMyX3QgU0RJT19GTEFHKTsNCitJVFN0YXR1cyBTRElPX0dldElUU3RhdHVzKHVpbnQzMl90IFNESU9fSVQpOw0KK3ZvaWQgU0RJT19DbGVhcklUUGVuZGluZ0JpdCh1aW50MzJfdCBTRElPX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fU1RNMzJGMnh4X1NESU9fSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3NwaS5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTRkZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9zcGkuaApAQCAtMCwwICsxLDUyNiBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3NwaS5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFNQSSANCisgICogICAgICAgICAgZmlybXdhcmUgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLyANCisNCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZm5kZWYgX19TVE0zMkYyeHhfU1BJX0gNCisjZGVmaW5lIF9fU1RNMzJGMnh4X1NQSV9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgU1BJDQorICAqIEB7DQorICAqLyANCisNCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiANCisgICogQGJyaWVmICBTUEkgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgU1BJX0RpcmVjdGlvbjsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBTUEkgdW5pZGlyZWN0aW9uYWwgb3IgYmlkaXJlY3Rpb25hbCBkYXRhIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9kYXRhX2RpcmVjdGlvbiAqLw0KKw0KKyAgdWludDE2X3QgU1BJX01vZGU7ICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBTUEkgb3BlcmF0aW5nIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9tb2RlICovDQorDQorICB1aW50MTZfdCBTUElfRGF0YVNpemU7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFNQSSBkYXRhIHNpemUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9kYXRhX3NpemUgKi8NCisNCisgIHVpbnQxNl90IFNQSV9DUE9MOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc2VyaWFsIGNsb2NrIHN0ZWFkeSBzdGF0ZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU1BJX0Nsb2NrX1BvbGFyaXR5ICovDQorDQorICB1aW50MTZfdCBTUElfQ1BIQTsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGNsb2NrIGFjdGl2ZSBlZGdlIGZvciB0aGUgYml0IGNhcHR1cmUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9DbG9ja19QaGFzZSAqLw0KKw0KKyAgdWludDE2X3QgU1BJX05TUzsgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIE5TUyBzaWduYWwgaXMgbWFuYWdlZCBieQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgKE5TUyBwaW4pIG9yIGJ5IHNvZnR3YXJlIHVzaW5nIHRoZSBTU0kgYml0Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfU2xhdmVfU2VsZWN0X21hbmFnZW1lbnQgKi8NCisgDQorICB1aW50MTZfdCBTUElfQmF1ZFJhdGVQcmVzY2FsZXI7ICAgLyohPCBTcGVjaWZpZXMgdGhlIEJhdWQgUmF0ZSBwcmVzY2FsZXIgdmFsdWUgd2hpY2ggd2lsbCBiZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBjb25maWd1cmUgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIFNDSyBjbG9jay4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgU1BJX0JhdWRSYXRlX1ByZXNjYWxlcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhlIGNvbW11bmljYXRpb24gY2xvY2sgaXMgZGVyaXZlZCBmcm9tIHRoZSBtYXN0ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrLiBUaGUgc2xhdmUgY2xvY2sgZG9lcyBub3QgbmVlZCB0byBiZSBzZXQuICovDQorDQorICB1aW50MTZfdCBTUElfRmlyc3RCaXQ7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBkYXRhIHRyYW5zZmVycyBzdGFydCBmcm9tIE1TQiBvciBMU0IgYml0Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBTUElfTVNCX0xTQl90cmFuc21pc3Npb24gKi8NCisNCisgIHVpbnQxNl90IFNQSV9DUkNQb2x5bm9taWFsOyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgcG9seW5vbWlhbCB1c2VkIGZvciB0aGUgQ1JDIGNhbGN1bGF0aW9uLiAqLw0KK31TUElfSW5pdFR5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIEkyUyBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorDQorICB1aW50MTZfdCBJMlNfTW9kZTsgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgSTJTIG9wZXJhdGluZyBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19Nb2RlICovDQorDQorICB1aW50MTZfdCBJMlNfU3RhbmRhcmQ7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc3RhbmRhcmQgdXNlZCBmb3IgdGhlIEkyUyBjb21tdW5pY2F0aW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19TdGFuZGFyZCAqLw0KKw0KKyAgdWludDE2X3QgSTJTX0RhdGFGb3JtYXQ7ICAgLyohPCBTcGVjaWZpZXMgdGhlIGRhdGEgZm9ybWF0IGZvciB0aGUgSTJTIGNvbW11bmljYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0RhdGFfRm9ybWF0ICovDQorDQorICB1aW50MTZfdCBJMlNfTUNMS091dHB1dDsgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBJMlMgTUNMSyBvdXRwdXQgaXMgZW5hYmxlZCBvciBub3QuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX01DTEtfT3V0cHV0ICovDQorDQorICB1aW50MzJfdCBJMlNfQXVkaW9GcmVxOyAgICAvKiE8IFNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IHNlbGVjdGVkIGZvciB0aGUgSTJTIGNvbW11bmljYXRpb24uDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0F1ZGlvX0ZyZXF1ZW5jeSAqLw0KKw0KKyAgdWludDE2X3QgSTJTX0NQT0w7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGlkbGUgc3RhdGUgb2YgdGhlIEkyUyBjbG9jay4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMlNfQ2xvY2tfUG9sYXJpdHkgKi8NCit9STJTX0luaXRUeXBlRGVmOw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBTUElfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSVNfU1BJX0FMTF9QRVJJUEgoUEVSSVBIKSAoKChQRVJJUEgpID09IFNQSTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBTUEkyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gU1BJMykpDQorDQorI2RlZmluZSBJU19TUElfMjNfUEVSSVBIKFBFUklQSCkgICgoKFBFUklQSCkgPT0gU1BJMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFNQSTMpKQ0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX2RhdGFfZGlyZWN0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisgIA0KKyNkZWZpbmUgU1BJX0RpcmVjdGlvbl8yTGluZXNfRnVsbER1cGxleCAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFNQSV9EaXJlY3Rpb25fMkxpbmVzX1J4T25seSAgICAgKCh1aW50MTZfdCkweDA0MDApDQorI2RlZmluZSBTUElfRGlyZWN0aW9uXzFMaW5lX1J4ICAgICAgICAgICgodWludDE2X3QpMHg4MDAwKQ0KKyNkZWZpbmUgU1BJX0RpcmVjdGlvbl8xTGluZV9UeCAgICAgICAgICAoKHVpbnQxNl90KTB4QzAwMCkNCisjZGVmaW5lIElTX1NQSV9ESVJFQ1RJT05fTU9ERShNT0RFKSAoKChNT0RFKSA9PSBTUElfRGlyZWN0aW9uXzJMaW5lc19GdWxsRHVwbGV4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU1BJX0RpcmVjdGlvbl8yTGluZXNfUnhPbmx5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gU1BJX0RpcmVjdGlvbl8xTGluZV9SeCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFNQSV9EaXJlY3Rpb25fMUxpbmVfVHgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9tb2RlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNQSV9Nb2RlX01hc3RlciAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDQpDQorI2RlZmluZSBTUElfTW9kZV9TbGF2ZSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfU1BJX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gU1BJX01vZGVfTWFzdGVyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBTUElfTW9kZV9TbGF2ZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX2RhdGFfc2l6ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTUElfRGF0YVNpemVfMTZiICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKQ0KKyNkZWZpbmUgU1BJX0RhdGFTaXplXzhiICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1NQSV9EQVRBU0laRShEQVRBU0laRSkgKCgoREFUQVNJWkUpID09IFNQSV9EYXRhU2l6ZV8xNmIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREFUQVNJWkUpID09IFNQSV9EYXRhU2l6ZV84YikpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFNQSV9DbG9ja19Qb2xhcml0eSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTUElfQ1BPTF9Mb3cgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgU1BJX0NQT0xfSGlnaCAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIElTX1NQSV9DUE9MKENQT0wpICgoKENQT0wpID09IFNQSV9DUE9MX0xvdykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ1BPTCkgPT0gU1BJX0NQT0xfSGlnaCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX0Nsb2NrX1BoYXNlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNQSV9DUEhBXzFFZGdlICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBTUElfQ1BIQV8yRWRnZSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgSVNfU1BJX0NQSEEoQ1BIQSkgKCgoQ1BIQSkgPT0gU1BJX0NQSEFfMUVkZ2UpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENQSEEpID09IFNQSV9DUEhBXzJFZGdlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTUElfU2xhdmVfU2VsZWN0X21hbmFnZW1lbnQgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgU1BJX05TU19Tb2Z0ICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkNCisjZGVmaW5lIFNQSV9OU1NfSGFyZCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJU19TUElfTlNTKE5TUykgKCgoTlNTKSA9PSBTUElfTlNTX1NvZnQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgKChOU1MpID09IFNQSV9OU1NfSGFyZCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFNQSV9CYXVkUmF0ZV9QcmVzY2FsZXIgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgU1BJX0JhdWRSYXRlUHJlc2NhbGVyXzIgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFNQSV9CYXVkUmF0ZVByZXNjYWxlcl80ICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpDQorI2RlZmluZSBTUElfQmF1ZFJhdGVQcmVzY2FsZXJfOCAgICAgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKyNkZWZpbmUgU1BJX0JhdWRSYXRlUHJlc2NhbGVyXzE2ICAgICAgICAoKHVpbnQxNl90KTB4MDAxOCkNCisjZGVmaW5lIFNQSV9CYXVkUmF0ZVByZXNjYWxlcl8zMiAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBTUElfQmF1ZFJhdGVQcmVzY2FsZXJfNjQgICAgICAgICgodWludDE2X3QpMHgwMDI4KQ0KKyNkZWZpbmUgU1BJX0JhdWRSYXRlUHJlc2NhbGVyXzEyOCAgICAgICAoKHVpbnQxNl90KTB4MDAzMCkNCisjZGVmaW5lIFNQSV9CYXVkUmF0ZVByZXNjYWxlcl8yNTYgICAgICAgKCh1aW50MTZfdCkweDAwMzgpDQorI2RlZmluZSBJU19TUElfQkFVRFJBVEVfUFJFU0NBTEVSKFBSRVNDQUxFUikgKCgoUFJFU0NBTEVSKSA9PSBTUElfQmF1ZFJhdGVQcmVzY2FsZXJfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gU1BJX0JhdWRSYXRlUHJlc2NhbGVyXzQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFNQSV9CYXVkUmF0ZVByZXNjYWxlcl84KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBTUElfQmF1ZFJhdGVQcmVzY2FsZXJfMTYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFNQSV9CYXVkUmF0ZVByZXNjYWxlcl8zMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gU1BJX0JhdWRSYXRlUHJlc2NhbGVyXzY0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBTUElfQmF1ZFJhdGVQcmVzY2FsZXJfMTI4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBTUElfQmF1ZFJhdGVQcmVzY2FsZXJfMjU2KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX01TQl9MU0JfdHJhbnNtaXNzaW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNQSV9GaXJzdEJpdF9NU0IgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBTUElfRmlyc3RCaXRfTFNCICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKQ0KKyNkZWZpbmUgSVNfU1BJX0ZJUlNUX0JJVChCSVQpICgoKEJJVCkgPT0gU1BJX0ZpcnN0Qml0X01TQikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJJVCkgPT0gU1BJX0ZpcnN0Qml0X0xTQikpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX0kyU19Nb2RlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyU19Nb2RlX1NsYXZlVHggICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJMlNfTW9kZV9TbGF2ZVJ4ICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKQ0KKyNkZWZpbmUgSTJTX01vZGVfTWFzdGVyVHggICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkNCisjZGVmaW5lIEkyU19Nb2RlX01hc3RlclJ4ICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAzMDApDQorI2RlZmluZSBJU19JMlNfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBJMlNfTW9kZV9TbGF2ZVR4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBJMlNfTW9kZV9TbGF2ZVJ4KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBJMlNfTW9kZV9NYXN0ZXJUeCl8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBJMlNfTW9kZV9NYXN0ZXJSeCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKyAgDQorDQorLyoqIEBkZWZncm91cCBTUElfSTJTX1N0YW5kYXJkIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyU19TdGFuZGFyZF9QaGlsbGlwcyAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJMlNfU3RhbmRhcmRfTVNCICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKyNkZWZpbmUgSTJTX1N0YW5kYXJkX0xTQiAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkNCisjZGVmaW5lIEkyU19TdGFuZGFyZF9QQ01TaG9ydCAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMzApDQorI2RlZmluZSBJMlNfU3RhbmRhcmRfUENNTG9uZyAgICAgICAgICAgICgodWludDE2X3QpMHgwMEIwKQ0KKyNkZWZpbmUgSVNfSTJTX1NUQU5EQVJEKFNUQU5EQVJEKSAoKChTVEFOREFSRCkgPT0gSTJTX1N0YW5kYXJkX1BoaWxsaXBzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQU5EQVJEKSA9PSBJMlNfU3RhbmRhcmRfTVNCKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQU5EQVJEKSA9PSBJMlNfU3RhbmRhcmRfTFNCKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQU5EQVJEKSA9PSBJMlNfU3RhbmRhcmRfUENNU2hvcnQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBTkRBUkQpID09IEkyU19TdGFuZGFyZF9QQ01Mb25nKSkNCisvKioNCisgICogQH0NCisgICovDQorICANCisvKiogQGRlZmdyb3VwIFNQSV9JMlNfRGF0YV9Gb3JtYXQgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSTJTX0RhdGFGb3JtYXRfMTZiICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIEkyU19EYXRhRm9ybWF0XzE2YmV4dGVuZGVkICAgICAgKCh1aW50MTZfdCkweDAwMDEpDQorI2RlZmluZSBJMlNfRGF0YUZvcm1hdF8yNGIgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAzKQ0KKyNkZWZpbmUgSTJTX0RhdGFGb3JtYXRfMzJiICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNSkNCisjZGVmaW5lIElTX0kyU19EQVRBX0ZPUk1BVChGT1JNQVQpICgoKEZPUk1BVCkgPT0gSTJTX0RhdGFGb3JtYXRfMTZiKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGT1JNQVQpID09IEkyU19EYXRhRm9ybWF0XzE2YmV4dGVuZGVkKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGT1JNQVQpID09IEkyU19EYXRhRm9ybWF0XzI0YikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRk9STUFUKSA9PSBJMlNfRGF0YUZvcm1hdF8zMmIpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9JMlNfTUNMS19PdXRwdXQgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSTJTX01DTEtPdXRwdXRfRW5hYmxlICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkNCisjZGVmaW5lIEkyU19NQ0xLT3V0cHV0X0Rpc2FibGUgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJU19JMlNfTUNMS19PVVRQVVQoT1VUUFVUKSAoKChPVVRQVVQpID09IEkyU19NQ0xLT3V0cHV0X0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1VUUFVUKSA9PSBJMlNfTUNMS091dHB1dF9EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTUElfSTJTX0F1ZGlvX0ZyZXF1ZW5jeSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJMlNfQXVkaW9GcmVxXzE5MmsgICAgICAgICAgICAgICAoKHVpbnQzMl90KTE5MjAwMCkNCisjZGVmaW5lIEkyU19BdWRpb0ZyZXFfOTZrICAgICAgICAgICAgICAgICgodWludDMyX3QpOTYwMDApDQorI2RlZmluZSBJMlNfQXVkaW9GcmVxXzQ4ayAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTQ4MDAwKQ0KKyNkZWZpbmUgSTJTX0F1ZGlvRnJlcV80NGsgICAgICAgICAgICAgICAgKCh1aW50MzJfdCk0NDEwMCkNCisjZGVmaW5lIEkyU19BdWRpb0ZyZXFfMzJrICAgICAgICAgICAgICAgICgodWludDMyX3QpMzIwMDApDQorI2RlZmluZSBJMlNfQXVkaW9GcmVxXzIyayAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTIyMDUwKQ0KKyNkZWZpbmUgSTJTX0F1ZGlvRnJlcV8xNmsgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkxNjAwMCkNCisjZGVmaW5lIEkyU19BdWRpb0ZyZXFfMTFrICAgICAgICAgICAgICAgICgodWludDMyX3QpMTEwMjUpDQorI2RlZmluZSBJMlNfQXVkaW9GcmVxXzhrICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTgwMDApDQorI2RlZmluZSBJMlNfQXVkaW9GcmVxX0RlZmF1bHQgICAgICAgICAgICAoKHVpbnQzMl90KTIpDQorDQorI2RlZmluZSBJU19JMlNfQVVESU9fRlJFUShGUkVRKSAoKCgoRlJFUSkgPj0gSTJTX0F1ZGlvRnJlcV84aykgJiYgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlJFUSkgPD0gSTJTX0F1ZGlvRnJlcV8xOTJrKSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlJFUSkgPT0gSTJTX0F1ZGlvRnJlcV9EZWZhdWx0KSkNCisvKioNCisgICogQH0NCisgICovDQorICAgICAgICAgICAgDQorLyoqIEBkZWZncm91cCBTUElfSTJTX0Nsb2NrX1BvbGFyaXR5IA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIEkyU19DUE9MX0xvdyAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJMlNfQ1BPTF9IaWdoICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgSVNfSTJTX0NQT0woQ1BPTCkgKCgoQ1BPTCkgPT0gSTJTX0NQT0xfTG93KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDUE9MKSA9PSBJMlNfQ1BPTF9IaWdoKSkNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTUElfSTJTX0RNQV90cmFuc2Zlcl9yZXF1ZXN0cyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTUElfSTJTX0RNQVJlcV9UeCAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKQ0KKyNkZWZpbmUgU1BJX0kyU19ETUFSZXFfUnggICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkNCisjZGVmaW5lIElTX1NQSV9JMlNfRE1BUkVRKERNQVJFUSkgKCgoKERNQVJFUSkgJiAodWludDE2X3QpMHhGRkZDKSA9PSAweDAwKSAmJiAoKERNQVJFUSkgIT0gMHgwMCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX05TU19pbnRlcm5hbF9zb2Z0d2FyZV9tYW5hZ2VtZW50IA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNQSV9OU1NJbnRlcm5hbFNvZnRfU2V0ICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApDQorI2RlZmluZSBTUElfTlNTSW50ZXJuYWxTb2Z0X1Jlc2V0ICAgICAgICgodWludDE2X3QpMHhGRUZGKQ0KKyNkZWZpbmUgSVNfU1BJX05TU19JTlRFUk5BTChJTlRFUk5BTCkgKCgoSU5URVJOQUwpID09IFNQSV9OU1NJbnRlcm5hbFNvZnRfU2V0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlRFUk5BTCkgPT0gU1BJX05TU0ludGVybmFsU29mdF9SZXNldCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX0NSQ19UcmFuc21pdF9SZWNlaXZlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNQSV9DUkNfVHggICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4MDApDQorI2RlZmluZSBTUElfQ1JDX1J4ICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgSVNfU1BJX0NSQyhDUkMpICgoKENSQykgPT0gU1BJX0NSQ19UeCkgfHwgKChDUkMpID09IFNQSV9DUkNfUngpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9kaXJlY3Rpb25fdHJhbnNtaXRfcmVjZWl2ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTUElfRGlyZWN0aW9uX1J4ICAgICAgICAgICAgICAgICgodWludDE2X3QpMHhCRkZGKQ0KKyNkZWZpbmUgU1BJX0RpcmVjdGlvbl9UeCAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkNCisjZGVmaW5lIElTX1NQSV9ESVJFQ1RJT04oRElSRUNUSU9OKSAoKChESVJFQ1RJT04pID09IFNQSV9EaXJlY3Rpb25fUngpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChESVJFQ1RJT04pID09IFNQSV9EaXJlY3Rpb25fVHgpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9JMlNfaW50ZXJydXB0c19kZWZpbml0aW9uIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFNQSV9JMlNfSVRfVFhFICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NzEpDQorI2RlZmluZSBTUElfSTJTX0lUX1JYTkUgICAgICAgICAgICAgICAgICgodWludDhfdCkweDYwKQ0KKyNkZWZpbmUgU1BJX0kyU19JVF9FUlIgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg1MCkNCisjZGVmaW5lIEkyU19JVF9VRFIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NTMpDQorI2RlZmluZSBTUElfSTJTX0lUX1RJRlJGRSAgICAgICAgICAgICAgICgodWludDhfdCkweDU4KQ0KKw0KKyNkZWZpbmUgSVNfU1BJX0kyU19DT05GSUdfSVQoSVQpICgoKElUKSA9PSBTUElfSTJTX0lUX1RYRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBTUElfSTJTX0lUX1JYTkUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gU1BJX0kyU19JVF9FUlIpKQ0KKw0KKyNkZWZpbmUgU1BJX0kyU19JVF9PVlIgICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHg1NikNCisjZGVmaW5lIFNQSV9JVF9NT0RGICAgICAgICAgICAgICAgICAgICAgKCh1aW50OF90KTB4NTUpDQorI2RlZmluZSBTUElfSVRfQ1JDRVJSICAgICAgICAgICAgICAgICAgICgodWludDhfdCkweDU0KQ0KKw0KKyNkZWZpbmUgSVNfU1BJX0kyU19DTEVBUl9JVChJVCkgKCgoSVQpID09IFNQSV9JVF9DUkNFUlIpKQ0KKw0KKyNkZWZpbmUgSVNfU1BJX0kyU19HRVRfSVQoSVQpICgoKElUKSA9PSBTUElfSTJTX0lUX1JYTkUpfHwgKChJVCkgPT0gU1BJX0kyU19JVF9UWEUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gU1BJX0lUX0NSQ0VSUikgIHx8ICgoSVQpID09IFNQSV9JVF9NT0RGKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFNQSV9JMlNfSVRfT1ZSKSB8fCAoKElUKSA9PSBJMlNfSVRfVURSKSB8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gU1BJX0kyU19JVF9USUZSRkUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9JMlNfZmxhZ3NfZGVmaW5pdGlvbiANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBTUElfSTJTX0ZMQUdfUlhORSAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgU1BJX0kyU19GTEFHX1RYRSAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIEkyU19GTEFHX0NIU0lERSAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpDQorI2RlZmluZSBJMlNfRkxBR19VRFIgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgU1BJX0ZMQUdfQ1JDRVJSICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFNQSV9GTEFHX01PREYgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBTUElfSTJTX0ZMQUdfT1ZSICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgU1BJX0kyU19GTEFHX0JTWSAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkNCisjZGVmaW5lIFNQSV9JMlNfRkxBR19USUZSRkUgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApDQorDQorI2RlZmluZSBJU19TUElfSTJTX0NMRUFSX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gU1BJX0ZMQUdfQ1JDRVJSKSkNCisjZGVmaW5lIElTX1NQSV9JMlNfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gU1BJX0kyU19GTEFHX0JTWSkgfHwgKChGTEFHKSA9PSBTUElfSTJTX0ZMQUdfT1ZSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFNQSV9GTEFHX01PREYpIHx8ICgoRkxBRykgPT0gU1BJX0ZMQUdfQ1JDRVJSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IEkyU19GTEFHX1VEUikgfHwgKChGTEFHKSA9PSBJMlNfRkxBR19DSFNJREUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gU1BJX0kyU19GTEFHX1RYRSkgfHwgKChGTEFHKSA9PSBTUElfSTJTX0ZMQUdfUlhORSl8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFNQSV9JMlNfRkxBR19USUZSRkUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9DUkNfcG9seW5vbWlhbCANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJU19TUElfQ1JDX1BPTFlOT01JQUwoUE9MWU5PTUlBTCkgKChQT0xZTk9NSUFMKSA+PSAweDEpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX0kyU19MZWdhY3kgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgU1BJX0RNQVJlcV9UeCAgICAgICAgICAgICAgICBTUElfSTJTX0RNQVJlcV9UeA0KKyNkZWZpbmUgU1BJX0RNQVJlcV9SeCAgICAgICAgICAgICAgICBTUElfSTJTX0RNQVJlcV9SeA0KKyNkZWZpbmUgU1BJX0lUX1RYRSAgICAgICAgICAgICAgICAgICBTUElfSTJTX0lUX1RYRQ0KKyNkZWZpbmUgU1BJX0lUX1JYTkUgICAgICAgICAgICAgICAgICBTUElfSTJTX0lUX1JYTkUNCisjZGVmaW5lIFNQSV9JVF9FUlIgICAgICAgICAgICAgICAgICAgU1BJX0kyU19JVF9FUlINCisjZGVmaW5lIFNQSV9JVF9PVlIgICAgICAgICAgICAgICAgICAgU1BJX0kyU19JVF9PVlINCisjZGVmaW5lIFNQSV9GTEFHX1JYTkUgICAgICAgICAgICAgICAgU1BJX0kyU19GTEFHX1JYTkUNCisjZGVmaW5lIFNQSV9GTEFHX1RYRSAgICAgICAgICAgICAgICAgU1BJX0kyU19GTEFHX1RYRQ0KKyNkZWZpbmUgU1BJX0ZMQUdfT1ZSICAgICAgICAgICAgICAgICBTUElfSTJTX0ZMQUdfT1ZSDQorI2RlZmluZSBTUElfRkxBR19CU1kgICAgICAgICAgICAgICAgIFNQSV9JMlNfRkxBR19CU1kNCisjZGVmaW5lIFNQSV9EZUluaXQgICAgICAgICAgICAgICAgICAgU1BJX0kyU19EZUluaXQNCisjZGVmaW5lIFNQSV9JVENvbmZpZyAgICAgICAgICAgICAgICAgU1BJX0kyU19JVENvbmZpZw0KKyNkZWZpbmUgU1BJX0RNQUNtZCAgICAgICAgICAgICAgICAgICBTUElfSTJTX0RNQUNtZA0KKyNkZWZpbmUgU1BJX1NlbmREYXRhICAgICAgICAgICAgICAgICBTUElfSTJTX1NlbmREYXRhDQorI2RlZmluZSBTUElfUmVjZWl2ZURhdGEgICAgICAgICAgICAgIFNQSV9JMlNfUmVjZWl2ZURhdGENCisjZGVmaW5lIFNQSV9HZXRGbGFnU3RhdHVzICAgICAgICAgICAgU1BJX0kyU19HZXRGbGFnU3RhdHVzDQorI2RlZmluZSBTUElfQ2xlYXJGbGFnICAgICAgICAgICAgICAgIFNQSV9JMlNfQ2xlYXJGbGFnDQorI2RlZmluZSBTUElfR2V0SVRTdGF0dXMgICAgICAgICAgICAgIFNQSV9JMlNfR2V0SVRTdGF0dXMNCisjZGVmaW5lIFNQSV9DbGVhcklUUGVuZGluZ0JpdCAgICAgICAgU1BJX0kyU19DbGVhcklUUGVuZGluZ0JpdA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisgIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKw0KKy8qICBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgU1BJIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgKioqKiovIA0KK3ZvaWQgU1BJX0kyU19EZUluaXQoU1BJX1R5cGVEZWYqIFNQSXgpOw0KKw0KKy8qIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBTUElfSW5pdChTUElfVHlwZURlZiogU1BJeCwgU1BJX0luaXRUeXBlRGVmKiBTUElfSW5pdFN0cnVjdCk7DQordm9pZCBJMlNfSW5pdChTUElfVHlwZURlZiogU1BJeCwgSTJTX0luaXRUeXBlRGVmKiBJMlNfSW5pdFN0cnVjdCk7DQordm9pZCBTUElfU3RydWN0SW5pdChTUElfSW5pdFR5cGVEZWYqIFNQSV9Jbml0U3RydWN0KTsNCit2b2lkIEkyU19TdHJ1Y3RJbml0KEkyU19Jbml0VHlwZURlZiogSTJTX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgU1BJX0NtZChTUElfVHlwZURlZiogU1BJeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIEkyU19DbWQoU1BJX1R5cGVEZWYqIFNQSXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBTUElfRGF0YVNpemVDb25maWcoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9EYXRhU2l6ZSk7DQordm9pZCBTUElfQmlEaXJlY3Rpb25hbExpbmVDb25maWcoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9EaXJlY3Rpb24pOw0KK3ZvaWQgU1BJX05TU0ludGVybmFsU29mdHdhcmVDb25maWcoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9OU1NJbnRlcm5hbFNvZnQpOw0KK3ZvaWQgU1BJX1NTT3V0cHV0Q21kKFNQSV9UeXBlRGVmKiBTUEl4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgU1BJX1RJTW9kZUNtZChTUElfVHlwZURlZiogU1BJeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIFNQSV9JMlNfU2VuZERhdGEoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IERhdGEpOw0KK3VpbnQxNl90IFNQSV9JMlNfUmVjZWl2ZURhdGEoU1BJX1R5cGVEZWYqIFNQSXgpOw0KKw0KKy8qIEhhcmR3YXJlIENSQyBDYWxjdWxhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBTUElfQ2FsY3VsYXRlQ1JDKFNQSV9UeXBlRGVmKiBTUEl4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgU1BJX1RyYW5zbWl0Q1JDKFNQSV9UeXBlRGVmKiBTUEl4KTsNCit1aW50MTZfdCBTUElfR2V0Q1JDKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50OF90IFNQSV9DUkMpOw0KK3VpbnQxNl90IFNQSV9HZXRDUkNQb2x5bm9taWFsKFNQSV9UeXBlRGVmKiBTUEl4KTsNCisNCisvKiBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgU1BJX0kyU19ETUFDbWQoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9JMlNfRE1BUmVxLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBTUElfSTJTX0lUQ29uZmlnKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50OF90IFNQSV9JMlNfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRmxhZ1N0YXR1cyBTUElfSTJTX0dldEZsYWdTdGF0dXMoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9JMlNfRkxBRyk7DQordm9pZCBTUElfSTJTX0NsZWFyRmxhZyhTUElfVHlwZURlZiogU1BJeCwgdWludDE2X3QgU1BJX0kyU19GTEFHKTsNCitJVFN0YXR1cyBTUElfSTJTX0dldElUU3RhdHVzKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50OF90IFNQSV9JMlNfSVQpOw0KK3ZvaWQgU1BJX0kyU19DbGVhcklUUGVuZGluZ0JpdChTUElfVHlwZURlZiogU1BJeCwgdWludDhfdCBTUElfSTJTX0lUKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qX19TVE0zMkYyeHhfU1BJX0ggKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF9zeXNjZmcuaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfc3lzY2ZnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0NWUxMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfc3lzY2ZnLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9zeXNjZmcuaA0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgZm9yIHRoZSBTWVNDRkcgZmlybXdhcmUNCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9TWVNDRkdfSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfU1lTQ0ZHX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTWVNDRkcNCisgICogQHsNCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIA0KKy8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0V4cG9ydGVkX0NvbnN0YW50cyANCisgICogQHsNCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0VYVElfUG9ydF9Tb3VyY2VzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBFWFRJX1BvcnRTb3VyY2VHUElPQSAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisjZGVmaW5lIEVYVElfUG9ydFNvdXJjZUdQSU9CICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgRVhUSV9Qb3J0U291cmNlR1BJT0MgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBFWFRJX1BvcnRTb3VyY2VHUElPRCAgICAgICAoKHVpbnQ4X3QpMHgwMykNCisjZGVmaW5lIEVYVElfUG9ydFNvdXJjZUdQSU9FICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgRVhUSV9Qb3J0U291cmNlR1BJT0YgICAgICAgKCh1aW50OF90KTB4MDUpDQorI2RlZmluZSBFWFRJX1BvcnRTb3VyY2VHUElPRyAgICAgICAoKHVpbnQ4X3QpMHgwNikNCisjZGVmaW5lIEVYVElfUG9ydFNvdXJjZUdQSU9IICAgICAgICgodWludDhfdCkweDA3KQ0KKyNkZWZpbmUgRVhUSV9Qb3J0U291cmNlR1BJT0kgICAgICAgKCh1aW50OF90KTB4MDgpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIElTX0VYVElfUE9SVF9TT1VSQ0UoUE9SVFNPVVJDRSkgKCgoUE9SVFNPVVJDRSkgPT0gRVhUSV9Qb3J0U291cmNlR1BJT0EpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT1JUU09VUkNFKSA9PSBFWFRJX1BvcnRTb3VyY2VHUElPQikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlRTT1VSQ0UpID09IEVYVElfUG9ydFNvdXJjZUdQSU9DKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9SVFNPVVJDRSkgPT0gRVhUSV9Qb3J0U291cmNlR1BJT0QpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT1JUU09VUkNFKSA9PSBFWFRJX1BvcnRTb3VyY2VHUElPRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlRTT1VSQ0UpID09IEVYVElfUG9ydFNvdXJjZUdQSU9GKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9SVFNPVVJDRSkgPT0gRVhUSV9Qb3J0U291cmNlR1BJT0cpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT1JUU09VUkNFKSA9PSBFWFRJX1BvcnRTb3VyY2VHUElPSCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPUlRTT1VSQ0UpID09IEVYVElfUG9ydFNvdXJjZUdQSU9JKSkgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIFNZU0NGR19FWFRJX1Bpbl9Tb3VyY2VzIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBFWFRJX1BpblNvdXJjZTAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisjZGVmaW5lIEVYVElfUGluU291cmNlMSAgICAgICAgICAgICgodWludDhfdCkweDAxKQ0KKyNkZWZpbmUgRVhUSV9QaW5Tb3VyY2UyICAgICAgICAgICAgKCh1aW50OF90KTB4MDIpDQorI2RlZmluZSBFWFRJX1BpblNvdXJjZTMgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykNCisjZGVmaW5lIEVYVElfUGluU291cmNlNCAgICAgICAgICAgICgodWludDhfdCkweDA0KQ0KKyNkZWZpbmUgRVhUSV9QaW5Tb3VyY2U1ICAgICAgICAgICAgKCh1aW50OF90KTB4MDUpDQorI2RlZmluZSBFWFRJX1BpblNvdXJjZTYgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNikNCisjZGVmaW5lIEVYVElfUGluU291cmNlNyAgICAgICAgICAgICgodWludDhfdCkweDA3KQ0KKyNkZWZpbmUgRVhUSV9QaW5Tb3VyY2U4ICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpDQorI2RlZmluZSBFWFRJX1BpblNvdXJjZTkgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkNCisjZGVmaW5lIEVYVElfUGluU291cmNlMTAgICAgICAgICAgICgodWludDhfdCkweDBBKQ0KKyNkZWZpbmUgRVhUSV9QaW5Tb3VyY2UxMSAgICAgICAgICAgKCh1aW50OF90KTB4MEIpDQorI2RlZmluZSBFWFRJX1BpblNvdXJjZTEyICAgICAgICAgICAoKHVpbnQ4X3QpMHgwQykNCisjZGVmaW5lIEVYVElfUGluU291cmNlMTMgICAgICAgICAgICgodWludDhfdCkweDBEKQ0KKyNkZWZpbmUgRVhUSV9QaW5Tb3VyY2UxNCAgICAgICAgICAgKCh1aW50OF90KTB4MEUpDQorI2RlZmluZSBFWFRJX1BpblNvdXJjZTE1ICAgICAgICAgICAoKHVpbnQ4X3QpMHgwRikNCisjZGVmaW5lIElTX0VYVElfUElOX1NPVVJDRShQSU5TT1VSQ0UpICgoKFBJTlNPVVJDRSkgPT0gRVhUSV9QaW5Tb3VyY2UwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEVYVElfUGluU291cmNlMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBFWFRJX1BpblNvdXJjZTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gRVhUSV9QaW5Tb3VyY2UzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEVYVElfUGluU291cmNlNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBFWFRJX1BpblNvdXJjZTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gRVhUSV9QaW5Tb3VyY2U2KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEVYVElfUGluU291cmNlNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBFWFRJX1BpblNvdXJjZTgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gRVhUSV9QaW5Tb3VyY2U5KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEVYVElfUGluU291cmNlMTApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gRVhUSV9QaW5Tb3VyY2UxMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBFWFRJX1BpblNvdXJjZTEyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQSU5TT1VSQ0UpID09IEVYVElfUGluU291cmNlMTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBJTlNPVVJDRSkgPT0gRVhUSV9QaW5Tb3VyY2UxNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOU09VUkNFKSA9PSBFWFRJX1BpblNvdXJjZTE1KSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX01lbW9yeV9SZW1hcF9Db25maWcgDQorICAqIEB7DQorICAqLyANCisjZGVmaW5lIFNZU0NGR19NZW1vcnlSZW1hcF9GbGFzaCAgICAgICAoKHVpbnQ4X3QpMHgwMCkNCisjZGVmaW5lIFNZU0NGR19NZW1vcnlSZW1hcF9TeXN0ZW1GbGFzaCAoKHVpbnQ4X3QpMHgwMSkNCisjZGVmaW5lIFNZU0NGR19NZW1vcnlSZW1hcF9GU01DICAgICAgICAoKHVpbnQ4X3QpMHgwMikNCisjZGVmaW5lIFNZU0NGR19NZW1vcnlSZW1hcF9TUkFNICAgICAgICAoKHVpbnQ4X3QpMHgwMykNCisgICANCisjZGVmaW5lIElTX1NZU0NGR19NRU1PUllfUkVNQVBfQ09ORklORyhSRU1BUCkgKCgoUkVNQVApID09IFNZU0NGR19NZW1vcnlSZW1hcF9GbGFzaCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRU1BUCkgPT0gU1lTQ0ZHX01lbW9yeVJlbWFwX1N5c3RlbUZsYXNoKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFTUFQKSA9PSBTWVNDRkdfTWVtb3J5UmVtYXBfU1JBTSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRU1BUCkgPT0gU1lTQ0ZHX01lbW9yeVJlbWFwX0ZTTUMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorDQorLyoqIEBkZWZncm91cCBTWVNDRkdfRVRIRVJORVRfTWVkaWFfSW50ZXJmYWNlIA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBTWVNDRkdfRVRIX01lZGlhSW50ZXJmYWNlX01JSSAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApIA0KKyNkZWZpbmUgU1lTQ0ZHX0VUSF9NZWRpYUludGVyZmFjZV9STUlJICAgKCh1aW50MzJfdCkweDAwMDAwMDAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKw0KKyNkZWZpbmUgSVNfU1lTQ0ZHX0VUSF9NRURJQV9JTlRFUkZBQ0UoSU5URVJGQUNFKSAoKChJTlRFUkZBQ0UpID09IFNZU0NGR19FVEhfTWVkaWFJbnRlcmZhY2VfTUlJKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJTlRFUkZBQ0UpID09IFNZU0NGR19FVEhfTWVkaWFJbnRlcmZhY2VfUk1JSSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorIA0KK3ZvaWQgU1lTQ0ZHX0RlSW5pdCh2b2lkKTsNCit2b2lkIFNZU0NGR19NZW1vcnlSZW1hcENvbmZpZyh1aW50OF90IFNZU0NGR19NZW1vcnlSZW1hcCk7DQordm9pZCBTWVNDRkdfRVhUSUxpbmVDb25maWcodWludDhfdCBFWFRJX1BvcnRTb3VyY2VHUElPeCwgdWludDhfdCBFWFRJX1BpblNvdXJjZXgpOw0KK3ZvaWQgU1lTQ0ZHX0VUSF9NZWRpYUludGVyZmFjZUNvbmZpZyh1aW50MzJfdCBTWVNDRkdfRVRIX01lZGlhSW50ZXJmYWNlKTsgDQordm9pZCBTWVNDRkdfQ29tcGVuc2F0aW9uQ2VsbENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOyANCitGbGFnU3RhdHVzIFNZU0NGR19HZXRDb21wZW5zYXRpb25DZWxsU3RhdHVzKHZvaWQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLypfX1NUTTMyRjJ4eF9TWVNDRkdfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfdGltLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3RpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTkwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3RpbS5oCkBAIC0wLDAgKzEsMTE1MCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3RpbS5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFRJTSBmaXJtd2FyZSANCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9USU1fSA0KKyNkZWZpbmUgX19TVE0zMkYyeHhfVElNX0gNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCisgZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBUSU0NCisgICogQHsNCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIFRJTSBUaW1lIEJhc2UgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqIEBub3RlICAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB3aXRoIGFsbCBUSU14IGV4Y2VwdCBmb3IgVElNNiBhbmQgVElNNy4gIA0KKyAgKi8NCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVpbnQxNl90IFRJTV9QcmVzY2FsZXI7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHByZXNjYWxlciB2YWx1ZSB1c2VkIHRvIGRpdmlkZSB0aGUgVElNIGNsb2NrLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGICovDQorDQorICB1aW50MTZfdCBUSU1fQ291bnRlck1vZGU7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjb3VudGVyIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fQ291bnRlcl9Nb2RlICovDQorDQorICB1aW50MzJfdCBUSU1fUGVyaW9kOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBwZXJpb2QgdmFsdWUgdG8gYmUgbG9hZGVkIGludG8gdGhlIGFjdGl2ZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG8tUmVsb2FkIFJlZ2lzdGVyIGF0IHRoZSBuZXh0IHVwZGF0ZSBldmVudC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuICAqLyANCisNCisgIHVpbnQxNl90IFRJTV9DbG9ja0RpdmlzaW9uOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGNsb2NrIGRpdmlzaW9uLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fQ2xvY2tfRGl2aXNpb25fQ0tEICovDQorDQorICB1aW50OF90IFRJTV9SZXBldGl0aW9uQ291bnRlcjsgIC8qITwgU3BlY2lmaWVzIHRoZSByZXBldGl0aW9uIGNvdW50ZXIgdmFsdWUuIEVhY2ggdGltZSB0aGUgUkNSIGRvd25jb3VudGVyDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlcyB6ZXJvLCBhbiB1cGRhdGUgZXZlbnQgaXMgZ2VuZXJhdGVkIGFuZCBjb3VudGluZyByZXN0YXJ0cw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIFJDUiB2YWx1ZSAoTikuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBpbiBQV00gbW9kZSB0aGF0IChOKzEpIGNvcnJlc3BvbmRzIHRvOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiBQV00gcGVyaW9kcyBpbiBlZGdlLWFsaWduZWQgbW9kZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIG51bWJlciBvZiBoYWxmIFBXTSBwZXJpb2QgaW4gY2VudGVyLWFsaWduZWQgbW9kZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAweDAwIGFuZCAweEZGLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvciBUSU0xIGFuZCBUSU04LiAqLw0KK30gVElNX1RpbWVCYXNlSW5pdFR5cGVEZWY7IA0KKw0KKy8qKiANCisgICogQGJyaWVmICBUSU0gT3V0cHV0IENvbXBhcmUgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdWludDE2X3QgVElNX09DTW9kZTsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBUSU0gbW9kZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX091dHB1dF9Db21wYXJlX2FuZF9QV01fbW9kZXMgKi8NCisNCisgIHVpbnQxNl90IFRJTV9PdXRwdXRTdGF0ZTsgICAvKiE8IFNwZWNpZmllcyB0aGUgVElNIE91dHB1dCBDb21wYXJlIHN0YXRlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fT3V0cHV0X0NvbXBhcmVfU3RhdGUgKi8NCisNCisgIHVpbnQxNl90IFRJTV9PdXRwdXROU3RhdGU7ICAvKiE8IFNwZWNpZmllcyB0aGUgVElNIGNvbXBsZW1lbnRhcnkgT3V0cHV0IENvbXBhcmUgc3RhdGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9PdXRwdXRfQ29tcGFyZV9OX1N0YXRlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvciBUSU0xIGFuZCBUSU04LiAqLw0KKw0KKyAgdWludDMyX3QgVElNX1B1bHNlOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBwdWxzZSB2YWx1ZSB0byBiZSBsb2FkZWQgaW50byB0aGUgQ2FwdHVyZSBDb21wYXJlIFJlZ2lzdGVyLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGICovDQorDQorICB1aW50MTZfdCBUSU1fT0NQb2xhcml0eTsgICAgLyohPCBTcGVjaWZpZXMgdGhlIG91dHB1dCBwb2xhcml0eS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX091dHB1dF9Db21wYXJlX1BvbGFyaXR5ICovDQorDQorICB1aW50MTZfdCBUSU1fT0NOUG9sYXJpdHk7ICAgLyohPCBTcGVjaWZpZXMgdGhlIGNvbXBsZW1lbnRhcnkgb3V0cHV0IHBvbGFyaXR5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fT3V0cHV0X0NvbXBhcmVfTl9Qb2xhcml0eQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGUgVGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQgb25seSBmb3IgVElNMSBhbmQgVElNOC4gKi8NCisNCisgIHVpbnQxNl90IFRJTV9PQ0lkbGVTdGF0ZTsgICAvKiE8IFNwZWNpZmllcyB0aGUgVElNIE91dHB1dCBDb21wYXJlIHBpbiBzdGF0ZSBkdXJpbmcgSWRsZSBzdGF0ZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX091dHB1dF9Db21wYXJlX0lkbGVfU3RhdGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIG9ubHkgZm9yIFRJTTEgYW5kIFRJTTguICovDQorDQorICB1aW50MTZfdCBUSU1fT0NOSWRsZVN0YXRlOyAgLyohPCBTcGVjaWZpZXMgdGhlIFRJTSBPdXRwdXQgQ29tcGFyZSBwaW4gc3RhdGUgZHVyaW5nIElkbGUgc3RhdGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9PdXRwdXRfQ29tcGFyZV9OX0lkbGVfU3RhdGUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIG9ubHkgZm9yIFRJTTEgYW5kIFRJTTguICovDQorfSBUSU1fT0NJbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgVElNIElucHV0IENhcHR1cmUgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKw0KKyAgdWludDE2X3QgVElNX0NoYW5uZWw7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFRJTSBjaGFubmVsLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9DaGFubmVsICovDQorDQorICB1aW50MTZfdCBUSU1fSUNQb2xhcml0eTsgICAvKiE8IFNwZWNpZmllcyB0aGUgYWN0aXZlIGVkZ2Ugb2YgdGhlIGlucHV0IHNpZ25hbC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fSW5wdXRfQ2FwdHVyZV9Qb2xhcml0eSAqLw0KKw0KKyAgdWludDE2X3QgVElNX0lDU2VsZWN0aW9uOyAgLyohPCBTcGVjaWZpZXMgdGhlIGlucHV0Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9JbnB1dF9DYXB0dXJlX1NlbGVjdGlvbiAqLw0KKw0KKyAgdWludDE2X3QgVElNX0lDUHJlc2NhbGVyOyAgLyohPCBTcGVjaWZpZXMgdGhlIElucHV0IENhcHR1cmUgUHJlc2NhbGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9JbnB1dF9DYXB0dXJlX1ByZXNjYWxlciAqLw0KKw0KKyAgdWludDE2X3QgVElNX0lDRmlsdGVyOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGlucHV0IGNhcHR1cmUgZmlsdGVyLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAweDAgYW5kIDB4RiAqLw0KK30gVElNX0lDSW5pdFR5cGVEZWY7DQorDQorLyoqIA0KKyAgKiBAYnJpZWYgIEJEVFIgc3RydWN0dXJlIGRlZmluaXRpb24gDQorICAqIEBub3RlICAgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBvbmx5IHdpdGggVElNMSBhbmQgVElNOC4gICAgDQorICAqLw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKw0KKyAgdWludDE2X3QgVElNX09TU1JTdGF0ZTsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBPZmYtU3RhdGUgc2VsZWN0aW9uIHVzZWQgaW4gUnVuIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9PU1NSX09mZl9TdGF0ZV9TZWxlY3Rpb25fZm9yX1J1bl9tb2RlX3N0YXRlICovDQorDQorICB1aW50MTZfdCBUSU1fT1NTSVN0YXRlOyAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIE9mZi1TdGF0ZSB1c2VkIGluIElkbGUgc3RhdGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9PU1NJX09mZl9TdGF0ZV9TZWxlY3Rpb25fZm9yX0lkbGVfbW9kZV9zdGF0ZSAqLw0KKw0KKyAgdWludDE2X3QgVElNX0xPQ0tMZXZlbDsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBMT0NLIGxldmVsIHBhcmFtZXRlcnMuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9Mb2NrX2xldmVsICovIA0KKw0KKyAgdWludDE2X3QgVElNX0RlYWRUaW1lOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBkZWxheSB0aW1lIGJldHdlZW4gdGhlIHN3aXRjaGluZy1vZmYgYW5kIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoaW5nLW9uIG9mIHRoZSBvdXRwdXRzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwMCBhbmQgMHhGRiAgKi8NCisNCisgIHVpbnQxNl90IFRJTV9CcmVhazsgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBUSU0gQnJlYWsgaW5wdXQgaXMgZW5hYmxlZCBvciBub3QuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBUSU1fQnJlYWtfSW5wdXRfZW5hYmxlX2Rpc2FibGUgKi8NCisNCisgIHVpbnQxNl90IFRJTV9CcmVha1BvbGFyaXR5OyAgICAvKiE8IFNwZWNpZmllcyB0aGUgVElNIEJyZWFrIElucHV0IHBpbiBwb2xhcml0eS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVElNX0JyZWFrX1BvbGFyaXR5ICovDQorDQorICB1aW50MTZfdCBUSU1fQXV0b21hdGljT3V0cHV0OyAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgVElNIEF1dG9tYXRpYyBPdXRwdXQgZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdC4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFRJTV9BT0VfQml0X1NldF9SZXNldCAqLw0KK30gVElNX0JEVFJJbml0VHlwZURlZjsNCisNCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0V4cG9ydGVkX2NvbnN0YW50cyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJU19USU1fQUxMX1BFUklQSChQRVJJUEgpICgoKFBFUklQSCkgPT0gVElNMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU0zKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU02KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNNykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU05KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNMTApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU0xMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTEyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChQRVJJUEgpID09IFRJTTEzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNMTQpKSkNCisvKiBMSVNUMTogVElNMSwgVElNMiwgVElNMywgVElNNCwgVElNNSwgVElNOCwgVElNOSwgVElNMTAsIFRJTTExLCBUSU0xMiwgVElNMTMgYW5kIFRJTTE0ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIElTX1RJTV9MSVNUMV9QRVJJUEgoUEVSSVBIKSAoKChQRVJJUEgpID09IFRJTTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTgpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTEwKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU0xMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNMTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTEzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU0xNCkpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKy8qIExJU1QyOiBUSU0xLCBUSU0yLCBUSU0zLCBUSU00LCBUSU01LCBUSU04LCBUSU05IGFuZCBUSU0xMiAqLw0KKyNkZWZpbmUgSVNfVElNX0xJU1QyX1BFUklQSChQRVJJUEgpICgoKFBFUklQSCkgPT0gVElNMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNNSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNOCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNOSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNMTIpKQ0KKy8qIExJU1QzOiBUSU0xLCBUSU0yLCBUSU0zLCBUSU00LCBUSU01IGFuZCBUSU04ICovDQorI2RlZmluZSBJU19USU1fTElTVDNfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBUSU0xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU0yKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU0zKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU00KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU01KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBUSU04KSkNCisvKiBMSVNUNDogVElNMSBhbmQgVElNOCAqLw0KKyNkZWZpbmUgSVNfVElNX0xJU1Q0X1BFUklQSChQRVJJUEgpICgoKFBFUklQSCkgPT0gVElNMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVElNOCkpDQorLyogTElTVDU6IFRJTTEsIFRJTTIsIFRJTTMsIFRJTTQsIFRJTTUsIFRJTTYsIFRJTTcgYW5kIFRJTTggKi8NCisjZGVmaW5lIElTX1RJTV9MSVNUNV9QRVJJUEgoUEVSSVBIKSAoKChQRVJJUEgpID09IFRJTTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFRJTTgpKQ0KKy8qIExJU1Q2OiBUSU0yLCBUSU01IGFuZCBUSU0xMSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIElTX1RJTV9MSVNUNl9QRVJJUEgoVElNeCkoKChUSU14KSA9PSBUSU0yKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU14KSA9PSBUSU01KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU14KSA9PSBUSU0xMSkpDQorDQorLyoqIEBkZWZncm91cCBUSU1fT3V0cHV0X0NvbXBhcmVfYW5kX1BXTV9tb2RlcyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fT0NNb2RlX1RpbWluZyAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNX09DTW9kZV9BY3RpdmUgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFRJTV9PQ01vZGVfSW5hY3RpdmUgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBUSU1fT0NNb2RlX1RvZ2dsZSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDMwKQ0KKyNkZWZpbmUgVElNX09DTW9kZV9QV00xICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA2MCkNCisjZGVmaW5lIFRJTV9PQ01vZGVfUFdNMiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNzApDQorI2RlZmluZSBJU19USU1fT0NfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBUSU1fT0NNb2RlX1RpbWluZykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX09DTW9kZV9BY3RpdmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFRJTV9PQ01vZGVfSW5hY3RpdmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFRJTV9PQ01vZGVfVG9nZ2xlKXx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFRJTV9PQ01vZGVfUFdNMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX09DTW9kZV9QV00yKSkNCisjZGVmaW5lIElTX1RJTV9PQ00oTU9ERSkgKCgoTU9ERSkgPT0gVElNX09DTW9kZV9UaW1pbmcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX09DTW9kZV9BY3RpdmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX09DTW9kZV9JbmFjdGl2ZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBUSU1fT0NNb2RlX1RvZ2dsZSl8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFRJTV9PQ01vZGVfUFdNMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBUSU1fT0NNb2RlX1BXTTIpIHx8CVwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX0ZvcmNlZEFjdGlvbl9BY3RpdmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX0ZvcmNlZEFjdGlvbl9JbkFjdGl2ZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX09uZV9QdWxzZV9Nb2RlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9PUE1vZGVfU2luZ2xlICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDgpDQorI2RlZmluZSBUSU1fT1BNb2RlX1JlcGV0aXRpdmUgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfVElNX09QTV9NT0RFKE1PREUpICgoKE1PREUpID09IFRJTV9PUE1vZGVfU2luZ2xlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX09QTW9kZV9SZXBldGl0aXZlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0NoYW5uZWwgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0NoYW5uZWxfMSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9DaGFubmVsXzIgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpDQorI2RlZmluZSBUSU1fQ2hhbm5lbF8zICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgVElNX0NoYW5uZWxfNCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwQykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisjZGVmaW5lIElTX1RJTV9DSEFOTkVMKENIQU5ORUwpICgoKENIQU5ORUwpID09IFRJTV9DaGFubmVsXzEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IFRJTV9DaGFubmVsXzIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IFRJTV9DaGFubmVsXzMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IFRJTV9DaGFubmVsXzQpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyNkZWZpbmUgSVNfVElNX1BXTUlfQ0hBTk5FTChDSEFOTkVMKSAoKChDSEFOTkVMKSA9PSBUSU1fQ2hhbm5lbF8xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IFRJTV9DaGFubmVsXzIpKQ0KKyNkZWZpbmUgSVNfVElNX0NPTVBMRU1FTlRBUllfQ0hBTk5FTChDSEFOTkVMKSAoKChDSEFOTkVMKSA9PSBUSU1fQ2hhbm5lbF8xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENIQU5ORUwpID09IFRJTV9DaGFubmVsXzIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0hBTk5FTCkgPT0gVElNX0NoYW5uZWxfMykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9DbG9ja19EaXZpc2lvbl9DS0QgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0NLRF9ESVYxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9DS0RfRElWMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApDQorI2RlZmluZSBUSU1fQ0tEX0RJVjQgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKQ0KKyNkZWZpbmUgSVNfVElNX0NLRF9ESVYoRElWKSAoKChESVYpID09IFRJTV9DS0RfRElWMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChESVYpID09IFRJTV9DS0RfRElWMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChESVYpID09IFRJTV9DS0RfRElWNCkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0NvdW50ZXJfTW9kZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fQ291bnRlck1vZGVfVXAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNX0NvdW50ZXJNb2RlX0Rvd24gICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFRJTV9Db3VudGVyTW9kZV9DZW50ZXJBbGlnbmVkMSAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBUSU1fQ291bnRlck1vZGVfQ2VudGVyQWxpZ25lZDIgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgVElNX0NvdW50ZXJNb2RlX0NlbnRlckFsaWduZWQzICAgICAoKHVpbnQxNl90KTB4MDA2MCkNCisjZGVmaW5lIElTX1RJTV9DT1VOVEVSX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gVElNX0NvdW50ZXJNb2RlX1VwKSB8fCAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBUSU1fQ291bnRlck1vZGVfRG93bikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBUSU1fQ291bnRlck1vZGVfQ2VudGVyQWxpZ25lZDEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX0NvdW50ZXJNb2RlX0NlbnRlckFsaWduZWQyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IFRJTV9Db3VudGVyTW9kZV9DZW50ZXJBbGlnbmVkMykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9PdXRwdXRfQ29tcGFyZV9Qb2xhcml0eSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fT0NQb2xhcml0eV9IaWdoICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNX09DUG9sYXJpdHlfTG93ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIElTX1RJTV9PQ19QT0xBUklUWShQT0xBUklUWSkgKCgoUE9MQVJJVFkpID09IFRJTV9PQ1BvbGFyaXR5X0hpZ2gpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MQVJJVFkpID09IFRJTV9PQ1BvbGFyaXR5X0xvdykpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX091dHB1dF9Db21wYXJlX05fUG9sYXJpdHkgDQorICAqIEB7DQorICAqLw0KKyAgDQorI2RlZmluZSBUSU1fT0NOUG9sYXJpdHlfSGlnaCAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNX09DTlBvbGFyaXR5X0xvdyAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkNCisjZGVmaW5lIElTX1RJTV9PQ05fUE9MQVJJVFkoUE9MQVJJVFkpICgoKFBPTEFSSVRZKSA9PSBUSU1fT0NOUG9sYXJpdHlfSGlnaCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MQVJJVFkpID09IFRJTV9PQ05Qb2xhcml0eV9Mb3cpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFRJTV9PdXRwdXRfQ29tcGFyZV9TdGF0ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fT3V0cHV0U3RhdGVfRGlzYWJsZSAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNX091dHB1dFN0YXRlX0VuYWJsZSAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkNCisjZGVmaW5lIElTX1RJTV9PVVRQVVRfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBUSU1fT3V0cHV0U3RhdGVfRGlzYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9PdXRwdXRTdGF0ZV9FbmFibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fT3V0cHV0X0NvbXBhcmVfTl9TdGF0ZQ0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9PdXRwdXROU3RhdGVfRGlzYWJsZSAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBUSU1fT3V0cHV0TlN0YXRlX0VuYWJsZSAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgSVNfVElNX09VVFBVVE5fU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBUSU1fT3V0cHV0TlN0YXRlX0Rpc2FibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gVElNX091dHB1dE5TdGF0ZV9FbmFibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fQ2FwdHVyZV9Db21wYXJlX1N0YXRlDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0NDeF9FbmFibGUgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpDQorI2RlZmluZSBUSU1fQ0N4X0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1RJTV9DQ1goQ0NYKSAoKChDQ1gpID09IFRJTV9DQ3hfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0NYKSA9PSBUSU1fQ0N4X0Rpc2FibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fQ2FwdHVyZV9Db21wYXJlX05fU3RhdGUNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fQ0N4Tl9FbmFibGUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkNCisjZGVmaW5lIFRJTV9DQ3hOX0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfVElNX0NDWE4oQ0NYTikgKCgoQ0NYTikgPT0gVElNX0NDeE5fRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDQ1hOKSA9PSBUSU1fQ0N4Tl9EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0JyZWFrX0lucHV0X2VuYWJsZV9kaXNhYmxlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9CcmVha19FbmFibGUgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApDQorI2RlZmluZSBUSU1fQnJlYWtfRGlzYWJsZSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfVElNX0JSRUFLX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gVElNX0JyZWFrX0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gVElNX0JyZWFrX0Rpc2FibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fQnJlYWtfUG9sYXJpdHkgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0JyZWFrUG9sYXJpdHlfTG93ICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9CcmVha1BvbGFyaXR5X0hpZ2ggICAgICAgICAgICAgKCh1aW50MTZfdCkweDIwMDApDQorI2RlZmluZSBJU19USU1fQlJFQUtfUE9MQVJJVFkoUE9MQVJJVFkpICgoKFBPTEFSSVRZKSA9PSBUSU1fQnJlYWtQb2xhcml0eV9Mb3cpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MQVJJVFkpID09IFRJTV9CcmVha1BvbGFyaXR5X0hpZ2gpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fQU9FX0JpdF9TZXRfUmVzZXQgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0F1dG9tYXRpY091dHB1dF9FbmFibGUgICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkNCisjZGVmaW5lIFRJTV9BdXRvbWF0aWNPdXRwdXRfRGlzYWJsZSAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJU19USU1fQVVUT01BVElDX09VVFBVVF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IFRJTV9BdXRvbWF0aWNPdXRwdXRfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9BdXRvbWF0aWNPdXRwdXRfRGlzYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9Mb2NrX2xldmVsDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0xPQ0tMZXZlbF9PRkYgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9MT0NLTGV2ZWxfMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApDQorI2RlZmluZSBUSU1fTE9DS0xldmVsXzIgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKQ0KKyNkZWZpbmUgVElNX0xPQ0tMZXZlbF8zICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkNCisjZGVmaW5lIElTX1RJTV9MT0NLX0xFVkVMKExFVkVMKSAoKChMRVZFTCkgPT0gVElNX0xPQ0tMZXZlbF9PRkYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMRVZFTCkgPT0gVElNX0xPQ0tMZXZlbF8xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVWRUwpID09IFRJTV9MT0NLTGV2ZWxfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFVkVMKSA9PSBUSU1fTE9DS0xldmVsXzMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fT1NTSV9PZmZfU3RhdGVfU2VsZWN0aW9uX2Zvcl9JZGxlX21vZGVfc3RhdGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX09TU0lTdGF0ZV9FbmFibGUgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkNCisjZGVmaW5lIFRJTV9PU1NJU3RhdGVfRGlzYWJsZSAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJU19USU1fT1NTSV9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IFRJTV9PU1NJU3RhdGVfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9PU1NJU3RhdGVfRGlzYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX09TU1JfT2ZmX1N0YXRlX1NlbGVjdGlvbl9mb3JfUnVuX21vZGVfc3RhdGUNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fT1NTUlN0YXRlX0VuYWJsZSAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKQ0KKyNkZWZpbmUgVElNX09TU1JTdGF0ZV9EaXNhYmxlICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1RJTV9PU1NSX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gVElNX09TU1JTdGF0ZV9FbmFibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gVElNX09TU1JTdGF0ZV9EaXNhYmxlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX091dHB1dF9Db21wYXJlX0lkbGVfU3RhdGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX09DSWRsZVN0YXRlX1NldCAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkNCisjZGVmaW5lIFRJTV9PQ0lkbGVTdGF0ZV9SZXNldCAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJU19USU1fT0NJRExFX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gVElNX09DSWRsZVN0YXRlX1NldCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9PQ0lkbGVTdGF0ZV9SZXNldCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9PdXRwdXRfQ29tcGFyZV9OX0lkbGVfU3RhdGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX09DTklkbGVTdGF0ZV9TZXQgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkNCisjZGVmaW5lIFRJTV9PQ05JZGxlU3RhdGVfUmVzZXQgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBJU19USU1fT0NOSURMRV9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IFRJTV9PQ05JZGxlU3RhdGVfU2V0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9PQ05JZGxlU3RhdGVfUmVzZXQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fSW5wdXRfQ2FwdHVyZV9Qb2xhcml0eSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSAgVElNX0lDUG9sYXJpdHlfUmlzaW5nICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgIFRJTV9JQ1BvbGFyaXR5X0ZhbGxpbmcgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lICBUSU1fSUNQb2xhcml0eV9Cb3RoRWRnZSAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEEpDQorI2RlZmluZSBJU19USU1fSUNfUE9MQVJJVFkoUE9MQVJJVFkpICgoKFBPTEFSSVRZKSA9PSBUSU1fSUNQb2xhcml0eV9SaXNpbmcpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MQVJJVFkpID09IFRJTV9JQ1BvbGFyaXR5X0ZhbGxpbmcpfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT0xBUklUWSkgPT0gVElNX0lDUG9sYXJpdHlfQm90aEVkZ2UpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fSW5wdXRfQ2FwdHVyZV9TZWxlY3Rpb24gDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0lDU2VsZWN0aW9uX0RpcmVjdFRJICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkgLyohPCBUSU0gSW5wdXQgMSwgMiwgMyBvciA0IGlzIHNlbGVjdGVkIHRvIGJlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgdG8gSUMxLCBJQzIsIElDMyBvciBJQzQsIHJlc3BlY3RpdmVseSAqLw0KKyNkZWZpbmUgVElNX0lDU2VsZWN0aW9uX0luZGlyZWN0VEkgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikgLyohPCBUSU0gSW5wdXQgMSwgMiwgMyBvciA0IGlzIHNlbGVjdGVkIHRvIGJlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCB0byBJQzIsIElDMSwgSUM0IG9yIElDMywgcmVzcGVjdGl2ZWx5LiAqLw0KKyNkZWZpbmUgVElNX0lDU2VsZWN0aW9uX1RSQyAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMykgLyohPCBUSU0gSW5wdXQgMSwgMiwgMyBvciA0IGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBUUkMuICovDQorI2RlZmluZSBJU19USU1fSUNfU0VMRUNUSU9OKFNFTEVDVElPTikgKCgoU0VMRUNUSU9OKSA9PSBUSU1fSUNTZWxlY3Rpb25fRGlyZWN0VEkpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTRUxFQ1RJT04pID09IFRJTV9JQ1NlbGVjdGlvbl9JbmRpcmVjdFRJKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0VMRUNUSU9OKSA9PSBUSU1fSUNTZWxlY3Rpb25fVFJDKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0lucHV0X0NhcHR1cmVfUHJlc2NhbGVyIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9JQ1BTQ19ESVYxICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITwgQ2FwdHVyZSBwZXJmb3JtZWQgZWFjaCB0aW1lIGFuIGVkZ2UgaXMgZGV0ZWN0ZWQgb24gdGhlIGNhcHR1cmUgaW5wdXQuICovDQorI2RlZmluZSBUSU1fSUNQU0NfRElWMiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KSAvKiE8IENhcHR1cmUgcGVyZm9ybWVkIG9uY2UgZXZlcnkgMiBldmVudHMuICovDQorI2RlZmluZSBUSU1fSUNQU0NfRElWNCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KSAvKiE8IENhcHR1cmUgcGVyZm9ybWVkIG9uY2UgZXZlcnkgNCBldmVudHMuICovDQorI2RlZmluZSBUSU1fSUNQU0NfRElWOCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDBDKSAvKiE8IENhcHR1cmUgcGVyZm9ybWVkIG9uY2UgZXZlcnkgOCBldmVudHMuICovDQorI2RlZmluZSBJU19USU1fSUNfUFJFU0NBTEVSKFBSRVNDQUxFUikgKCgoUFJFU0NBTEVSKSA9PSBUSU1fSUNQU0NfRElWMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gVElNX0lDUFNDX0RJVjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFRJTV9JQ1BTQ19ESVY0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBUSU1fSUNQU0NfRElWOCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9pbnRlcnJ1cHRfc291cmNlcyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fSVRfVXBkYXRlICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgVElNX0lUX0NDMSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIFRJTV9JVF9DQzIgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpDQorI2RlZmluZSBUSU1fSVRfQ0MzICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgVElNX0lUX0NDNCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFRJTV9JVF9DT00gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBUSU1fSVRfVHJpZ2dlciAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgVElNX0lUX0JyZWFrICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkNCisjZGVmaW5lIElTX1RJTV9JVChJVCkgKCgoKElUKSAmICh1aW50MTZfdCkweEZGMDApID09IDB4MDAwMCkgJiYgKChJVCkgIT0gMHgwMDAwKSkNCisNCisjZGVmaW5lIElTX1RJTV9HRVRfSVQoSVQpICgoKElUKSA9PSBUSU1fSVRfVXBkYXRlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gVElNX0lUX0NDMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFRJTV9JVF9DQzIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBUSU1fSVRfQ0MzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gVElNX0lUX0NDNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFRJTV9JVF9DT00pIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBUSU1fSVRfVHJpZ2dlcikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFRJTV9JVF9CcmVhaykpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9ETUFfQmFzZV9hZGRyZXNzIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9ETUFCYXNlX0NSMSAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBUSU1fRE1BQmFzZV9DUjIgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgVElNX0RNQUJhc2VfU01DUiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIFRJTV9ETUFCYXNlX0RJRVIgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDMpDQorI2RlZmluZSBUSU1fRE1BQmFzZV9TUiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgVElNX0RNQUJhc2VfRUdSICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNSkNCisjZGVmaW5lIFRJTV9ETUFCYXNlX0NDTVIxICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDYpDQorI2RlZmluZSBUSU1fRE1BQmFzZV9DQ01SMiAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA3KQ0KKyNkZWZpbmUgVElNX0RNQUJhc2VfQ0NFUiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkNCisjZGVmaW5lIFRJTV9ETUFCYXNlX0NOVCAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDkpDQorI2RlZmluZSBUSU1fRE1BQmFzZV9QU0MgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDBBKQ0KKyNkZWZpbmUgVElNX0RNQUJhc2VfQVJSICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwQikNCisjZGVmaW5lIFRJTV9ETUFCYXNlX1JDUiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEMpDQorI2RlZmluZSBUSU1fRE1BQmFzZV9DQ1IxICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDBEKQ0KKyNkZWZpbmUgVElNX0RNQUJhc2VfQ0NSMiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwRSkNCisjZGVmaW5lIFRJTV9ETUFCYXNlX0NDUjMgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMEYpDQorI2RlZmluZSBUSU1fRE1BQmFzZV9DQ1I0ICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKyNkZWZpbmUgVElNX0RNQUJhc2VfQkRUUiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMSkNCisjZGVmaW5lIFRJTV9ETUFCYXNlX0RDUiAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTIpDQorI2RlZmluZSBUSU1fRE1BQmFzZV9PUiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEzKQ0KKyNkZWZpbmUgSVNfVElNX0RNQV9CQVNFKEJBU0UpICgoKEJBU0UpID09IFRJTV9ETUFCYXNlX0NSMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX0NSMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX1NNQ1IpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQVNFKSA9PSBUSU1fRE1BQmFzZV9ESUVSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFTRSkgPT0gVElNX0RNQUJhc2VfU1IpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQVNFKSA9PSBUSU1fRE1BQmFzZV9FR1IpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQVNFKSA9PSBUSU1fRE1BQmFzZV9DQ01SMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX0NDTVIyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFTRSkgPT0gVElNX0RNQUJhc2VfQ0NFUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX0NOVCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX1BTQykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX0FSUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX1JDUikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX0NDUjEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQVNFKSA9PSBUSU1fRE1BQmFzZV9DQ1IyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFTRSkgPT0gVElNX0RNQUJhc2VfQ0NSMykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBU0UpID09IFRJTV9ETUFCYXNlX0NDUjQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQVNFKSA9PSBUSU1fRE1BQmFzZV9CRFRSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFTRSkgPT0gVElNX0RNQUJhc2VfRENSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFTRSkgPT0gVElNX0RNQUJhc2VfT1IpKSAgICAgICAgICAgICAgICAgICAgIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fRE1BX0J1cnN0X0xlbmd0aCANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMVRyYW5zZmVyICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8yVHJhbnNmZXJzICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKQ0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzNUcmFuc2ZlcnMgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfNFRyYW5zZmVycyAgICAgICAgICAoKHVpbnQxNl90KTB4MDMwMCkNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF81VHJhbnNmZXJzICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKQ0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzZUcmFuc2ZlcnMgICAgICAgICAgKCh1aW50MTZfdCkweDA1MDApDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfN1RyYW5zZmVycyAgICAgICAgICAoKHVpbnQxNl90KTB4MDYwMCkNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF84VHJhbnNmZXJzICAgICAgICAgICgodWludDE2X3QpMHgwNzAwKQ0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzlUcmFuc2ZlcnMgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMTBUcmFuc2ZlcnMgICAgICAgICAoKHVpbnQxNl90KTB4MDkwMCkNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xMVRyYW5zZmVycyAgICAgICAgICgodWludDE2X3QpMHgwQTAwKQ0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzEyVHJhbnNmZXJzICAgICAgICAgKCh1aW50MTZfdCkweDBCMDApDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMTNUcmFuc2ZlcnMgICAgICAgICAoKHVpbnQxNl90KTB4MEMwMCkNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xNFRyYW5zZmVycyAgICAgICAgICgodWludDE2X3QpMHgwRDAwKQ0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzE1VHJhbnNmZXJzICAgICAgICAgKCh1aW50MTZfdCkweDBFMDApDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMTZUcmFuc2ZlcnMgICAgICAgICAoKHVpbnQxNl90KTB4MEYwMCkNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xN1RyYW5zZmVycyAgICAgICAgICgodWludDE2X3QpMHgxMDAwKQ0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzE4VHJhbnNmZXJzICAgICAgICAgKCh1aW50MTZfdCkweDExMDApDQorI2RlZmluZSBJU19USU1fRE1BX0xFTkdUSChMRU5HVEgpICgoKExFTkdUSCkgPT0gVElNX0RNQUJ1cnN0TGVuZ3RoXzFUcmFuc2ZlcikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMRU5HVEgpID09IFRJTV9ETUFCdXJzdExlbmd0aF8yVHJhbnNmZXJzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFTkdUSCkgPT0gVElNX0RNQUJ1cnN0TGVuZ3RoXzNUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfNFRyYW5zZmVycykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMRU5HVEgpID09IFRJTV9ETUFCdXJzdExlbmd0aF81VHJhbnNmZXJzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFTkdUSCkgPT0gVElNX0RNQUJ1cnN0TGVuZ3RoXzZUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfN1RyYW5zZmVycykgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMRU5HVEgpID09IFRJTV9ETUFCdXJzdExlbmd0aF84VHJhbnNmZXJzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExFTkdUSCkgPT0gVElNX0RNQUJ1cnN0TGVuZ3RoXzlUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTBUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTFUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTJUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTNUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTRUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTVUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTZUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMTdUcmFuc2ZlcnMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBUSU1fRE1BQnVyc3RMZW5ndGhfMThUcmFuc2ZlcnMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fRE1BX3NvdXJjZXMgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0RNQV9VcGRhdGUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkNCisjZGVmaW5lIFRJTV9ETUFfQ0MxICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApDQorI2RlZmluZSBUSU1fRE1BX0NDMiAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKQ0KKyNkZWZpbmUgVElNX0RNQV9DQzMgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkNCisjZGVmaW5lIFRJTV9ETUFfQ0M0ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApDQorI2RlZmluZSBUSU1fRE1BX0NPTSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKQ0KKyNkZWZpbmUgVElNX0RNQV9UcmlnZ2VyICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4NDAwMCkNCisjZGVmaW5lIElTX1RJTV9ETUFfU09VUkNFKFNPVVJDRSkgKCgoKFNPVVJDRSkgJiAodWludDE2X3QpMHg4MEZGKSA9PSAweDAwMDApICYmICgoU09VUkNFKSAhPSAweDAwMDApKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fRXh0ZXJuYWxfVHJpZ2dlcl9QcmVzY2FsZXIgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0V4dFRSR1BTQ19PRkYgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9FeHRUUkdQU0NfRElWMiAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApDQorI2RlZmluZSBUSU1fRXh0VFJHUFNDX0RJVjQgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgyMDAwKQ0KKyNkZWZpbmUgVElNX0V4dFRSR1BTQ19ESVY4ICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MzAwMCkNCisjZGVmaW5lIElTX1RJTV9FWFRfUFJFU0NBTEVSKFBSRVNDQUxFUikgKCgoUFJFU0NBTEVSKSA9PSBUSU1fRXh0VFJHUFNDX09GRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFRJTV9FeHRUUkdQU0NfRElWMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFRJTV9FeHRUUkdQU0NfRElWNCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFRJTV9FeHRUUkdQU0NfRElWOCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9JbnRlcm5hbF9UcmlnZ2VyX1NlbGVjdGlvbiANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fVFNfSVRSMCAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNX1RTX0lUUjEgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFRJTV9UU19JVFIyICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBUSU1fVFNfSVRSMyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDMwKQ0KKyNkZWZpbmUgVElNX1RTX1RJMUZfRUQgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkNCisjZGVmaW5lIFRJTV9UU19USTFGUDEgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNTApDQorI2RlZmluZSBUSU1fVFNfVEkyRlAyICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDYwKQ0KKyNkZWZpbmUgVElNX1RTX0VUUkYgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA3MCkNCisjZGVmaW5lIElTX1RJTV9UUklHR0VSX1NFTEVDVElPTihTRUxFQ1RJT04pICgoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX1RJMUZfRUQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX1RJMUZQMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0VMRUNUSU9OKSA9PSBUSU1fVFNfVEkyRlAyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTRUxFQ1RJT04pID09IFRJTV9UU19FVFJGKSkNCisjZGVmaW5lIElTX1RJTV9JTlRFUk5BTF9UUklHR0VSX1NFTEVDVElPTihTRUxFQ1RJT04pICgoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjApIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNFTEVDVElPTikgPT0gVElNX1RTX0lUUjMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fVEl4X0V4dGVybmFsX0Nsb2NrX1NvdXJjZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fVEl4RXh0ZXJuYWxDTEsxU291cmNlX1RJMSAgICAgICgodWludDE2X3QpMHgwMDUwKQ0KKyNkZWZpbmUgVElNX1RJeEV4dGVybmFsQ0xLMVNvdXJjZV9USTIgICAgICAoKHVpbnQxNl90KTB4MDA2MCkNCisjZGVmaW5lIFRJTV9USXhFeHRlcm5hbENMSzFTb3VyY2VfVEkxRUQgICAgKCh1aW50MTZfdCkweDAwNDApDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9FeHRlcm5hbF9UcmlnZ2VyX1BvbGFyaXR5IA0KKyAgKiBAew0KKyAgKi8gDQorI2RlZmluZSBUSU1fRXh0VFJHUG9sYXJpdHlfSW52ZXJ0ZWQgICAgICAgICgodWludDE2X3QpMHg4MDAwKQ0KKyNkZWZpbmUgVElNX0V4dFRSR1BvbGFyaXR5X05vbkludmVydGVkICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1RJTV9FWFRfUE9MQVJJVFkoUE9MQVJJVFkpICgoKFBPTEFSSVRZKSA9PSBUSU1fRXh0VFJHUG9sYXJpdHlfSW52ZXJ0ZWQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPTEFSSVRZKSA9PSBUSU1fRXh0VFJHUG9sYXJpdHlfTm9uSW52ZXJ0ZWQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFRJTV9QcmVzY2FsZXJfUmVsb2FkX01vZGUgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX1BTQ1JlbG9hZE1vZGVfVXBkYXRlICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTV9QU0NSZWxvYWRNb2RlX0ltbWVkaWF0ZSAgICAgICAgKCh1aW50MTZfdCkweDAwMDEpDQorI2RlZmluZSBJU19USU1fUFJFU0NBTEVSX1JFTE9BRChSRUxPQUQpICgoKFJFTE9BRCkgPT0gVElNX1BTQ1JlbG9hZE1vZGVfVXBkYXRlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFTE9BRCkgPT0gVElNX1BTQ1JlbG9hZE1vZGVfSW1tZWRpYXRlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0ZvcmNlZF9BY3Rpb24gDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0ZvcmNlZEFjdGlvbl9BY3RpdmUgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA1MCkNCisjZGVmaW5lIFRJTV9Gb3JjZWRBY3Rpb25fSW5BY3RpdmUgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApDQorI2RlZmluZSBJU19USU1fRk9SQ0VEX0FDVElPTihBQ1RJT04pICgoKEFDVElPTikgPT0gVElNX0ZvcmNlZEFjdGlvbl9BY3RpdmUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQUNUSU9OKSA9PSBUSU1fRm9yY2VkQWN0aW9uX0luQWN0aXZlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0VuY29kZXJfTW9kZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fRW5jb2Rlck1vZGVfVEkxICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgVElNX0VuY29kZXJNb2RlX1RJMiAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIFRJTV9FbmNvZGVyTW9kZV9USTEyICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDMpDQorI2RlZmluZSBJU19USU1fRU5DT0RFUl9NT0RFKE1PREUpICgoKE1PREUpID09IFRJTV9FbmNvZGVyTW9kZV9USTEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX0VuY29kZXJNb2RlX1RJMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBUSU1fRW5jb2Rlck1vZGVfVEkxMikpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKiogQGRlZmdyb3VwIFRJTV9FdmVudF9Tb3VyY2UgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVElNX0V2ZW50U291cmNlX1VwZGF0ZSAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMSkNCisjZGVmaW5lIFRJTV9FdmVudFNvdXJjZV9DQzEgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDIpDQorI2RlZmluZSBUSU1fRXZlbnRTb3VyY2VfQ0MyICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgVElNX0V2ZW50U291cmNlX0NDMyAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkNCisjZGVmaW5lIFRJTV9FdmVudFNvdXJjZV9DQzQgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMTApDQorI2RlZmluZSBUSU1fRXZlbnRTb3VyY2VfQ09NICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKQ0KKyNkZWZpbmUgVElNX0V2ZW50U291cmNlX1RyaWdnZXIgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkNCisjZGVmaW5lIFRJTV9FdmVudFNvdXJjZV9CcmVhayAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwODApDQorI2RlZmluZSBJU19USU1fRVZFTlRfU09VUkNFKFNPVVJDRSkgKCgoKFNPVVJDRSkgJiAodWludDE2X3QpMHhGRjAwKSA9PSAweDAwMDApICYmICgoU09VUkNFKSAhPSAweDAwMDApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9VcGRhdGVfU291cmNlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9VcGRhdGVTb3VyY2VfR2xvYmFsICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApIC8qITwgU291cmNlIG9mIHVwZGF0ZSBpcyB0aGUgY291bnRlciBvdmVyZmxvdy91bmRlcmZsb3cNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIHNldHRpbmcgb2YgVUcgYml0LCBvciBhbiB1cGRhdGUgZ2VuZXJhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBzbGF2ZSBtb2RlIGNvbnRyb2xsZXIuICovDQorI2RlZmluZSBUSU1fVXBkYXRlU291cmNlX1JlZ3VsYXIgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKSAvKiE8IFNvdXJjZSBvZiB1cGRhdGUgaXMgY291bnRlciBvdmVyZmxvdy91bmRlcmZsb3cuICovDQorI2RlZmluZSBJU19USU1fVVBEQVRFX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gVElNX1VwZGF0ZVNvdXJjZV9HbG9iYWwpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBUSU1fVXBkYXRlU291cmNlX1JlZ3VsYXIpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fT3V0cHV0X0NvbXBhcmVfUHJlbG9hZF9TdGF0ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fT0NQcmVsb2FkX0VuYWJsZSAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgVElNX09DUHJlbG9hZF9EaXNhYmxlICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1RJTV9PQ1BSRUxPQURfU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBUSU1fT0NQcmVsb2FkX0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9PQ1ByZWxvYWRfRGlzYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9PdXRwdXRfQ29tcGFyZV9GYXN0X1N0YXRlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9PQ0Zhc3RfRW5hYmxlICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpDQorI2RlZmluZSBUSU1fT0NGYXN0X0Rpc2FibGUgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfVElNX09DRkFTVF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IFRJTV9PQ0Zhc3RfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVEFURSkgPT0gVElNX09DRmFzdF9EaXNhYmxlKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9PdXRwdXRfQ29tcGFyZV9DbGVhcl9TdGF0ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fT0NDbGVhcl9FbmFibGUgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKQ0KKyNkZWZpbmUgVElNX09DQ2xlYXJfRGlzYWJsZSAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1RJTV9PQ0NMRUFSX1NUQVRFKFNUQVRFKSAoKChTVEFURSkgPT0gVElNX09DQ2xlYXJfRW5hYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9PQ0NsZWFyX0Rpc2FibGUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fVHJpZ2dlcl9PdXRwdXRfU291cmNlIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9UUkdPU291cmNlX1Jlc2V0ICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBUSU1fVFJHT1NvdXJjZV9FbmFibGUgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKyNkZWZpbmUgVElNX1RSR09Tb3VyY2VfVXBkYXRlICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAyMCkNCisjZGVmaW5lIFRJTV9UUkdPU291cmNlX09DMSAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMzApDQorI2RlZmluZSBUSU1fVFJHT1NvdXJjZV9PQzFSZWYgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgVElNX1RSR09Tb3VyY2VfT0MyUmVmICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA1MCkNCisjZGVmaW5lIFRJTV9UUkdPU291cmNlX09DM1JlZiAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNjApDQorI2RlZmluZSBUSU1fVFJHT1NvdXJjZV9PQzRSZWYgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDcwKQ0KKyNkZWZpbmUgSVNfVElNX1RSR09fU09VUkNFKFNPVVJDRSkgKCgoU09VUkNFKSA9PSBUSU1fVFJHT1NvdXJjZV9SZXNldCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBUSU1fVFJHT1NvdXJjZV9FbmFibGUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gVElNX1RSR09Tb3VyY2VfVXBkYXRlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFRJTV9UUkdPU291cmNlX09DMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBUSU1fVFJHT1NvdXJjZV9PQzFSZWYpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gVElNX1RSR09Tb3VyY2VfT0MyUmVmKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFRJTV9UUkdPU291cmNlX09DM1JlZikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBUSU1fVFJHT1NvdXJjZV9PQzRSZWYpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fU2xhdmVfTW9kZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fU2xhdmVNb2RlX1Jlc2V0ICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgVElNX1NsYXZlTW9kZV9HYXRlZCAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNSkNCisjZGVmaW5lIFRJTV9TbGF2ZU1vZGVfVHJpZ2dlciAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDYpDQorI2RlZmluZSBUSU1fU2xhdmVNb2RlX0V4dGVybmFsMSAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA3KQ0KKyNkZWZpbmUgSVNfVElNX1NMQVZFX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gVElNX1NsYXZlTW9kZV9SZXNldCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX1NsYXZlTW9kZV9HYXRlZCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVElNX1NsYXZlTW9kZV9UcmlnZ2VyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBUSU1fU2xhdmVNb2RlX0V4dGVybmFsMSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFRJTV9NYXN0ZXJfU2xhdmVfTW9kZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fTWFzdGVyU2xhdmVNb2RlX0VuYWJsZSAgICAgICAgICgodWludDE2X3QpMHgwMDgwKQ0KKyNkZWZpbmUgVElNX01hc3RlclNsYXZlTW9kZV9EaXNhYmxlICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIElTX1RJTV9NU01fU1RBVEUoU1RBVEUpICgoKFNUQVRFKSA9PSBUSU1fTWFzdGVyU2xhdmVNb2RlX0VuYWJsZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1RBVEUpID09IFRJTV9NYXN0ZXJTbGF2ZU1vZGVfRGlzYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisvKiogQGRlZmdyb3VwIFRJTV9SZW1hcCANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU0yX1RJTThfVFJHTyAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVElNMl9FVEhfUFRQICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQwMCkNCisjZGVmaW5lIFRJTTJfVVNCRlNfU09GICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApDQorI2RlZmluZSBUSU0yX1VTQkhTX1NPRiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwQzAwKQ0KKw0KKyNkZWZpbmUgVElNNV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFRJTTVfTFNJICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwNDApDQorI2RlZmluZSBUSU01X0xTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKQ0KKyNkZWZpbmUgVElNNV9SVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDBDMCkNCisNCisjZGVmaW5lIFRJTTExX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBUSU0xMV9IU0UgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKQ0KKw0KKyNkZWZpbmUgSVNfVElNX1JFTUFQKFRJTV9SRU1BUCkJICgoKFRJTV9SRU1BUCkgPT0gVElNMl9USU04X1RSR08pfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU0yX0VUSF9QVFApfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU0yX1VTQkZTX1NPRil8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTTJfVVNCSFNfU09GKXx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNNV9HUElPKXx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNNV9MU0kpfHxcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVElNX1JFTUFQKSA9PSBUSU01X0xTRSl8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTTVfUlRDKXx8XA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRJTV9SRU1BUCkgPT0gVElNMTFfR1BJTyl8fFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUSU1fUkVNQVApID09IFRJTTExX0hTRSkpDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisvKiogQGRlZmdyb3VwIFRJTV9GbGFncyANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBUSU1fRkxBR19VcGRhdGUgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgVElNX0ZMQUdfQ0MxICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMikNCisjZGVmaW5lIFRJTV9GTEFHX0NDMiAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDQpDQorI2RlZmluZSBUSU1fRkxBR19DQzMgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgVElNX0ZMQUdfQ0M0ICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFRJTV9GTEFHX0NPTSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjApDQorI2RlZmluZSBUSU1fRkxBR19UcmlnZ2VyICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgVElNX0ZMQUdfQnJlYWsgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkNCisjZGVmaW5lIFRJTV9GTEFHX0NDMU9GICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAyMDApDQorI2RlZmluZSBUSU1fRkxBR19DQzJPRiAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKQ0KKyNkZWZpbmUgVElNX0ZMQUdfQ0MzT0YgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDgwMCkNCisjZGVmaW5lIFRJTV9GTEFHX0NDNE9GICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDEwMDApDQorI2RlZmluZSBJU19USU1fR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gVElNX0ZMQUdfVXBkYXRlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ0MxKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ0MyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ0MzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ0M0KSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ09NKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfVHJpZ2dlcikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFRJTV9GTEFHX0JyZWFrKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ0MxT0YpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBUSU1fRkxBR19DQzJPRikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFRJTV9GTEFHX0NDM09GKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gVElNX0ZMQUdfQ0M0T0YpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fSW5wdXRfQ2FwdHVyZV9GaWxlcl9WYWx1ZSANCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBJU19USU1fSUNfRklMVEVSKElDRklMVEVSKSAoKElDRklMVEVSKSA8PSAweEYpIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fRXh0ZXJuYWxfVHJpZ2dlcl9GaWx0ZXIgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgSVNfVElNX0VYVF9GSUxURVIoRVhURklMVEVSKSAoKEVYVEZJTFRFUikgPD0gMHhGKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBUSU1fTGVnYWN5IA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xQnl0ZSAgICAgICAgICAgVElNX0RNQUJ1cnN0TGVuZ3RoXzFUcmFuc2Zlcg0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzJCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfMlRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzNCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfM1RyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzRCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfNFRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzVCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfNVRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzZCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfNlRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzdCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfN1RyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzhCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfOFRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzlCeXRlcyAgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfOVRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzEwQnl0ZXMgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfMTBUcmFuc2ZlcnMNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xMUJ5dGVzICAgICAgICAgVElNX0RNQUJ1cnN0TGVuZ3RoXzExVHJhbnNmZXJzDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMTJCeXRlcyAgICAgICAgIFRJTV9ETUFCdXJzdExlbmd0aF8xMlRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzEzQnl0ZXMgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfMTNUcmFuc2ZlcnMNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xNEJ5dGVzICAgICAgICAgVElNX0RNQUJ1cnN0TGVuZ3RoXzE0VHJhbnNmZXJzDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMTVCeXRlcyAgICAgICAgIFRJTV9ETUFCdXJzdExlbmd0aF8xNVRyYW5zZmVycw0KKyNkZWZpbmUgVElNX0RNQUJ1cnN0TGVuZ3RoXzE2Qnl0ZXMgICAgICAgICBUSU1fRE1BQnVyc3RMZW5ndGhfMTZUcmFuc2ZlcnMNCisjZGVmaW5lIFRJTV9ETUFCdXJzdExlbmd0aF8xN0J5dGVzICAgICAgICAgVElNX0RNQUJ1cnN0TGVuZ3RoXzE3VHJhbnNmZXJzDQorI2RlZmluZSBUSU1fRE1BQnVyc3RMZW5ndGhfMThCeXRlcyAgICAgICAgIFRJTV9ETUFCdXJzdExlbmd0aF8xOFRyYW5zZmVycw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyANCisNCisvKiBUaW1lQmFzZSBtYW5hZ2VtZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVElNX0RlSW5pdChUSU1fVHlwZURlZiogVElNeCk7DQordm9pZCBUSU1fVGltZUJhc2VJbml0KFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fVGltZUJhc2VJbml0VHlwZURlZiogVElNX1RpbWVCYXNlSW5pdFN0cnVjdCk7DQordm9pZCBUSU1fVGltZUJhc2VTdHJ1Y3RJbml0KFRJTV9UaW1lQmFzZUluaXRUeXBlRGVmKiBUSU1fVGltZUJhc2VJbml0U3RydWN0KTsNCit2b2lkIFRJTV9QcmVzY2FsZXJDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFByZXNjYWxlciwgdWludDE2X3QgVElNX1BTQ1JlbG9hZE1vZGUpOw0KK3ZvaWQgVElNX0NvdW50ZXJNb2RlQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fQ291bnRlck1vZGUpOw0KK3ZvaWQgVElNX1NldENvdW50ZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQzMl90IENvdW50ZXIpOw0KK3ZvaWQgVElNX1NldEF1dG9yZWxvYWQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQzMl90IEF1dG9yZWxvYWQpOw0KK3VpbnQzMl90IFRJTV9HZXRDb3VudGVyKFRJTV9UeXBlRGVmKiBUSU14KTsNCit1aW50MTZfdCBUSU1fR2V0UHJlc2NhbGVyKFRJTV9UeXBlRGVmKiBUSU14KTsNCit2b2lkIFRJTV9VcGRhdGVEaXNhYmxlQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgVElNX1VwZGF0ZVJlcXVlc3RDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9VcGRhdGVTb3VyY2UpOw0KK3ZvaWQgVElNX0FSUlByZWxvYWRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBUSU1fU2VsZWN0T25lUHVsc2VNb2RlKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT1BNb2RlKTsNCit2b2lkIFRJTV9TZXRDbG9ja0RpdmlzaW9uKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fQ0tEKTsNCit2b2lkIFRJTV9DbWQoVElNX1R5cGVEZWYqIFRJTXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogT3V0cHV0IENvbXBhcmUgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFRJTV9PQzFJbml0KFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fT0NJbml0VHlwZURlZiogVElNX09DSW5pdFN0cnVjdCk7DQordm9pZCBUSU1fT0MySW5pdChUSU1fVHlwZURlZiogVElNeCwgVElNX09DSW5pdFR5cGVEZWYqIFRJTV9PQ0luaXRTdHJ1Y3QpOw0KK3ZvaWQgVElNX09DM0luaXQoVElNX1R5cGVEZWYqIFRJTXgsIFRJTV9PQ0luaXRUeXBlRGVmKiBUSU1fT0NJbml0U3RydWN0KTsNCit2b2lkIFRJTV9PQzRJbml0KFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fT0NJbml0VHlwZURlZiogVElNX09DSW5pdFN0cnVjdCk7DQordm9pZCBUSU1fT0NTdHJ1Y3RJbml0KFRJTV9PQ0luaXRUeXBlRGVmKiBUSU1fT0NJbml0U3RydWN0KTsNCit2b2lkIFRJTV9TZWxlY3RPQ3hNKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fQ2hhbm5lbCwgdWludDE2X3QgVElNX09DTW9kZSk7DQordm9pZCBUSU1fU2V0Q29tcGFyZTEoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQzMl90IENvbXBhcmUxKTsNCit2b2lkIFRJTV9TZXRDb21wYXJlMihUSU1fVHlwZURlZiogVElNeCwgdWludDMyX3QgQ29tcGFyZTIpOw0KK3ZvaWQgVElNX1NldENvbXBhcmUzKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MzJfdCBDb21wYXJlMyk7DQordm9pZCBUSU1fU2V0Q29tcGFyZTQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQzMl90IENvbXBhcmU0KTsNCit2b2lkIFRJTV9Gb3JjZWRPQzFDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9Gb3JjZWRBY3Rpb24pOw0KK3ZvaWQgVElNX0ZvcmNlZE9DMkNvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0ZvcmNlZEFjdGlvbik7DQordm9pZCBUSU1fRm9yY2VkT0MzQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRm9yY2VkQWN0aW9uKTsNCit2b2lkIFRJTV9Gb3JjZWRPQzRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9Gb3JjZWRBY3Rpb24pOw0KK3ZvaWQgVElNX09DMVByZWxvYWRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1ByZWxvYWQpOw0KK3ZvaWQgVElNX09DMlByZWxvYWRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1ByZWxvYWQpOw0KK3ZvaWQgVElNX09DM1ByZWxvYWRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1ByZWxvYWQpOw0KK3ZvaWQgVElNX09DNFByZWxvYWRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1ByZWxvYWQpOw0KK3ZvaWQgVElNX09DMUZhc3RDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0Zhc3QpOw0KK3ZvaWQgVElNX09DMkZhc3RDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0Zhc3QpOw0KK3ZvaWQgVElNX09DM0Zhc3RDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0Zhc3QpOw0KK3ZvaWQgVElNX09DNEZhc3RDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0Zhc3QpOw0KK3ZvaWQgVElNX0NsZWFyT0MxUmVmKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NDbGVhcik7DQordm9pZCBUSU1fQ2xlYXJPQzJSZWYoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0NsZWFyKTsNCit2b2lkIFRJTV9DbGVhck9DM1JlZihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DQ2xlYXIpOw0KK3ZvaWQgVElNX0NsZWFyT0M0UmVmKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NDbGVhcik7DQordm9pZCBUSU1fT0MxUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1BvbGFyaXR5KTsNCit2b2lkIFRJTV9PQzFOUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ05Qb2xhcml0eSk7DQordm9pZCBUSU1fT0MyUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1BvbGFyaXR5KTsNCit2b2lkIFRJTV9PQzJOUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ05Qb2xhcml0eSk7DQordm9pZCBUSU1fT0MzUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1BvbGFyaXR5KTsNCit2b2lkIFRJTV9PQzNOUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ05Qb2xhcml0eSk7DQordm9pZCBUSU1fT0M0UG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1BvbGFyaXR5KTsNCit2b2lkIFRJTV9DQ3hDbWQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9DaGFubmVsLCB1aW50MTZfdCBUSU1fQ0N4KTsNCit2b2lkIFRJTV9DQ3hOQ21kKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fQ2hhbm5lbCwgdWludDE2X3QgVElNX0NDeE4pOw0KKw0KKy8qIElucHV0IENhcHR1cmUgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBUSU1fSUNJbml0KFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fSUNJbml0VHlwZURlZiogVElNX0lDSW5pdFN0cnVjdCk7DQordm9pZCBUSU1fSUNTdHJ1Y3RJbml0KFRJTV9JQ0luaXRUeXBlRGVmKiBUSU1fSUNJbml0U3RydWN0KTsNCit2b2lkIFRJTV9QV01JQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fSUNJbml0VHlwZURlZiogVElNX0lDSW5pdFN0cnVjdCk7DQordWludDMyX3QgVElNX0dldENhcHR1cmUxKFRJTV9UeXBlRGVmKiBUSU14KTsNCit1aW50MzJfdCBUSU1fR2V0Q2FwdHVyZTIoVElNX1R5cGVEZWYqIFRJTXgpOw0KK3VpbnQzMl90IFRJTV9HZXRDYXB0dXJlMyhUSU1fVHlwZURlZiogVElNeCk7DQordWludDMyX3QgVElNX0dldENhcHR1cmU0KFRJTV9UeXBlRGVmKiBUSU14KTsNCit2b2lkIFRJTV9TZXRJQzFQcmVzY2FsZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BTQyk7DQordm9pZCBUSU1fU2V0SUMyUHJlc2NhbGVyKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fSUNQU0MpOw0KK3ZvaWQgVElNX1NldElDM1ByZXNjYWxlcihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lDUFNDKTsNCit2b2lkIFRJTV9TZXRJQzRQcmVzY2FsZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BTQyk7DQorDQorLyogQWR2YW5jZWQtY29udHJvbCB0aW1lcnMgKFRJTTEgYW5kIFRJTTgpIHNwZWNpZmljIGZlYXR1cmVzICoqKioqKioqKioqKioqKioqKi8NCit2b2lkIFRJTV9CRFRSQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fQkRUUkluaXRUeXBlRGVmICpUSU1fQkRUUkluaXRTdHJ1Y3QpOw0KK3ZvaWQgVElNX0JEVFJTdHJ1Y3RJbml0KFRJTV9CRFRSSW5pdFR5cGVEZWYqIFRJTV9CRFRSSW5pdFN0cnVjdCk7DQordm9pZCBUSU1fQ3RybFBXTU91dHB1dHMoVElNX1R5cGVEZWYqIFRJTXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBUSU1fU2VsZWN0Q09NKFRJTV9UeXBlRGVmKiBUSU14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgVElNX0NDUHJlbG9hZENvbnRyb2woVElNX1R5cGVEZWYqIFRJTXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogSW50ZXJydXB0cywgRE1BIGFuZCBmbGFncyBtYW5hZ2VtZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFRJTV9JVENvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgVElNX0dlbmVyYXRlRXZlbnQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9FdmVudFNvdXJjZSk7DQorRmxhZ1N0YXR1cyBUSU1fR2V0RmxhZ1N0YXR1cyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0ZMQUcpOw0KK3ZvaWQgVElNX0NsZWFyRmxhZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0ZMQUcpOw0KK0lUU3RhdHVzIFRJTV9HZXRJVFN0YXR1cyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lUKTsNCit2b2lkIFRJTV9DbGVhcklUUGVuZGluZ0JpdChUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lUKTsNCit2b2lkIFRJTV9ETUFDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9ETUFCYXNlLCB1aW50MTZfdCBUSU1fRE1BQnVyc3RMZW5ndGgpOw0KK3ZvaWQgVElNX0RNQUNtZChUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0RNQVNvdXJjZSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFRJTV9TZWxlY3RDQ0RNQShUSU1fVHlwZURlZiogVElNeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBDbG9ja3MgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVElNX0ludGVybmFsQ2xvY2tDb25maWcoVElNX1R5cGVEZWYqIFRJTXgpOw0KK3ZvaWQgVElNX0lUUnhFeHRlcm5hbENsb2NrQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fSW5wdXRUcmlnZ2VyU291cmNlKTsNCit2b2lkIFRJTV9USXhFeHRlcm5hbENsb2NrQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fVEl4RXh0ZXJuYWxDTEtTb3VyY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNQb2xhcml0eSwgdWludDE2X3QgSUNGaWx0ZXIpOw0KK3ZvaWQgVElNX0VUUkNsb2NrTW9kZTFDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9FeHRUUkdQcmVzY2FsZXIsIHVpbnQxNl90IFRJTV9FeHRUUkdQb2xhcml0eSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IEV4dFRSR0ZpbHRlcik7DQordm9pZCBUSU1fRVRSQ2xvY2tNb2RlMkNvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0V4dFRSR1ByZXNjYWxlciwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fRXh0VFJHUG9sYXJpdHksIHVpbnQxNl90IEV4dFRSR0ZpbHRlcik7DQorDQorLyogU3luY2hyb25pemF0aW9uIG1hbmFnZW1lbnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFRJTV9TZWxlY3RJbnB1dFRyaWdnZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JbnB1dFRyaWdnZXJTb3VyY2UpOw0KK3ZvaWQgVElNX1NlbGVjdE91dHB1dFRyaWdnZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9UUkdPU291cmNlKTsNCit2b2lkIFRJTV9TZWxlY3RTbGF2ZU1vZGUoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9TbGF2ZU1vZGUpOw0KK3ZvaWQgVElNX1NlbGVjdE1hc3RlclNsYXZlTW9kZShUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX01hc3RlclNsYXZlTW9kZSk7DQordm9pZCBUSU1fRVRSQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRXh0VFJHUHJlc2NhbGVyLCB1aW50MTZfdCBUSU1fRXh0VFJHUG9sYXJpdHksDQorICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IEV4dFRSR0ZpbHRlcik7DQorDQorLyogU3BlY2lmaWMgaW50ZXJmYWNlIG1hbmFnZW1lbnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICANCit2b2lkIFRJTV9FbmNvZGVySW50ZXJmYWNlQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRW5jb2Rlck1vZGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUMxUG9sYXJpdHksIHVpbnQxNl90IFRJTV9JQzJQb2xhcml0eSk7DQordm9pZCBUSU1fU2VsZWN0SGFsbFNlbnNvcihUSU1fVHlwZURlZiogVElNeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBTcGVjaWZpYyByZW1hcHBpbmcgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVElNX1JlbWFwQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fUmVtYXApOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLypfX1NUTTMyRjJ4eF9USU1fSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF91c2FydC5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF91c2FydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjdhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9pbmMvc3RtMzJmMnh4X3VzYXJ0LmgKQEAgLTAsMCArMSw0MjkgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF91c2FydC5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFVTQVJUIA0KKyAgKiAgICAgICAgICBmaXJtd2FyZSBsaWJyYXJ5Lg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovIA0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9VU0FSVF9IDQorI2RlZmluZSBfX1NUTTMyRjJ4eF9VU0FSVF9IDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgVVNBUlQNCisgICogQHsNCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKw0KKy8qKiANCisgICogQGJyaWVmICBVU0FSVCBJbml0IFN0cnVjdHVyZSBkZWZpbml0aW9uICANCisgICovIA0KKyAgDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1aW50MzJfdCBVU0FSVF9CYXVkUmF0ZTsgICAgICAgICAgICAvKiE8IFRoaXMgbWVtYmVyIGNvbmZpZ3VyZXMgdGhlIFVTQVJUIGNvbW11bmljYXRpb24gYmF1ZCByYXRlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYmF1ZCByYXRlIGlzIGNvbXB1dGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW50ZWdlckRpdmlkZXIgPSAoKFBDTEt4KSAvICg4ICogKE9WUjgrMSkgKiAoVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfQmF1ZFJhdGUpKSkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRnJhY3Rpb25hbERpdmlkZXIgPSAoKEludGVnZXJEaXZpZGVyIC0gKCh1MzIpIEludGVnZXJEaXZpZGVyKSkgKiA4ICogKE9WUjgrMSkpICsgMC41IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVyZSBPVlI4IGlzIHRoZSAib3ZlcnNhbXBsaW5nIGJ5IDggbW9kZSIgY29uZmlndXJhdGlvbiBiaXQgaW4gdGhlIENSMSByZWdpc3Rlci4gKi8NCisNCisgIHVpbnQxNl90IFVTQVJUX1dvcmRMZW5ndGg7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkIGluIGEgZnJhbWUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVVNBUlRfV29yZF9MZW5ndGggKi8NCisNCisgIHVpbnQxNl90IFVTQVJUX1N0b3BCaXRzOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc3RvcCBiaXRzIHRyYW5zbWl0dGVkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFVTQVJUX1N0b3BfQml0cyAqLw0KKw0KKyAgdWludDE2X3QgVVNBUlRfUGFyaXR5OyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHBhcml0eSBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFVTQVJUX1Bhcml0eQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZSBXaGVuIHBhcml0eSBpcyBlbmFibGVkLCB0aGUgY29tcHV0ZWQgcGFyaXR5IGlzIGluc2VydGVkDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBNU0IgcG9zaXRpb24gb2YgdGhlIHRyYW5zbWl0dGVkIGRhdGEgKDl0aCBiaXQgd2hlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgd29yZCBsZW5ndGggaXMgc2V0IHRvIDkgZGF0YSBiaXRzOyA4dGggYml0IHdoZW4gdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgbGVuZ3RoIGlzIHNldCB0byA4IGRhdGEgYml0cykuICovDQorIA0KKyAgdWludDE2X3QgVVNBUlRfTW9kZTsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2V0aGVyIHRoZSBSZWNlaXZlIG9yIFRyYW5zbWl0IG1vZGUgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBVU0FSVF9Nb2RlICovDQorDQorICB1aW50MTZfdCBVU0FSVF9IYXJkd2FyZUZsb3dDb250cm9sOyAvKiE8IFNwZWNpZmllcyB3ZXRoZXIgdGhlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBtb2RlIGlzIGVuYWJsZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZGlzYWJsZWQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgVVNBUlRfSGFyZHdhcmVfRmxvd19Db250cm9sICovDQorfSBVU0FSVF9Jbml0VHlwZURlZjsNCisNCisvKiogDQorICAqIEBicmllZiAgVVNBUlQgQ2xvY2sgSW5pdCBTdHJ1Y3R1cmUgZGVmaW5pdGlvbiAgDQorICAqLyANCisgIA0KK3R5cGVkZWYgc3RydWN0DQorew0KKw0KKyAgdWludDE2X3QgVVNBUlRfQ2xvY2s7ICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgVVNBUlQgY2xvY2sgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBVU0FSVF9DbG9jayAqLw0KKw0KKyAgdWludDE2X3QgVVNBUlRfQ1BPTDsgICAgLyohPCBTcGVjaWZpZXMgdGhlIHN0ZWFkeSBzdGF0ZSBvZiB0aGUgc2VyaWFsIGNsb2NrLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFVTQVJUX0Nsb2NrX1BvbGFyaXR5ICovDQorDQorICB1aW50MTZfdCBVU0FSVF9DUEhBOyAgICAvKiE8IFNwZWNpZmllcyB0aGUgY2xvY2sgdHJhbnNpdGlvbiBvbiB3aGljaCB0aGUgYml0IGNhcHR1cmUgaXMgbWFkZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBVU0FSVF9DbG9ja19QaGFzZSAqLw0KKw0KKyAgdWludDE2X3QgVVNBUlRfTGFzdEJpdDsgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgY2xvY2sgcHVsc2UgY29ycmVzcG9uZGluZyB0byB0aGUgbGFzdCB0cmFuc21pdHRlZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIGJpdCAoTVNCKSBoYXMgdG8gYmUgb3V0cHV0IG9uIHRoZSBTQ0xLIHBpbiBpbiBzeW5jaHJvbm91cyBtb2RlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFVTQVJUX0xhc3RfQml0ICovDQorfSBVU0FSVF9DbG9ja0luaXRUeXBlRGVmOw0KKw0KKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9FeHBvcnRlZF9Db25zdGFudHMNCisgICogQHsNCisgICovIA0KKyAgDQorI2RlZmluZSBJU19VU0FSVF9BTExfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBVU0FSVDEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFVTQVJUMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVVNBUlQzKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBVQVJUNCkgIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQRVJJUEgpID09IFVBUlQ1KSAgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBFUklQSCkgPT0gVVNBUlQ2KSkNCisNCisjZGVmaW5lIElTX1VTQVJUXzEyMzZfUEVSSVBIKFBFUklQSCkgKCgoUEVSSVBIKSA9PSBVU0FSVDEpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBVU0FSVDIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBVU0FSVDMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEVSSVBIKSA9PSBVU0FSVDYpKQ0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfV29yZF9MZW5ndGggDQorICAqIEB7DQorICAqLyANCisgIA0KKyNkZWZpbmUgVVNBUlRfV29yZExlbmd0aF84YiAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVVNBUlRfV29yZExlbmd0aF85YiAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgxMDAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyNkZWZpbmUgSVNfVVNBUlRfV09SRF9MRU5HVEgoTEVOR1RIKSAoKChMRU5HVEgpID09IFVTQVJUX1dvcmRMZW5ndGhfOGIpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBVU0FSVF9Xb3JkTGVuZ3RoXzliKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfU3RvcF9CaXRzIA0KKyAgKiBAew0KKyAgKi8gDQorICANCisjZGVmaW5lIFVTQVJUX1N0b3BCaXRzXzEgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFVTQVJUX1N0b3BCaXRzXzBfNSAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MTAwMCkNCisjZGVmaW5lIFVTQVJUX1N0b3BCaXRzXzIgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MjAwMCkNCisjZGVmaW5lIFVTQVJUX1N0b3BCaXRzXzFfNSAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MzAwMCkNCisjZGVmaW5lIElTX1VTQVJUX1NUT1BCSVRTKFNUT1BCSVRTKSAoKChTVE9QQklUUykgPT0gVVNBUlRfU3RvcEJpdHNfMSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUT1BCSVRTKSA9PSBVU0FSVF9TdG9wQml0c18wXzUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTVE9QQklUUykgPT0gVVNBUlRfU3RvcEJpdHNfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUT1BCSVRTKSA9PSBVU0FSVF9TdG9wQml0c18xXzUpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9QYXJpdHkgDQorICAqIEB7DQorICAqLyANCisgIA0KKyNkZWZpbmUgVVNBUlRfUGFyaXR5X05vICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVVNBUlRfUGFyaXR5X0V2ZW4gICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKQ0KKyNkZWZpbmUgVVNBUlRfUGFyaXR5X09kZCAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNjAwKSANCisjZGVmaW5lIElTX1VTQVJUX1BBUklUWShQQVJJVFkpICgoKFBBUklUWSkgPT0gVVNBUlRfUGFyaXR5X05vKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQQVJJVFkpID09IFVTQVJUX1Bhcml0eV9FdmVuKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQQVJJVFkpID09IFVTQVJUX1Bhcml0eV9PZGQpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9Nb2RlIA0KKyAgKiBAew0KKyAgKi8gDQorICANCisjZGVmaW5lIFVTQVJUX01vZGVfUnggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwNCkNCisjZGVmaW5lIFVTQVJUX01vZGVfVHggICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwOCkNCisjZGVmaW5lIElTX1VTQVJUX01PREUoTU9ERSkgKCgoKE1PREUpICYgKHVpbnQxNl90KTB4RkZGMykgPT0gMHgwMCkgJiYgKChNT0RFKSAhPSAodWludDE2X3QpMHgwMCkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFVTQVJUX0hhcmR3YXJlX0Zsb3dfQ29udHJvbCANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgVVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbF9Ob25lICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbF9SVFMgICAgICAgICgodWludDE2X3QpMHgwMTAwKQ0KKyNkZWZpbmUgVVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbF9DVFMgICAgICAgICgodWludDE2X3QpMHgwMjAwKQ0KKyNkZWZpbmUgVVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbF9SVFNfQ1RTICAgICgodWludDE2X3QpMHgwMzAwKQ0KKyNkZWZpbmUgSVNfVVNBUlRfSEFSRFdBUkVfRkxPV19DT05UUk9MKENPTlRST0wpXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKENPTlRST0wpID09IFVTQVJUX0hhcmR3YXJlRmxvd0NvbnRyb2xfTm9uZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENPTlRST0wpID09IFVTQVJUX0hhcmR3YXJlRmxvd0NvbnRyb2xfUlRTKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ09OVFJPTCkgPT0gVVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbF9DVFMpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05UUk9MKSA9PSBVU0FSVF9IYXJkd2FyZUZsb3dDb250cm9sX1JUU19DVFMpKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9DbG9jayANCisgICogQHsNCisgICovIA0KKyNkZWZpbmUgVVNBUlRfQ2xvY2tfRGlzYWJsZSAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVVNBUlRfQ2xvY2tfRW5hYmxlICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwODAwKQ0KKyNkZWZpbmUgSVNfVVNBUlRfQ0xPQ0soQ0xPQ0spICgoKENMT0NLKSA9PSBVU0FSVF9DbG9ja19EaXNhYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0xPQ0spID09IFVTQVJUX0Nsb2NrX0VuYWJsZSkpDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFVTQVJUX0Nsb2NrX1BvbGFyaXR5IA0KKyAgKiBAew0KKyAgKi8NCisgIA0KKyNkZWZpbmUgVVNBUlRfQ1BPTF9Mb3cgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgVVNBUlRfQ1BPTF9IaWdoICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwNDAwKQ0KKyNkZWZpbmUgSVNfVVNBUlRfQ1BPTChDUE9MKSAoKChDUE9MKSA9PSBVU0FSVF9DUE9MX0xvdykgfHwgKChDUE9MKSA9PSBVU0FSVF9DUE9MX0hpZ2gpKQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9DbG9ja19QaGFzZQ0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFVTQVJUX0NQSEFfMUVkZ2UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFVTQVJUX0NQSEFfMkVkZ2UgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDIwMCkNCisjZGVmaW5lIElTX1VTQVJUX0NQSEEoQ1BIQSkgKCgoQ1BIQSkgPT0gVVNBUlRfQ1BIQV8xRWRnZSkgfHwgKChDUEhBKSA9PSBVU0FSVF9DUEhBXzJFZGdlKSkNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9MYXN0X0JpdA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFVTQVJUX0xhc3RCaXRfRGlzYWJsZSAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAwMCkNCisjZGVmaW5lIFVTQVJUX0xhc3RCaXRfRW5hYmxlICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDEwMCkNCisjZGVmaW5lIElTX1VTQVJUX0xBU1RCSVQoTEFTVEJJVCkgKCgoTEFTVEJJVCkgPT0gVVNBUlRfTGFzdEJpdF9EaXNhYmxlKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExBU1RCSVQpID09IFVTQVJUX0xhc3RCaXRfRW5hYmxlKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfSW50ZXJydXB0X2RlZmluaXRpb24gDQorICAqIEB7DQorICAqLw0KKyAgDQorI2RlZmluZSBVU0FSVF9JVF9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMjgpDQorI2RlZmluZSBVU0FSVF9JVF9UWEUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA3MjcpDQorI2RlZmluZSBVU0FSVF9JVF9UQyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA2MjYpDQorI2RlZmluZSBVU0FSVF9JVF9SWE5FICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA1MjUpDQorI2RlZmluZSBVU0FSVF9JVF9PUkVfUlggICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAzMjUpIC8qIEluIGNhc2UgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpZiB0aGUgUlhORUlFIGJpdCBpcyBzZXQgKi8NCisjZGVmaW5lIFVTQVJUX0lUX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDQyNCkNCisjZGVmaW5lIFVTQVJUX0lUX0xCRCAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDg0NikNCisjZGVmaW5lIFVTQVJUX0lUX0NUUyAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDk2QSkNCisjZGVmaW5lIFVTQVJUX0lUX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA2MCkNCisjZGVmaW5lIFVTQVJUX0lUX09SRV9FUiAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDM2MCkgLyogSW4gY2FzZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkIGlmIHRoZSBFSUUgYml0IGlzIHNldCAqLw0KKyNkZWZpbmUgVVNBUlRfSVRfTkUgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjYwKQ0KKyNkZWZpbmUgVVNBUlRfSVRfRkUgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTYwKQ0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfTGVnYWN5IA0KKyAgKiBAew0KKyAgKi8NCisjZGVmaW5lIFVTQVJUX0lUX09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfSVRfT1JFX0VSICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKyNkZWZpbmUgSVNfVVNBUlRfQ09ORklHX0lUKElUKSAoKChJVCkgPT0gVVNBUlRfSVRfUEUpIHx8ICgoSVQpID09IFVTQVJUX0lUX1RYRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gVVNBUlRfSVRfVEMpIHx8ICgoSVQpID09IFVTQVJUX0lUX1JYTkUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFVTQVJUX0lUX0lETEUpIHx8ICgoSVQpID09IFVTQVJUX0lUX0xCRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gVVNBUlRfSVRfQ1RTKSB8fCAoKElUKSA9PSBVU0FSVF9JVF9FUlIpKQ0KKyNkZWZpbmUgSVNfVVNBUlRfR0VUX0lUKElUKSAoKChJVCkgPT0gVVNBUlRfSVRfUEUpIHx8ICgoSVQpID09IFVTQVJUX0lUX1RYRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gVVNBUlRfSVRfVEMpIHx8ICgoSVQpID09IFVTQVJUX0lUX1JYTkUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFVTQVJUX0lUX0lETEUpIHx8ICgoSVQpID09IFVTQVJUX0lUX0xCRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJVCkgPT0gVVNBUlRfSVRfQ1RTKSB8fCAoKElUKSA9PSBVU0FSVF9JVF9PUkUpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IFVTQVJUX0lUX09SRV9SWCkgfHwgKChJVCkgPT0gVVNBUlRfSVRfT1JFX0VSKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBVU0FSVF9JVF9ORSkgfHwgKChJVCkgPT0gVVNBUlRfSVRfRkUpKQ0KKyNkZWZpbmUgSVNfVVNBUlRfQ0xFQVJfSVQoSVQpICgoKElUKSA9PSBVU0FSVF9JVF9UQykgfHwgKChJVCkgPT0gVVNBUlRfSVRfUlhORSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBVU0FSVF9JVF9MQkQpIHx8ICgoSVQpID09IFVTQVJUX0lUX0NUUykpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfRE1BX1JlcXVlc3RzIA0KKyAgKiBAew0KKyAgKi8NCisNCisjZGVmaW5lIFVTQVJUX0RNQVJlcV9UeCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA4MCkNCisjZGVmaW5lIFVTQVJUX0RNQVJlcV9SeCAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDA0MCkNCisjZGVmaW5lIElTX1VTQVJUX0RNQVJFUShETUFSRVEpICgoKChETUFSRVEpICYgKHVpbnQxNl90KTB4RkYzRikgPT0gMHgwMCkgJiYgKChETUFSRVEpICE9ICh1aW50MTZfdCkweDAwKSkNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfV2FrZVVwX21ldGhvZHMNCisgICogQHsNCisgICovDQorDQorI2RlZmluZSBVU0FSVF9XYWtlVXBfSWRsZUxpbmUgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBVU0FSVF9XYWtlVXBfQWRkcmVzc01hcmsgICAgICAgICAgICAgKCh1aW50MTZfdCkweDA4MDApDQorI2RlZmluZSBJU19VU0FSVF9XQUtFVVAoV0FLRVVQKSAoKChXQUtFVVApID09IFVTQVJUX1dha2VVcF9JZGxlTGluZSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoV0FLRVVQKSA9PSBVU0FSVF9XYWtlVXBfQWRkcmVzc01hcmspKQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFVTQVJUX0xJTl9CcmVha19EZXRlY3Rpb25fTGVuZ3RoIA0KKyAgKiBAew0KKyAgKi8NCisgIA0KKyNkZWZpbmUgVVNBUlRfTElOQnJlYWtEZXRlY3RMZW5ndGhfMTBiICAgICAgKCh1aW50MTZfdCkweDAwMDApDQorI2RlZmluZSBVU0FSVF9MSU5CcmVha0RldGVjdExlbmd0aF8xMWIgICAgICAoKHVpbnQxNl90KTB4MDAyMCkNCisjZGVmaW5lIElTX1VTQVJUX0xJTl9CUkVBS19ERVRFQ1RfTEVOR1RIKExFTkdUSCkgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChMRU5HVEgpID09IFVTQVJUX0xJTkJyZWFrRGV0ZWN0TGVuZ3RoXzEwYikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMRU5HVEgpID09IFVTQVJUX0xJTkJyZWFrRGV0ZWN0TGVuZ3RoXzExYikpDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfSXJEQV9Mb3dfUG93ZXIgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVVNBUlRfSXJEQU1vZGVfTG93UG93ZXIgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgVVNBUlRfSXJEQU1vZGVfTm9ybWFsICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAwKQ0KKyNkZWZpbmUgSVNfVVNBUlRfSVJEQV9NT0RFKE1PREUpICgoKE1PREUpID09IFVTQVJUX0lyREFNb2RlX0xvd1Bvd2VyKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gVVNBUlRfSXJEQU1vZGVfTm9ybWFsKSkNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfRmxhZ3MgDQorICAqIEB7DQorICAqLw0KKw0KKyNkZWZpbmUgVVNBUlRfRkxBR19DVFMgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMjAwKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19MQkQgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMTAwKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19UWEUgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDgwKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19UQyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDQwKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19SWE5FICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDIwKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19JRExFICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDEwKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19PUkUgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA4KQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19ORSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDA0KQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19GRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAyKQ0KKyNkZWZpbmUgVVNBUlRfRkxBR19QRSAgICAgICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpMHgwMDAxKQ0KKyNkZWZpbmUgSVNfVVNBUlRfRkxBRyhGTEFHKSAoKChGTEFHKSA9PSBVU0FSVF9GTEFHX1BFKSB8fCAoKEZMQUcpID09IFVTQVJUX0ZMQUdfVFhFKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFVTQVJUX0ZMQUdfVEMpIHx8ICgoRkxBRykgPT0gVVNBUlRfRkxBR19SWE5FKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFVTQVJUX0ZMQUdfSURMRSkgfHwgKChGTEFHKSA9PSBVU0FSVF9GTEFHX0xCRCkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBVU0FSVF9GTEFHX0NUUykgfHwgKChGTEFHKSA9PSBVU0FSVF9GTEFHX09SRSkgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBVU0FSVF9GTEFHX05FKSB8fCAoKEZMQUcpID09IFVTQVJUX0ZMQUdfRkUpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyNkZWZpbmUgSVNfVVNBUlRfQ0xFQVJfRkxBRyhGTEFHKSAoKCgoRkxBRykgJiAodWludDE2X3QpMHhGQzlGKSA9PSAweDAwKSAmJiAoKEZMQUcpICE9ICh1aW50MTZfdCkweDAwKSkNCisNCisjZGVmaW5lIElTX1VTQVJUX0JBVURSQVRFKEJBVURSQVRFKSAoKChCQVVEUkFURSkgPiAwKSAmJiAoKEJBVURSQVRFKSA8IDc1MDAwMDEpKQ0KKyNkZWZpbmUgSVNfVVNBUlRfQUREUkVTUyhBRERSRVNTKSAoKEFERFJFU1MpIDw9IDB4RikNCisjZGVmaW5lIElTX1VTQVJUX0RBVEEoREFUQSkgKChEQVRBKSA8PSAweDFGRikNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyAgDQorDQorLyogIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSBVU0FSVCBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKi8gDQordm9pZCBVU0FSVF9EZUluaXQoVVNBUlRfVHlwZURlZiogVVNBUlR4KTsNCisNCisvKiBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVVNBUlRfSW5pdChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIFVTQVJUX0luaXRUeXBlRGVmKiBVU0FSVF9Jbml0U3RydWN0KTsNCit2b2lkIFVTQVJUX1N0cnVjdEluaXQoVVNBUlRfSW5pdFR5cGVEZWYqIFVTQVJUX0luaXRTdHJ1Y3QpOw0KK3ZvaWQgVVNBUlRfQ2xvY2tJbml0KFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgVVNBUlRfQ2xvY2tJbml0VHlwZURlZiogVVNBUlRfQ2xvY2tJbml0U3RydWN0KTsNCit2b2lkIFVTQVJUX0Nsb2NrU3RydWN0SW5pdChVU0FSVF9DbG9ja0luaXRUeXBlRGVmKiBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QpOw0KK3ZvaWQgVVNBUlRfQ21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFVTQVJUX1NldFByZXNjYWxlcihVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQ4X3QgVVNBUlRfUHJlc2NhbGVyKTsNCit2b2lkIFVTQVJUX092ZXJTYW1wbGluZzhDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KK3ZvaWQgVVNBUlRfT25lQml0TWV0aG9kQ21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCisvKiBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyANCit2b2lkIFVTQVJUX1NlbmREYXRhKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgRGF0YSk7DQordWludDE2X3QgVVNBUlRfUmVjZWl2ZURhdGEoVVNBUlRfVHlwZURlZiogVVNBUlR4KTsNCisNCisvKiBNdWx0aS1Qcm9jZXNzb3IgQ29tbXVuaWNhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVVNBUlRfU2V0QWRkcmVzcyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQ4X3QgVVNBUlRfQWRkcmVzcyk7DQordm9pZCBVU0FSVF9XYWtlVXBDb25maWcoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9XYWtlVXApOw0KK3ZvaWQgVVNBUlRfUmVjZWl2ZXJXYWtlVXBDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIExJTiBtb2RlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBVU0FSVF9MSU5CcmVha0RldGVjdExlbmd0aENvbmZpZyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0xJTkJyZWFrRGV0ZWN0TGVuZ3RoKTsNCit2b2lkIFVTQVJUX0xJTkNtZChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBVU0FSVF9TZW5kQnJlYWsoVVNBUlRfVHlwZURlZiogVVNBUlR4KTsNCisNCisvKiBIYWxmLWR1cGxleCBtb2RlIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVVNBUlRfSGFsZkR1cGxleENtZChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogU21hcnRjYXJkIG1vZGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFVTQVJUX1NtYXJ0Q2FyZENtZChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQordm9pZCBVU0FSVF9TbWFydENhcmROQUNLQ21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCit2b2lkIFVTQVJUX1NldEd1YXJkVGltZShVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQ4X3QgVVNBUlRfR3VhcmRUaW1lKTsNCisNCisvKiBJckRBIG1vZGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3ZvaWQgVVNBUlRfSXJEQUNvbmZpZyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0lyREFNb2RlKTsNCit2b2lkIFVTQVJUX0lyREFDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KKy8qIERNQSB0cmFuc2ZlcnMgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBVU0FSVF9ETUFDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9ETUFSZXEsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorDQorLyogSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCit2b2lkIFVTQVJUX0lUQ29uZmlnKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorRmxhZ1N0YXR1cyBVU0FSVF9HZXRGbGFnU3RhdHVzKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfRkxBRyk7DQordm9pZCBVU0FSVF9DbGVhckZsYWcoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9GTEFHKTsNCitJVFN0YXR1cyBVU0FSVF9HZXRJVFN0YXR1cyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0lUKTsNCit2b2lkIFVTQVJUX0NsZWFySVRQZW5kaW5nQml0KFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfSVQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisjZW5kaWYgLyogX19TVE0zMkYyeHhfVVNBUlRfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfd3dkZy5oIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvaW5jL3N0bTMyZjJ4eF93d2RnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjMTk2OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL2luYy9zdG0zMmYyeHhfd3dkZy5oCkBAIC0wLDAgKzEsMTExIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfd3dkZy5oDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIFdXREcgZmlybXdhcmUNCisgICogICAgICAgICAgbGlicmFyeS4NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2lmbmRlZiBfX1NUTTMyRjJ4eF9XV0RHX0gNCisjZGVmaW5lIF9fU1RNMzJGMnh4X1dXREdfSA0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyBleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHguaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIFdXREcNCisgICogQHsNCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIFdXREdfRXhwb3J0ZWRfQ29uc3RhbnRzDQorICAqIEB7DQorICAqLyANCisgIA0KKy8qKiBAZGVmZ3JvdXAgV1dER19QcmVzY2FsZXIgDQorICAqIEB7DQorICAqLw0KKyAgDQorI2RlZmluZSBXV0RHX1ByZXNjYWxlcl8xICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCisjZGVmaW5lIFdXREdfUHJlc2NhbGVyXzIgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwKQ0KKyNkZWZpbmUgV1dER19QcmVzY2FsZXJfNCAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDApDQorI2RlZmluZSBXV0RHX1ByZXNjYWxlcl84ICAgICgodWludDMyX3QpMHgwMDAwMDE4MCkNCisjZGVmaW5lIElTX1dXREdfUFJFU0NBTEVSKFBSRVNDQUxFUikgKCgoUFJFU0NBTEVSKSA9PSBXV0RHX1ByZXNjYWxlcl8xKSB8fCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gV1dER19QcmVzY2FsZXJfMikgfHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQUkVTQ0FMRVIpID09IFdXREdfUHJlc2NhbGVyXzQpIHx8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFJFU0NBTEVSKSA9PSBXV0RHX1ByZXNjYWxlcl84KSkNCisjZGVmaW5lIElTX1dXREdfV0lORE9XX1ZBTFVFKFZBTFVFKSAoKFZBTFVFKSA8PSAweDdGKQ0KKyNkZWZpbmUgSVNfV1dER19DT1VOVEVSKENPVU5URVIpICgoKENPVU5URVIpID49IDB4NDApICYmICgoQ09VTlRFUikgPD0gMHg3RikpDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIA0KKy8qICBGdW5jdGlvbiB1c2VkIHRvIHNldCB0aGUgV1dERyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlICoqKiovICANCit2b2lkIFdXREdfRGVJbml0KHZvaWQpOw0KKw0KKy8qIFByZXNjYWxlciwgUmVmcmVzaCB3aW5kb3cgYW5kIENvdW50ZXIgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKiovDQordm9pZCBXV0RHX1NldFByZXNjYWxlcih1aW50MzJfdCBXV0RHX1ByZXNjYWxlcik7DQordm9pZCBXV0RHX1NldFdpbmRvd1ZhbHVlKHVpbnQ4X3QgV2luZG93VmFsdWUpOw0KK3ZvaWQgV1dER19FbmFibGVJVCh2b2lkKTsNCit2b2lkIFdXREdfU2V0Q291bnRlcih1aW50OF90IENvdW50ZXIpOw0KKw0KKy8qIFdXREcgYWN0aXZhdGlvbiBmdW5jdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQordm9pZCBXV0RHX0VuYWJsZSh1aW50OF90IENvdW50ZXIpOw0KKw0KKy8qIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorRmxhZ1N0YXR1cyBXV0RHX0dldEZsYWdTdGF0dXModm9pZCk7DQordm9pZCBXV0RHX0NsZWFyRmxhZyh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8qIF9fU1RNMzJGMnh4X1dXREdfSCAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3J1bGVzLm1rIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvcnVsZXMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwNTBmYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3J1bGVzLm1rCkBAIC0wLDAgKzEsMzcgQEAKK0xPQ0FMX0RJUiA6PSAkKEdFVF9MT0NBTF9ESVIpCisKK0dMT0JBTF9JTkNMVURFUyArPSAkKExPQ0FMX0RJUikvaW5jCisKK01PRFVMRV9TUkNTICs9IFwKKwkkKExPQ0FMX0RJUikvc3JjL3N5c3RlbV9zdG0zMmYyeHguYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfZG1hLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X2RiZ21jdS5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9mbGFzaC5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9zcGkuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfZGNtaS5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9hZGMuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfaXdkZy5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9mc21jLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X2NyYy5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL21pc2MuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfc3lzY2ZnLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X3NkaW8uYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfY3J5cF9hZXMuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfdXNhcnQuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfZXh0aS5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9yY2MuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfaGFzaF9tZDUuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfcnRjLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X2kyYy5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9jcnlwX2Rlcy5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9ybmcuYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfY3J5cF90ZGVzLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X3B3ci5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF93d2RnLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X2dwaW8uYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfaGFzaC5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9jYW4uYyBcCisJJChMT0NBTF9ESVIpL3NyYy9zdG0zMmYyeHhfdGltLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X2hhc2hfc2hhMS5jIFwKKwkkKExPQ0FMX0RJUikvc3JjL3N0bTMyZjJ4eF9jcnlwLmMgXAorCSQoTE9DQUxfRElSKS9zcmMvc3RtMzJmMnh4X2RhYy5jIFwKZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9taXNjLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTVhM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvbWlzYy5jCkBAIC0wLDAgKzEsMjQ5IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBtaXNjLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBhbGwgdGhlIG1pc2NlbGxhbmVvdXMgZmlybXdhcmUgZnVuY3Rpb25zIChhZGQtb24NCisgICogICAgICAgICAgdG8gQ01TSVMgZnVuY3Rpb25zKS4NCisgICogICAgICAgICAgDQorICAqICBAdmVyYmF0aW0gICANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICANCisgICogICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gY29uZmlndXJlIEludGVycnVwdHMgdXNpbmcgZHJpdmVyIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgDQorICAqIA0KKyAgKiAgICAgICAgICAgIFRoaXMgc2VjdGlvbiBwcm92aWRlIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIE5WSUMgaW50ZXJydXB0cyAoSVJRKS4NCisgICogICAgICAgICAgICBUaGUgQ29ydGV4LU0zIGV4Y2VwdGlvbnMgYXJlIG1hbmFnZWQgYnkgQ01TSVMgZnVuY3Rpb25zLg0KKyAgKg0KKyAgKiAgICAgICAgICAgIDEuIENvbmZpZ3VyZSB0aGUgTlZJQyBQcmlvcml0eSBHcm91cGluZyB1c2luZyBOVklDX1ByaW9yaXR5R3JvdXBDb25maWcoKQ0KKyAgKiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZS4NCisgDQorICAqICBUaGUgdGFibGUgYmVsb3cgZ2l2ZXMgdGhlIGFsbG93ZWQgdmFsdWVzIG9mIHRoZSBwcmUtZW1wdGlvbiBwcmlvcml0eSBhbmQgc3VicHJpb3JpdHkgYWNjb3JkaW5nDQorICAqICB0byB0aGUgUHJpb3JpdHkgR3JvdXBpbmcgY29uZmlndXJhdGlvbiBwZXJmb3JtZWQgYnkgTlZJQ19Qcmlvcml0eUdyb3VwQ29uZmlnIGZ1bmN0aW9uDQorICAqICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgTlZJQ19Qcmlvcml0eUdyb3VwICAgfCBOVklDX0lSUUNoYW5uZWxQcmVlbXB0aW9uUHJpb3JpdHkgfCBOVklDX0lSUUNoYW5uZWxTdWJQcmlvcml0eSAgfCAgICAgICBEZXNjcmlwdGlvbg0KKyAgKiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgTlZJQ19Qcmlvcml0eUdyb3VwXzAgIHwgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAwLTE1ICAgICAgICAgICAgIHwgMCBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgTlZJQ19Qcmlvcml0eUdyb3VwXzEgIHwgICAgICAgICAgICAgICAgMC0xICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAwLTcgICAgICAgICAgICAgIHwgMSBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICANCisgICogICAgIE5WSUNfUHJpb3JpdHlHcm91cF8yICB8ICAgICAgICAgICAgICAgIDAtMyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgMC0zICAgICAgICAgICAgICB8IDIgYml0cyBmb3IgcHJlLWVtcHRpb24gcHJpb3JpdHkNCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIgYml0cyBmb3Igc3VicHJpb3JpdHkNCisgICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgDQorICAqICAgICBOVklDX1ByaW9yaXR5R3JvdXBfMyAgfCAgICAgICAgICAgICAgICAwLTcgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIDAtMSAgICAgICAgICAgICAgfCAzIGJpdHMgZm9yIHByZS1lbXB0aW9uIHByaW9yaXR5DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIGJpdHMgZm9yIHN1YnByaW9yaXR5DQorICAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgIA0KKyAgKiAgICAgTlZJQ19Qcmlvcml0eUdyb3VwXzQgIHwgICAgICAgICAgICAgICAgMC0xNSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAwICAgICAgICAgICAgICAgIHwgNCBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMCBiaXRzIGZvciBzdWJwcmlvcml0eSAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICANCisgICoNCisgICogICAgICAgICAgICAyLiBFbmFibGUgYW5kIENvbmZpZ3VyZSB0aGUgcHJpb3JpdHkgb2YgdGhlIHNlbGVjdGVkIElSUSBDaGFubmVscyB1c2luZyBOVklDX0luaXQoKSAgDQorICAqDQorICAqIEBub3RlICBXaGVuIHRoZSBOVklDX1ByaW9yaXR5R3JvdXBfMCBpcyBzZWxlY3RlZCwgSVJRIHByZS1lbXB0aW9uIGlzIG5vIG1vcmUgcG9zc2libGUuIA0KKyAgKiAgICAgICAgVGhlIHBlbmRpbmcgSVJRIHByaW9yaXR5IHdpbGwgYmUgbWFuYWdlZCBvbmx5IGJ5IHRoZSBzdWJwcmlvcml0eS4NCisgICoNCisgICogQG5vdGUgIElSUSBwcmlvcml0eSBvcmRlciAoc29ydGVkIGJ5IGhpZ2hlc3QgdG8gbG93ZXN0IHByaW9yaXR5KToNCisgICogICAgICAgICAtIExvd2VzdCBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgIC0gTG93ZXN0IHN1YnByaW9yaXR5DQorICAqICAgICAgICAgLSBMb3dlc3QgaGFyZHdhcmUgcHJpb3JpdHkgKElSUSBudW1iZXIpDQorICAqDQorICAqICBAZW5kdmVyYmF0aW0NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgIm1pc2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBNSVNDIA0KKyAgKiBAYnJpZWYgTUlTQyBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2RlZmluZSBBSVJDUl9WRUNUS0VZX01BU0sgICAgKCh1aW50MzJfdCkweDA1RkEwMDAwKQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBNSVNDX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIHByaW9yaXR5IGdyb3VwaW5nOiBwcmUtZW1wdGlvbiBwcmlvcml0eSBhbmQgc3VicHJpb3JpdHkuDQorICAqIEBwYXJhbSAgTlZJQ19Qcmlvcml0eUdyb3VwOiBzcGVjaWZpZXMgdGhlIHByaW9yaXR5IGdyb3VwaW5nIGJpdHMgbGVuZ3RoLiANCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgQGFyZyBOVklDX1ByaW9yaXR5R3JvdXBfMDogMCBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiAgICAgQGFyZyBOVklDX1ByaW9yaXR5R3JvdXBfMTogMSBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiAgICAgQGFyZyBOVklDX1ByaW9yaXR5R3JvdXBfMjogMiBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiAgICAgQGFyZyBOVklDX1ByaW9yaXR5R3JvdXBfMzogMyBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiAgICAgQGFyZyBOVklDX1ByaW9yaXR5R3JvdXBfNDogNCBiaXRzIGZvciBwcmUtZW1wdGlvbiBwcmlvcml0eQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBiaXRzIGZvciBzdWJwcmlvcml0eQ0KKyAgKiBAbm90ZSAgIFdoZW4gdGhlIE5WSUNfUHJpb3JpdHlHcm91cF8wIGlzIHNlbGVjdGVkLCBJUlEgcHJlLWVtcHRpb24gaXMgbm8gbW9yZSBwb3NzaWJsZS4gDQorICAqICAgICAgICAgVGhlIHBlbmRpbmcgSVJRIHByaW9yaXR5IHdpbGwgYmUgbWFuYWdlZCBvbmx5IGJ5IHRoZSBzdWJwcmlvcml0eS4gDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIE5WSUNfUHJpb3JpdHlHcm91cENvbmZpZyh1aW50MzJfdCBOVklDX1ByaW9yaXR5R3JvdXApDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19OVklDX1BSSU9SSVRZX0dST1VQKE5WSUNfUHJpb3JpdHlHcm91cCkpOw0KKyAgDQorICAvKiBTZXQgdGhlIFBSSUdST1VQWzEwOjhdIGJpdHMgYWNjb3JkaW5nIHRvIE5WSUNfUHJpb3JpdHlHcm91cCB2YWx1ZSAqLw0KKyAgU0NCLT5BSVJDUiA9IEFJUkNSX1ZFQ1RLRVlfTUFTSyB8IE5WSUNfUHJpb3JpdHlHcm91cDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIE5WSUMgcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZA0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIE5WSUNfSW5pdFN0cnVjdC4NCisgICogQG5vdGUgICBUbyBjb25maWd1cmUgaW50ZXJydXB0cyBwcmlvcml0eSBjb3JyZWN0bHksIHRoZSBOVklDX1ByaW9yaXR5R3JvdXBDb25maWcoKQ0KKyAgKiAgICAgICAgIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlLiANCisgICogQHBhcmFtICBOVklDX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBOVklDX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgTlZJQyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBOVklDX0luaXQoTlZJQ19Jbml0VHlwZURlZiogTlZJQ19Jbml0U3RydWN0KQ0KK3sNCisgIHVpbnQ4X3QgdG1wcHJpb3JpdHkgPSAweDAwLCB0bXBwcmUgPSAweDAwLCB0bXBzdWIgPSAweDBGOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTlZJQ19Jbml0U3RydWN0LT5OVklDX0lSUUNoYW5uZWxDbWQpKTsNCisgIGFzc2VydF9wYXJhbShJU19OVklDX1BSRUVNUFRJT05fUFJJT1JJVFkoTlZJQ19Jbml0U3RydWN0LT5OVklDX0lSUUNoYW5uZWxQcmVlbXB0aW9uUHJpb3JpdHkpKTsgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX05WSUNfU1VCX1BSSU9SSVRZKE5WSUNfSW5pdFN0cnVjdC0+TlZJQ19JUlFDaGFubmVsU3ViUHJpb3JpdHkpKTsNCisgICAgDQorICBpZiAoTlZJQ19Jbml0U3RydWN0LT5OVklDX0lSUUNoYW5uZWxDbWQgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogQ29tcHV0ZSB0aGUgQ29ycmVzcG9uZGluZyBJUlEgUHJpb3JpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLyAgICANCisgICAgdG1wcHJpb3JpdHkgPSAoMHg3MDAgLSAoKFNDQi0+QUlSQ1IpICYgKHVpbnQzMl90KTB4NzAwKSk+PiAweDA4Ow0KKyAgICB0bXBwcmUgPSAoMHg0IC0gdG1wcHJpb3JpdHkpOw0KKyAgICB0bXBzdWIgPSB0bXBzdWIgPj4gdG1wcHJpb3JpdHk7DQorDQorICAgIHRtcHByaW9yaXR5ID0gTlZJQ19Jbml0U3RydWN0LT5OVklDX0lSUUNoYW5uZWxQcmVlbXB0aW9uUHJpb3JpdHkgPDwgdG1wcHJlOw0KKyAgICB0bXBwcmlvcml0eSB8PSAgKHVpbnQ4X3QpKE5WSUNfSW5pdFN0cnVjdC0+TlZJQ19JUlFDaGFubmVsU3ViUHJpb3JpdHkgJiB0bXBzdWIpOw0KKyAgICAgICAgDQorICAgIHRtcHByaW9yaXR5ID0gdG1wcHJpb3JpdHkgPDwgMHgwNDsNCisgICAgICAgIA0KKyAgICBOVklDLT5JUFtOVklDX0luaXRTdHJ1Y3QtPk5WSUNfSVJRQ2hhbm5lbF0gPSB0bXBwcmlvcml0eTsNCisgICAgDQorICAgIC8qIEVuYWJsZSB0aGUgU2VsZWN0ZWQgSVJRIENoYW5uZWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgICAgTlZJQy0+SVNFUltOVklDX0luaXRTdHJ1Y3QtPk5WSUNfSVJRQ2hhbm5lbCA+PiAweDA1XSA9DQorICAgICAgKHVpbnQzMl90KTB4MDEgPDwgKE5WSUNfSW5pdFN0cnVjdC0+TlZJQ19JUlFDaGFubmVsICYgKHVpbnQ4X3QpMHgxRik7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFNlbGVjdGVkIElSUSBDaGFubmVscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgICAgTlZJQy0+SUNFUltOVklDX0luaXRTdHJ1Y3QtPk5WSUNfSVJRQ2hhbm5lbCA+PiAweDA1XSA9DQorICAgICAgKHVpbnQzMl90KTB4MDEgPDwgKE5WSUNfSW5pdFN0cnVjdC0+TlZJQ19JUlFDaGFubmVsICYgKHVpbnQ4X3QpMHgxRik7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIHZlY3RvciB0YWJsZSBsb2NhdGlvbiBhbmQgT2Zmc2V0Lg0KKyAgKiBAcGFyYW0gIE5WSUNfVmVjdFRhYjogc3BlY2lmaWVzIGlmIHRoZSB2ZWN0b3IgdGFibGUgaXMgaW4gUkFNIG9yIEZMQVNIIG1lbW9yeS4NCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgQGFyZyBOVklDX1ZlY3RUYWJfUkFNOiBWZWN0b3IgVGFibGUgaW4gaW50ZXJuYWwgU1JBTS4NCisgICogICAgIEBhcmcgTlZJQ19WZWN0VGFiX0ZMQVNIOiBWZWN0b3IgVGFibGUgaW4gaW50ZXJuYWwgRkxBU0guDQorICAqIEBwYXJhbSAgT2Zmc2V0OiBWZWN0b3IgVGFibGUgYmFzZSBvZmZzZXQgZmllbGQuIFRoaXMgdmFsdWUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDB4MjAwLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBOVklDX1NldFZlY3RvclRhYmxlKHVpbnQzMl90IE5WSUNfVmVjdFRhYiwgdWludDMyX3QgT2Zmc2V0KQ0KK3sgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX05WSUNfVkVDVFRBQihOVklDX1ZlY3RUYWIpKTsNCisgIGFzc2VydF9wYXJhbShJU19OVklDX09GRlNFVChPZmZzZXQpKTsgIA0KKyAgIA0KKyAgU0NCLT5WVE9SID0gTlZJQ19WZWN0VGFiIHwgKE9mZnNldCAmICh1aW50MzJfdCkweDFGRkZGRjgwKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgY29uZGl0aW9uIGZvciB0aGUgc3lzdGVtIHRvIGVudGVyIGxvdyBwb3dlciBtb2RlLg0KKyAgKiBAcGFyYW0gIExvd1Bvd2VyTW9kZTogU3BlY2lmaWVzIHRoZSBuZXcgbW9kZSBmb3IgdGhlIHN5c3RlbSB0byBlbnRlciBsb3cgcG93ZXIgbW9kZS4NCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgQGFyZyBOVklDX0xQX1NFVk9OUEVORDogTG93IFBvd2VyIFNFViBvbiBQZW5kLg0KKyAgKiAgICAgQGFyZyBOVklDX0xQX1NMRUVQREVFUDogTG93IFBvd2VyIERFRVBTTEVFUCByZXF1ZXN0Lg0KKyAgKiAgICAgQGFyZyBOVklDX0xQX1NMRUVQT05FWElUOiBMb3cgUG93ZXIgU2xlZXAgb24gRXhpdC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIExQIGNvbmRpdGlvbi4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgTlZJQ19TeXN0ZW1MUENvbmZpZyh1aW50OF90IExvd1Bvd2VyTW9kZSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfTlZJQ19MUChMb3dQb3dlck1vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7ICANCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIFNDQi0+U0NSIHw9IExvd1Bvd2VyTW9kZTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgU0NCLT5TQ1IgJj0gKHVpbnQzMl90KSh+KHVpbnQzMl90KUxvd1Bvd2VyTW9kZSk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIFN5c1RpY2sgY2xvY2sgc291cmNlLg0KKyAgKiBAcGFyYW0gIFN5c1RpY2tfQ0xLU291cmNlOiBzcGVjaWZpZXMgdGhlIFN5c1RpY2sgY2xvY2sgc291cmNlLg0KKyAgKiAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICBAYXJnIFN5c1RpY2tfQ0xLU291cmNlX0hDTEtfRGl2ODogQUhCIGNsb2NrIGRpdmlkZWQgYnkgOCBzZWxlY3RlZCBhcyBTeXNUaWNrIGNsb2NrIHNvdXJjZS4NCisgICogICAgIEBhcmcgU3lzVGlja19DTEtTb3VyY2VfSENMSzogQUhCIGNsb2NrIHNlbGVjdGVkIGFzIFN5c1RpY2sgY2xvY2sgc291cmNlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTeXNUaWNrX0NMS1NvdXJjZUNvbmZpZyh1aW50MzJfdCBTeXNUaWNrX0NMS1NvdXJjZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NZU1RJQ0tfQ0xLX1NPVVJDRShTeXNUaWNrX0NMS1NvdXJjZSkpOw0KKyAgaWYgKFN5c1RpY2tfQ0xLU291cmNlID09IFN5c1RpY2tfQ0xLU291cmNlX0hDTEspDQorICB7DQorICAgIFN5c1RpY2stPkNUUkwgfD0gU3lzVGlja19DTEtTb3VyY2VfSENMSzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgU3lzVGljay0+Q1RSTCAmPSBTeXNUaWNrX0NMS1NvdXJjZV9IQ0xLX0Rpdjg7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9hZGMuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfYWRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkMDU1OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfYWRjLmMKQEAgLTAsMCArMSwxNzQ4IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfYWRjLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQW5hbG9nIHRvIERpZ2l0YWwgQ29udmVydG9yIChBREMpIHBlcmlwaGVyYWw6DQorICAqICAgICAgICAgICAtIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIChpbiBhZGRpdGlvbiB0byBBREMgbXVsdGkgbW9kZSANCisgICogICAgICAgICAgICAgc2VsZWN0aW9uKQ0KKyAgKiAgICAgICAgICAgLSBBbmFsb2cgV2F0Y2hkb2cgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBUZW1wZXJhdHVyZSBTZW5zb3IgJiBWcmVmaW50IChWb2x0YWdlIFJlZmVyZW5jZSBpbnRlcm5hbCkgJiBWQkFUDQorICAqICAgICAgICAgICAgIG1hbmFnZW1lbnQgDQorICAqICAgICAgICAgICAtIFJlZ3VsYXIgQ2hhbm5lbHMgQ29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBSZWd1bGFyIENoYW5uZWxzIERNQSBDb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIEluamVjdGVkIGNoYW5uZWxzIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgIA0KKyAgKiAgQHZlcmJhdGltDQorICAqDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKyAgKiAgICAgICAgICAxLiAgRW5hYmxlIHRoZSBBREMgaW50ZXJmYWNlIGNsb2NrIHVzaW5nIA0KKyAgKiAgICAgICAgICAgICAgICAgIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfQURDeCwgRU5BQkxFKTsgDQorICAqICAgICANCisgICogICAgICAgICAgMi4gQURDIHBpbnMgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgICAgIC0gRW5hYmxlIHRoZSBjbG9jayBmb3IgdGhlIEFEQyBHUElPcyB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOg0KKyAgKiAgICAgICAgICAgICAgICAgICBSQ0NfQUhCMVBlcmlwaENsb2NrQ21kKFJDQ19BSEIxUGVyaXBoX0dQSU94LCBFTkFCTEUpOyAgIA0KKyAgKiAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGVzZSBBREMgcGlucyBpbiBhbmFsb2cgbW9kZSB1c2luZyBHUElPX0luaXQoKTsgIA0KKyAgKg0KKyAgKiAgICAgICAgICAzLiBDb25maWd1cmUgdGhlIEFEQyBQcmVzY2FsZXIsIGNvbnZlcnNpb24gcmVzb2x1dGlvbiBhbmQgZGF0YSANCisgICogICAgICAgICAgICAgIGFsaWdubWVudCB1c2luZyB0aGUgQURDX0luaXQoKSBmdW5jdGlvbi4NCisgICogICAgICAgICAgNC4gQWN0aXZhdGUgdGhlIEFEQyBwZXJpcGhlcmFsIHVzaW5nIEFEQ19DbWQoKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgUmVndWxhciBjaGFubmVscyBncm91cCBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICANCisgICogICAgICAgICAgICAtIFRvIGNvbmZpZ3VyZSB0aGUgQURDIHJlZ3VsYXIgY2hhbm5lbHMgZ3JvdXAgZmVhdHVyZXMsIHVzZSANCisgICogICAgICAgICAgICAgIEFEQ19Jbml0KCkgYW5kIEFEQ19SZWd1bGFyQ2hhbm5lbENvbmZpZygpIGZ1bmN0aW9ucy4NCisgICogICAgICAgICAgICAtIFRvIGFjdGl2YXRlIHRoZSBjb250aW51b3VzIG1vZGUsIHVzZSB0aGUgQURDX2NvbnRpbnVvdXNNb2RlQ21kKCkNCisgICogICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgIC0gVG8gY29uZmlndXJhdGUgYW5kIGFjdGl2YXRlIHRoZSBEaXNjb250aW51b3VzIG1vZGUsIHVzZSB0aGUgDQorICAqICAgICAgICAgICAgICBBRENfRGlzY01vZGVDaGFubmVsQ291bnRDb25maWcoKSBhbmQgQURDX0Rpc2NNb2RlQ21kKCkgZnVuY3Rpb25zLg0KKyAgKiAgICAgICAgICAgIC0gVG8gcmVhZCB0aGUgQURDIGNvbnZlcnRlZCB2YWx1ZXMsIHVzZSB0aGUgQURDX0dldENvbnZlcnNpb25WYWx1ZSgpDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgTXVsdGkgbW9kZSBBRENzIFJlZ3VsYXIgY2hhbm5lbHMgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgIC0gUmVmZXIgdG8gIlJlZ3VsYXIgY2hhbm5lbHMgZ3JvdXAgY29uZmlndXJhdGlvbiIgZGVzY3JpcHRpb24gdG8NCisgICogICAgICAgICAgICAgIGNvbmZpZ3VyZSB0aGUgQURDMSwgQURDMiBhbmQgQURDMyByZWd1bGFyIGNoYW5uZWxzLiAgICAgICAgDQorICAqICAgICAgICAgICAgLSBTZWxlY3QgdGhlIE11bHRpIG1vZGUgQURDIHJlZ3VsYXIgY2hhbm5lbHMgZmVhdHVyZXMgKGR1YWwgb3IgDQorICAqICAgICAgICAgICAgICB0cmlwbGUgbW9kZSkgdXNpbmcgQURDX0NvbW1vbkluaXQoKSBmdW5jdGlvbiBhbmQgY29uZmlndXJlIA0KKyAgKiAgICAgICAgICAgICAgdGhlIERNQSBtb2RlIHVzaW5nIEFEQ19NdWx0aU1vZGVETUFSZXF1ZXN0QWZ0ZXJMYXN0VHJhbnNmZXJDbWQoKSANCisgICogICAgICAgICAgICAgIGZ1bmN0aW9ucy4gICAgICAgIA0KKyAgKiAgICAgICAgICAgIC0gUmVhZCB0aGUgQURDcyBjb252ZXJ0ZWQgdmFsdWVzIHVzaW5nIHRoZSANCisgICogICAgICAgICAgICAgIEFEQ19HZXRNdWx0aU1vZGVDb252ZXJzaW9uVmFsdWUoKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgRE1BIGZvciBSZWd1bGFyIGNoYW5uZWxzIGdyb3VwIGZlYXR1cmVzIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgKiAgICAgICAgICAgLSBUbyBlbmFibGUgdGhlIERNQSBtb2RlIGZvciByZWd1bGFyIGNoYW5uZWxzIGdyb3VwLCB1c2UgdGhlIA0KKyAgKiAgICAgICAgICAgICBBRENfRE1BQ21kKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAtIFRvIGVuYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBETUEgcmVxdWVzdHMgY29udGludW91c2x5IGF0IHRoZSBlbmQNCisgICogICAgICAgICAgICAgb2YgdGhlIGxhc3QgRE1BIHRyYW5zZmVyLCB1c2UgdGhlIEFEQ19ETUFSZXF1ZXN0QWZ0ZXJMYXN0VHJhbnNmZXJDbWQoKSANCisgICogICAgICAgICAgICAgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIEluamVjdGVkIGNoYW5uZWxzIGdyb3VwIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICANCisgICogICAgICAgICAgICAtIFRvIGNvbmZpZ3VyZSB0aGUgQURDIEluamVjdGVkIGNoYW5uZWxzIGdyb3VwIGZlYXR1cmVzLCB1c2UgDQorICAqICAgICAgICAgICAgICBBRENfSW5qZWN0ZWRDaGFubmVsQ29uZmlnKCkgYW5kICBBRENfSW5qZWN0ZWRTZXF1ZW5jZXJMZW5ndGhDb25maWcoKQ0KKyAgKiAgICAgICAgICAgICAgZnVuY3Rpb25zLg0KKyAgKiAgICAgICAgICAgIC0gVG8gYWN0aXZhdGUgdGhlIGNvbnRpbnVvdXMgbW9kZSwgdXNlIHRoZSBBRENfY29udGludW91c01vZGVDbWQoKQ0KKyAgKiAgICAgICAgICAgICAgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgLSBUbyBhY3RpdmF0ZSB0aGUgSW5qZWN0ZWQgRGlzY29udGludW91cyBtb2RlLCB1c2UgdGhlIA0KKyAgKiAgICAgICAgICAgICAgQURDX0luamVjdGVkRGlzY01vZGVDbWQoKSBmdW5jdGlvbi4gIA0KKyAgKiAgICAgICAgICAgIC0gVG8gYWN0aXZhdGUgdGhlIEF1dG9JbmplY3RlZCBtb2RlLCB1c2UgdGhlIEFEQ19BdXRvSW5qZWN0ZWRDb252Q21kKCkgDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4gICAgICAgIA0KKyAgKiAgICAgICAgICAgIC0gVG8gcmVhZCB0aGUgQURDIGNvbnZlcnRlZCB2YWx1ZXMsIHVzZSB0aGUgQURDX0dldEluamVjdGVkQ29udmVyc2lvblZhbHVlKCkgDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICoNCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2FkYy5oIg0KKyNpbmNsdWRlICJzdG0zMmYyeHhfcmNjLmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDIA0KKyAgKiBAYnJpZWYgQURDIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLyANCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIA0KKw0KKy8qIEFEQyBESVNDTlVNIG1hc2sgKi8NCisjZGVmaW5lIENSMV9ESVNDTlVNX1JFU0VUICAgICAgICAgKCh1aW50MzJfdCkweEZGRkYxRkZGKQ0KKw0KKy8qIEFEQyBBV0RDSCBtYXNrICovDQorI2RlZmluZSBDUjFfQVdEQ0hfUkVTRVQgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZFMCkgICANCisNCisvKiBBREMgQW5hbG9nIHdhdGNoZG9nIGVuYWJsZSBtb2RlIG1hc2sgKi8NCisjZGVmaW5lIENSMV9BV0RNb2RlX1JFU0VUICAgICAgICAgKCh1aW50MzJfdCkweEZGM0ZGREZGKSAgIA0KKw0KKy8qIENSMSByZWdpc3RlciBNYXNrICovDQorI2RlZmluZSBDUjFfQ0xFQVJfTUFTSyAgICAgICAgICAgICgodWludDMyX3QpMHhGQ0ZGRkVGRikNCisNCisvKiBBREMgRVhURU4gbWFzayAqLw0KKyNkZWZpbmUgQ1IyX0VYVEVOX1JFU0VUICAgICAgICAgICAoKHVpbnQzMl90KTB4Q0ZGRkZGRkYpICANCisNCisvKiBBREMgSkVYVEVOIG1hc2sgKi8NCisjZGVmaW5lIENSMl9KRVhURU5fUkVTRVQgICAgICAgICAgKCh1aW50MzJfdCkweEZGQ0ZGRkZGKSAgDQorDQorLyogQURDIEpFWFRTRUwgbWFzayAqLw0KKyNkZWZpbmUgQ1IyX0pFWFRTRUxfUkVTRVQgICAgICAgICAoKHVpbnQzMl90KTB4RkZGMEZGRkYpICANCisNCisvKiBDUjIgcmVnaXN0ZXIgTWFzayAqLw0KKyNkZWZpbmUgQ1IyX0NMRUFSX01BU0sgICAgICAgICAgICAoKHVpbnQzMl90KTB4QzBGRkY3RkQpDQorDQorLyogQURDIFNReCBtYXNrICovDQorI2RlZmluZSBTUVIzX1NRX1NFVCAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxRikgIA0KKyNkZWZpbmUgU1FSMl9TUV9TRVQgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMUYpICANCisjZGVmaW5lIFNRUjFfU1FfU0VUICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDFGKSAgDQorDQorLyogQURDIEwgTWFzayAqLw0KKyNkZWZpbmUgU1FSMV9MX1JFU0VUICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkYwRkZGRkYpIA0KKw0KKy8qIEFEQyBKU1F4IG1hc2sgKi8NCisjZGVmaW5lIEpTUVJfSlNRX1NFVCAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDFGKSANCisNCisvKiBBREMgSkwgbWFzayAqLw0KKyNkZWZpbmUgSlNRUl9KTF9TRVQgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAzMDAwMDApIA0KKyNkZWZpbmUgSlNRUl9KTF9SRVNFVCAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZDRkZGRkYpIA0KKw0KKy8qIEFEQyBTTVB4IG1hc2sgKi8NCisjZGVmaW5lIFNNUFIxX1NNUF9TRVQgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA3KSAgDQorI2RlZmluZSBTTVBSMl9TTVBfU0VUICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNykgDQorDQorLyogQURDIEpEUnggcmVnaXN0ZXJzIG9mZnNldCAqLw0KKyNkZWZpbmUgSkRSX09GRlNFVCAgICAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgyOCkgDQorDQorLyogQURDIENEUiByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8NCisjZGVmaW5lIENEUl9BRERSRVNTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDQwMDEyMzA4KSAgIA0KKw0KKy8qIEFEQyBDQ1IgcmVnaXN0ZXIgTWFzayAqLw0KKyNkZWZpbmUgQ1JfQ0xFQVJfTUFTSyAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGQzMwRTApICANCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIEFEQ19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoNCisgICAtIEluaXRpYWxpemUgYW5kIGNvbmZpZ3VyZSB0aGUgQURDIFByZXNjYWxlcg0KKyAgIC0gQURDIENvbnZlcnNpb24gUmVzb2x1dGlvbiAoMTJiaXQuLjZiaXQpDQorICAgLSBTY2FuIENvbnZlcnNpb24gTW9kZSAobXVsdGljaGFubmVscyBvciBvbmUgY2hhbm5lbCkgZm9yIHJlZ3VsYXIgZ3JvdXANCisgICAtIEFEQyBDb250aW51b3VzIENvbnZlcnNpb24gTW9kZSAoQ29udGludW91cyBvciBTaW5nbGUgY29udmVyc2lvbikgZm9yIA0KKyAgICAgcmVndWxhciBncm91cA0KKyAgIC0gRXh0ZXJuYWwgdHJpZ2dlciBFZGdlIGFuZCBzb3VyY2Ugb2YgcmVndWxhciBncm91cCwgDQorICAgLSBDb252ZXJ0ZWQgZGF0YSBhbGlnbm1lbnQgKGxlZnQgb3IgcmlnaHQpDQorICAgLSBUaGUgbnVtYmVyIG9mIEFEQyBjb252ZXJzaW9ucyB0aGF0IHdpbGwgYmUgZG9uZSB1c2luZyB0aGUgc2VxdWVuY2VyIGZvciANCisgICAgIHJlZ3VsYXIgY2hhbm5lbCBncm91cA0KKyAgIC0gTXVsdGkgQURDIG1vZGUgc2VsZWN0aW9uDQorICAgLSBEaXJlY3QgbWVtb3J5IGFjY2VzcyBtb2RlIHNlbGVjdGlvbiBmb3IgbXVsdGkgQURDIG1vZGUgIA0KKyAgIC0gRGVsYXkgYmV0d2VlbiAyIHNhbXBsaW5nIHBoYXNlcyAodXNlZCBpbiBkdWFsIG9yIHRyaXBsZSBpbnRlcmxlYXZlZCBtb2RlcykNCisgICAtIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBBREMgcGVyaXBoZXJhbA0KKyAgIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIGFsbCBBRENzIHBlcmlwaGVyYWxzIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IA0KKyAgKiAgICAgICAgIHZhbHVlcy4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19EZUluaXQodm9pZCkNCit7DQorICAvKiBFbmFibGUgYWxsIEFEQ3MgcmVzZXQgc3RhdGUgKi8NCisgIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjJQZXJpcGhfQURDLCBFTkFCTEUpOw0KKyAgDQorICAvKiBSZWxlYXNlIGFsbCBBRENzIGZyb20gcmVzZXQgc3RhdGUgKi8NCisgIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjJQZXJpcGhfQURDLCBESVNBQkxFKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIEFEQ3ggcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIA0KKyAgKiAgICAgICAgIGluIHRoZSBBRENfSW5pdFN0cnVjdC4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBnbG9iYWwgZmVhdHVyZXMgb2YgdGhlIEFEQyAoIA0KKyAgKiAgICAgICAgIFJlc29sdXRpb24gYW5kIERhdGEgQWxpZ25tZW50KSwgaG93ZXZlciwgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpYyB0byB0aGUgcmVndWxhciBjaGFubmVscyBncm91cCAoc2NhbiBtb2RlIA0KKyAgKiAgICAgICAgIGFjdGl2YXRpb24sIGNvbnRpbnVvdXMgbW9kZSBhY3RpdmF0aW9uLCBFeHRlcm5hbCB0cmlnZ2VyIHNvdXJjZSBhbmQgDQorICAqICAgICAgICAgZWRnZSwgbnVtYmVyIG9mIGNvbnZlcnNpb24gaW4gdGhlIHJlZ3VsYXIgY2hhbm5lbHMgZ3JvdXAgc2VxdWVuY2VyKS4gIA0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFEQ19Jbml0U3RydWN0OiBwb2ludGVyIHRvIGFuIEFEQ19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucw0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfSW5pdChBRENfVHlwZURlZiogQURDeCwgQURDX0luaXRUeXBlRGVmKiBBRENfSW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXByZWcxID0gMDsNCisgIHVpbnQ4X3QgdG1wcmVnMiA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfUkVTT0xVVElPTihBRENfSW5pdFN0cnVjdC0+QURDX1Jlc29sdXRpb24pKTsgDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShBRENfSW5pdFN0cnVjdC0+QURDX1NjYW5Db252TW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoQURDX0luaXRTdHJ1Y3QtPkFEQ19Db250aW51b3VzQ29udk1vZGUpKTsgDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0VYVF9UUklHX0VER0UoQURDX0luaXRTdHJ1Y3QtPkFEQ19FeHRlcm5hbFRyaWdDb252RWRnZSkpOyANCisgIGFzc2VydF9wYXJhbShJU19BRENfRVhUX1RSSUcoQURDX0luaXRTdHJ1Y3QtPkFEQ19FeHRlcm5hbFRyaWdDb252KSk7ICAgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19EQVRBX0FMSUdOKEFEQ19Jbml0U3RydWN0LT5BRENfRGF0YUFsaWduKSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SRUdVTEFSX0xFTkdUSChBRENfSW5pdFN0cnVjdC0+QURDX05ick9mQ29udmVyc2lvbikpOw0KKyAgDQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQURDeCBDUjEgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBHZXQgdGhlIEFEQ3ggQ1IxIHZhbHVlICovDQorICB0bXByZWcxID0gQURDeC0+Q1IxOw0KKyAgDQorICAvKiBDbGVhciBSRVMgYW5kIFNDQU4gYml0cyAqLw0KKyAgdG1wcmVnMSAmPSBDUjFfQ0xFQVJfTUFTSzsNCisgIA0KKyAgLyogQ29uZmlndXJlIEFEQ3g6IHNjYW4gY29udmVyc2lvbiBtb2RlIGFuZCByZXNvbHV0aW9uICovDQorICAvKiBTZXQgU0NBTiBiaXQgYWNjb3JkaW5nIHRvIEFEQ19TY2FuQ29udk1vZGUgdmFsdWUgKi8NCisgIC8qIFNldCBSRVMgYml0IGFjY29yZGluZyB0byBBRENfUmVzb2x1dGlvbiB2YWx1ZSAqLyANCisgIHRtcHJlZzEgfD0gKHVpbnQzMl90KSgoKHVpbnQzMl90KUFEQ19Jbml0U3RydWN0LT5BRENfU2NhbkNvbnZNb2RlIDw8IDgpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0luaXRTdHJ1Y3QtPkFEQ19SZXNvbHV0aW9uKTsNCisgIC8qIFdyaXRlIHRvIEFEQ3ggQ1IxICovDQorICBBREN4LT5DUjEgPSB0bXByZWcxOw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFEQ3ggQ1IyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogR2V0IHRoZSBBREN4IENSMiB2YWx1ZSAqLw0KKyAgdG1wcmVnMSA9IEFEQ3gtPkNSMjsNCisgIA0KKyAgLyogQ2xlYXIgQ09OVCwgQUxJR04sIEVYVEVOIGFuZCBFWFRTRUwgYml0cyAqLw0KKyAgdG1wcmVnMSAmPSBDUjJfQ0xFQVJfTUFTSzsNCisgIA0KKyAgLyogQ29uZmlndXJlIEFEQ3g6IGV4dGVybmFsIHRyaWdnZXIgZXZlbnQgYW5kIGVkZ2UsIGRhdGEgYWxpZ25tZW50IGFuZCANCisgICAgIGNvbnRpbnVvdXMgY29udmVyc2lvbiBtb2RlICovDQorICAvKiBTZXQgQUxJR04gYml0IGFjY29yZGluZyB0byBBRENfRGF0YUFsaWduIHZhbHVlICovDQorICAvKiBTZXQgRVhURU4gYml0cyBhY2NvcmRpbmcgdG8gQURDX0V4dGVybmFsVHJpZ0NvbnZFZGdlIHZhbHVlICovIA0KKyAgLyogU2V0IEVYVFNFTCBiaXRzIGFjY29yZGluZyB0byBBRENfRXh0ZXJuYWxUcmlnQ29udiB2YWx1ZSAqLw0KKyAgLyogU2V0IENPTlQgYml0IGFjY29yZGluZyB0byBBRENfQ29udGludW91c0NvbnZNb2RlIHZhbHVlICovDQorICB0bXByZWcxIHw9ICh1aW50MzJfdCkoQURDX0luaXRTdHJ1Y3QtPkFEQ19EYXRhQWxpZ24gfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgQURDX0luaXRTdHJ1Y3QtPkFEQ19FeHRlcm5hbFRyaWdDb252IHwgDQorICAgICAgICAgICAgICAgICAgICAgICAgQURDX0luaXRTdHJ1Y3QtPkFEQ19FeHRlcm5hbFRyaWdDb252RWRnZSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KUFEQ19Jbml0U3RydWN0LT5BRENfQ29udGludW91c0NvbnZNb2RlIDw8IDEpKTsNCisgICAgICAgICAgICAgICAgICAgICAgICANCisgIC8qIFdyaXRlIHRvIEFEQ3ggQ1IyICovDQorICBBREN4LT5DUjIgPSB0bXByZWcxOw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFEQ3ggU1FSMSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIC8qIEdldCB0aGUgQURDeCBTUVIxIHZhbHVlICovDQorICB0bXByZWcxID0gQURDeC0+U1FSMTsNCisgIA0KKyAgLyogQ2xlYXIgTCBiaXRzICovDQorICB0bXByZWcxICY9IFNRUjFfTF9SRVNFVDsNCisgIA0KKyAgLyogQ29uZmlndXJlIEFEQ3g6IHJlZ3VsYXIgY2hhbm5lbCBzZXF1ZW5jZSBsZW5ndGggKi8NCisgIC8qIFNldCBMIGJpdHMgYWNjb3JkaW5nIHRvIEFEQ19OYnJPZkNvbnZlcnNpb24gdmFsdWUgKi8NCisgIHRtcHJlZzIgfD0gKHVpbnQ4X3QpKEFEQ19Jbml0U3RydWN0LT5BRENfTmJyT2ZDb252ZXJzaW9uIC0gKHVpbnQ4X3QpMSk7DQorICB0bXByZWcxIHw9ICgodWludDMyX3QpdG1wcmVnMiA8PCAyMCk7DQorICANCisgIC8qIFdyaXRlIHRvIEFEQ3ggU1FSMSAqLw0KKyAgQURDeC0+U1FSMSA9IHRtcHJlZzE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggQURDX0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbCBmZWF0dXJlcyBvZiB0aGUgQURDICggDQorICAqICAgICAgICAgUmVzb2x1dGlvbiBhbmQgRGF0YSBBbGlnbm1lbnQpLCBob3dldmVyLCB0aGUgcmVzdCBvZiB0aGUgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmljIHRvIHRoZSByZWd1bGFyIGNoYW5uZWxzIGdyb3VwIChzY2FuIG1vZGUgDQorICAqICAgICAgICAgYWN0aXZhdGlvbiwgY29udGludW91cyBtb2RlIGFjdGl2YXRpb24sIEV4dGVybmFsIHRyaWdnZXIgc291cmNlIGFuZCANCisgICogICAgICAgICBlZGdlLCBudW1iZXIgb2YgY29udmVyc2lvbiBpbiB0aGUgcmVndWxhciBjaGFubmVscyBncm91cCBzZXF1ZW5jZXIpLiAgDQorICAqIEBwYXJhbSAgQURDX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYW4gQURDX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsIA0KKyAgKiAgICAgICAgIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfU3RydWN0SW5pdChBRENfSW5pdFR5cGVEZWYqIEFEQ19Jbml0U3RydWN0KQ0KK3sNCisgIC8qIEluaXRpYWxpemUgdGhlIEFEQ19Nb2RlIG1lbWJlciAqLw0KKyAgQURDX0luaXRTdHJ1Y3QtPkFEQ19SZXNvbHV0aW9uID0gQURDX1Jlc29sdXRpb25fMTJiOw0KKw0KKyAgLyogaW5pdGlhbGl6ZSB0aGUgQURDX1NjYW5Db252TW9kZSBtZW1iZXIgKi8NCisgIEFEQ19Jbml0U3RydWN0LT5BRENfU2NhbkNvbnZNb2RlID0gRElTQUJMRTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIEFEQ19Db250aW51b3VzQ29udk1vZGUgbWVtYmVyICovDQorICBBRENfSW5pdFN0cnVjdC0+QURDX0NvbnRpbnVvdXNDb252TW9kZSA9IERJU0FCTEU7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBBRENfRXh0ZXJuYWxUcmlnQ29udkVkZ2UgbWVtYmVyICovDQorICBBRENfSW5pdFN0cnVjdC0+QURDX0V4dGVybmFsVHJpZ0NvbnZFZGdlID0gQURDX0V4dGVybmFsVHJpZ0NvbnZFZGdlX05vbmU7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBBRENfRXh0ZXJuYWxUcmlnQ29udiBtZW1iZXIgKi8NCisgIEFEQ19Jbml0U3RydWN0LT5BRENfRXh0ZXJuYWxUcmlnQ29udiA9IEFEQ19FeHRlcm5hbFRyaWdDb252X1QxX0NDMTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIEFEQ19EYXRhQWxpZ24gbWVtYmVyICovDQorICBBRENfSW5pdFN0cnVjdC0+QURDX0RhdGFBbGlnbiA9IEFEQ19EYXRhQWxpZ25fUmlnaHQ7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBBRENfTmJyT2ZDb252ZXJzaW9uIG1lbWJlciAqLw0KKyAgQURDX0luaXRTdHJ1Y3QtPkFEQ19OYnJPZkNvbnZlcnNpb24gPSAxOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgQURDcyBwZXJpcGhlcmFscyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIA0KKyAgKiAgICAgICAgIGluIHRoZSBBRENfQ29tbW9uSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBBRENfQ29tbW9uSW5pdFN0cnVjdDogcG9pbnRlciB0byBhbiBBRENfQ29tbW9uSW5pdFR5cGVEZWYgc3RydWN0dXJlIA0KKyAgKiAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yICBBbGwgQURDcyBwZXJpcGhlcmFscy4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQURDX0NvbW1vbkluaXQoQURDX0NvbW1vbkluaXRUeXBlRGVmKiBBRENfQ29tbW9uSW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXByZWcxID0gMDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX01PREUoQURDX0NvbW1vbkluaXRTdHJ1Y3QtPkFEQ19Nb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX1BSRVNDQUxFUihBRENfQ29tbW9uSW5pdFN0cnVjdC0+QURDX1ByZXNjYWxlcikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19ETUFfQUNDRVNTX01PREUoQURDX0NvbW1vbkluaXRTdHJ1Y3QtPkFEQ19ETUFBY2Nlc3NNb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX1NBTVBMSU5HX0RFTEFZKEFEQ19Db21tb25Jbml0U3RydWN0LT5BRENfVHdvU2FtcGxpbmdEZWxheSkpOw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFEQyBDQ1IgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBHZXQgdGhlIEFEQyBDQ1IgdmFsdWUgKi8NCisgIHRtcHJlZzEgPSBBREMtPkNDUjsNCisgIA0KKyAgLyogQ2xlYXIgTVVMVEksIERFTEFZLCBETUEgYW5kIEFEQ1BSRSBiaXRzICovDQorICB0bXByZWcxICY9IENSX0NMRUFSX01BU0s7DQorICANCisgIC8qIENvbmZpZ3VyZSBBREN4OiBNdWx0aSBtb2RlLCBEZWxheSBiZXR3ZWVuIHR3byBzYW1wbGluZyB0aW1lLCBBREMgcHJlc2NhbGVyLA0KKyAgICAgYW5kIERNQSBhY2Nlc3MgbW9kZSBmb3IgbXVsdGltb2RlICovDQorICAvKiBTZXQgTVVMVEkgYml0cyBhY2NvcmRpbmcgdG8gQURDX01vZGUgdmFsdWUgKi8NCisgIC8qIFNldCBBRENQUkUgYml0cyBhY2NvcmRpbmcgdG8gQURDX1ByZXNjYWxlciB2YWx1ZSAqLw0KKyAgLyogU2V0IERNQSBiaXRzIGFjY29yZGluZyB0byBBRENfRE1BQWNjZXNzTW9kZSB2YWx1ZSAqLw0KKyAgLyogU2V0IERFTEFZIGJpdHMgYWNjb3JkaW5nIHRvIEFEQ19Ud29TYW1wbGluZ0RlbGF5IHZhbHVlICovICAgIA0KKyAgdG1wcmVnMSB8PSAodWludDMyX3QpKEFEQ19Db21tb25Jbml0U3RydWN0LT5BRENfTW9kZSB8IA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19Db21tb25Jbml0U3RydWN0LT5BRENfUHJlc2NhbGVyIHwgDQorICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NvbW1vbkluaXRTdHJ1Y3QtPkFEQ19ETUFBY2Nlc3NNb2RlIHwgDQorICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NvbW1vbkluaXRTdHJ1Y3QtPkFEQ19Ud29TYW1wbGluZ0RlbGF5KTsNCisgICAgICAgICAgICAgICAgICAgICAgICANCisgIC8qIFdyaXRlIHRvIEFEQyBDQ1IgKi8NCisgIEFEQy0+Q0NSID0gdG1wcmVnMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBBRENfQ29tbW9uSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBBRENfQ29tbW9uSW5pdFN0cnVjdDogcG9pbnRlciB0byBhbiBBRENfQ29tbW9uSW5pdFR5cGVEZWYgc3RydWN0dXJlDQorICAqICAgICAgICAgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQURDX0NvbW1vblN0cnVjdEluaXQoQURDX0NvbW1vbkluaXRUeXBlRGVmKiBBRENfQ29tbW9uSW5pdFN0cnVjdCkNCit7DQorICAvKiBJbml0aWFsaXplIHRoZSBBRENfTW9kZSBtZW1iZXIgKi8NCisgIEFEQ19Db21tb25Jbml0U3RydWN0LT5BRENfTW9kZSA9IEFEQ19Nb2RlX0luZGVwZW5kZW50Ow0KKw0KKyAgLyogaW5pdGlhbGl6ZSB0aGUgQURDX1ByZXNjYWxlciBtZW1iZXIgKi8NCisgIEFEQ19Db21tb25Jbml0U3RydWN0LT5BRENfUHJlc2NhbGVyID0gQURDX1ByZXNjYWxlcl9EaXYyOw0KKw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgQURDX0RNQUFjY2Vzc01vZGUgbWVtYmVyICovDQorICBBRENfQ29tbW9uSW5pdFN0cnVjdC0+QURDX0RNQUFjY2Vzc01vZGUgPSBBRENfRE1BQWNjZXNzTW9kZV9EaXNhYmxlZDsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIEFEQ19Ud29TYW1wbGluZ0RlbGF5IG1lbWJlciAqLw0KKyAgQURDX0NvbW1vbkluaXRTdHJ1Y3QtPkFEQ19Ud29TYW1wbGluZ0RlbGF5ID0gQURDX1R3b1NhbXBsaW5nRGVsYXlfNUN5Y2xlczsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIEFEQ3ggcGVyaXBoZXJhbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19DbWQoQURDX1R5cGVEZWYqIEFEQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogU2V0IHRoZSBBRE9OIGJpdCB0byB3YWtlIHVwIHRoZSBBREMgZnJvbSBwb3dlciBkb3duIG1vZGUgKi8NCisgICAgQURDeC0+Q1IyIHw9ICh1aW50MzJfdClBRENfQ1IyX0FET047DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEFEQyBwZXJpcGhlcmFsICovDQorICAgIEFEQ3gtPkNSMiAmPSAodWludDMyX3QpKH5BRENfQ1IyX0FET04pOw0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBBRENfR3JvdXAyIEFuYWxvZyBXYXRjaGRvZyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICAgQW5hbG9nIFdhdGNoZG9nIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgIEFuYWxvZyBXYXRjaGRvZyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBBbmFsb2cgV2F0Y2hkb2cNCisgIChBV0QpIGZlYXR1cmUgaW4gdGhlIEFEQy4NCisgIA0KKyAgQSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24gQW5hbG9nIFdhdGNoZG9nIGlzIGRvbmUgZm9sbG93aW5nIHRoZXNlIHN0ZXBzIDoNCisgICAxLiB0aGUgQURDIGd1YXJkZWQgY2hhbm5lbChzKSBpcyAoYXJlKSBzZWxlY3RlZCB1c2luZyB0aGUgDQorICAgICAgQURDX0FuYWxvZ1dhdGNoZG9nU2luZ2xlQ2hhbm5lbENvbmZpZygpIGZ1bmN0aW9uLg0KKyAgIDIuIFRoZSBBbmFsb2cgd2F0Y2hkb2cgbG93ZXIgYW5kIGhpZ2hlciB0aHJlc2hvbGQgYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlICANCisgICAgIEFEQ19BbmFsb2dXYXRjaGRvZ1RocmVzaG9sZHNDb25maWcoKSBmdW5jdGlvbi4NCisgICAzLiBUaGUgQW5hbG9nIHdhdGNoZG9nIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQgdG8gZW5hYmxlIHRoZSBjaGVjaywgb24gb25lDQorICAgICAgb3IgbW9yZSBjaGFubmVscywgdXNpbmcgdGhlICBBRENfQW5hbG9nV2F0Y2hkb2dDbWQoKSBmdW5jdGlvbi4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhbmFsb2cgd2F0Y2hkb2cgb24gc2luZ2xlL2FsbCByZWd1bGFyIG9yIA0KKyAgKiAgICAgICAgIGluamVjdGVkIGNoYW5uZWxzDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQURDX0FuYWxvZ1dhdGNoZG9nOiB0aGUgQURDIGFuYWxvZyB3YXRjaGRvZyBjb25maWd1cmF0aW9uLg0KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBBRENfQW5hbG9nV2F0Y2hkb2dfU2luZ2xlUmVnRW5hYmxlOiBBbmFsb2cgd2F0Y2hkb2cgb24gYSBzaW5nbGUgcmVndWxhciBjaGFubmVsDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQW5hbG9nV2F0Y2hkb2dfU2luZ2xlSW5qZWNFbmFibGU6IEFuYWxvZyB3YXRjaGRvZyBvbiBhIHNpbmdsZSBpbmplY3RlZCBjaGFubmVsDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQW5hbG9nV2F0Y2hkb2dfU2luZ2xlUmVnT3JJbmplY0VuYWJsZTogQW5hbG9nIHdhdGNoZG9nIG9uIGEgc2luZ2xlIHJlZ3VsYXIgb3IgaW5qZWN0ZWQgY2hhbm5lbA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0FuYWxvZ1dhdGNoZG9nX0FsbFJlZ0VuYWJsZTogQW5hbG9nIHdhdGNoZG9nIG9uIGFsbCByZWd1bGFyIGNoYW5uZWwNCisgICogICAgICAgICAgICBAYXJnIEFEQ19BbmFsb2dXYXRjaGRvZ19BbGxJbmplY0VuYWJsZTogQW5hbG9nIHdhdGNoZG9nIG9uIGFsbCBpbmplY3RlZCBjaGFubmVsDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQW5hbG9nV2F0Y2hkb2dfQWxsUmVnQWxsSW5qZWNFbmFibGU6IEFuYWxvZyB3YXRjaGRvZyBvbiBhbGwgcmVndWxhciBhbmQgaW5qZWN0ZWQgY2hhbm5lbHMNCisgICogICAgICAgICAgICBAYXJnIEFEQ19BbmFsb2dXYXRjaGRvZ19Ob25lOiBObyBjaGFubmVsIGd1YXJkZWQgYnkgdGhlIGFuYWxvZyB3YXRjaGRvZw0KKyAgKiBAcmV0dmFsIE5vbmUJICANCisgICovDQordm9pZCBBRENfQW5hbG9nV2F0Y2hkb2dDbWQoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQzMl90IEFEQ19BbmFsb2dXYXRjaGRvZykNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FOQUxPR19XQVRDSERPRyhBRENfQW5hbG9nV2F0Y2hkb2cpKTsNCisgIA0KKyAgLyogR2V0IHRoZSBvbGQgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcHJlZyA9IEFEQ3gtPkNSMTsNCisgIA0KKyAgLyogQ2xlYXIgQVdERU4sIEpBV0RFTiBhbmQgQVdEU0dMIGJpdHMgKi8NCisgIHRtcHJlZyAmPSBDUjFfQVdETW9kZV9SRVNFVDsNCisgIA0KKyAgLyogU2V0IHRoZSBhbmFsb2cgd2F0Y2hkb2cgZW5hYmxlIG1vZGUgKi8NCisgIHRtcHJlZyB8PSBBRENfQW5hbG9nV2F0Y2hkb2c7DQorICANCisgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIEFEQ3gtPkNSMSA9IHRtcHJlZzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgaGlnaCBhbmQgbG93IHRocmVzaG9sZHMgb2YgdGhlIGFuYWxvZyB3YXRjaGRvZy4NCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBIaWdoVGhyZXNob2xkOiB0aGUgQURDIGFuYWxvZyB3YXRjaGRvZyBIaWdoIHRocmVzaG9sZCB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDEyLWJpdCB2YWx1ZS4NCisgICogQHBhcmFtICBMb3dUaHJlc2hvbGQ6ICB0aGUgQURDIGFuYWxvZyB3YXRjaGRvZyBMb3cgdGhyZXNob2xkIHZhbHVlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgMTItYml0IHZhbHVlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfQW5hbG9nV2F0Y2hkb2dUaHJlc2hvbGRzQ29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50MTZfdCBIaWdoVGhyZXNob2xkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBMb3dUaHJlc2hvbGQpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX1RIUkVTSE9MRChIaWdoVGhyZXNob2xkKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX1RIUkVTSE9MRChMb3dUaHJlc2hvbGQpKTsNCisgIA0KKyAgLyogU2V0IHRoZSBBREN4IGhpZ2ggdGhyZXNob2xkICovDQorICBBREN4LT5IVFIgPSBIaWdoVGhyZXNob2xkOw0KKyAgDQorICAvKiBTZXQgdGhlIEFEQ3ggbG93IHRocmVzaG9sZCAqLw0KKyAgQURDeC0+TFRSID0gTG93VGhyZXNob2xkOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBhbmFsb2cgd2F0Y2hkb2cgZ3VhcmRlZCBzaW5nbGUgY2hhbm5lbA0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFEQ19DaGFubmVsOiB0aGUgQURDIGNoYW5uZWwgdG8gY29uZmlndXJlIGZvciB0aGUgYW5hbG9nIHdhdGNoZG9nLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzA6IEFEQyBDaGFubmVsMCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTogQURDIENoYW5uZWwxIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8yOiBBREMgQ2hhbm5lbDIgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzM6IEFEQyBDaGFubmVsMyBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfNDogQURDIENoYW5uZWw0IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF81OiBBREMgQ2hhbm5lbDUgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzY6IEFEQyBDaGFubmVsNiBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfNzogQURDIENoYW5uZWw3IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF84OiBBREMgQ2hhbm5lbDggc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzk6IEFEQyBDaGFubmVsOSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTA6IEFEQyBDaGFubmVsMTAgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzExOiBBREMgQ2hhbm5lbDExIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xMjogQURDIENoYW5uZWwxMiBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTM6IEFEQyBDaGFubmVsMTMgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzE0OiBBREMgQ2hhbm5lbDE0IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xNTogQURDIENoYW5uZWwxNSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTY6IEFEQyBDaGFubmVsMTYgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzE3OiBBREMgQ2hhbm5lbDE3IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xODogQURDIENoYW5uZWwxOCBzZWxlY3RlZA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfQW5hbG9nV2F0Y2hkb2dTaW5nbGVDaGFubmVsQ29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IEFEQ19DaGFubmVsKQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfQ0hBTk5FTChBRENfQ2hhbm5lbCkpOw0KKyAgDQorICAvKiBHZXQgdGhlIG9sZCByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wcmVnID0gQURDeC0+Q1IxOw0KKyAgDQorICAvKiBDbGVhciB0aGUgQW5hbG9nIHdhdGNoZG9nIGNoYW5uZWwgc2VsZWN0IGJpdHMgKi8NCisgIHRtcHJlZyAmPSBDUjFfQVdEQ0hfUkVTRVQ7DQorICANCisgIC8qIFNldCB0aGUgQW5hbG9nIHdhdGNoZG9nIGNoYW5uZWwgKi8NCisgIHRtcHJlZyB8PSBBRENfQ2hhbm5lbDsNCisgIA0KKyAgLyogU3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgQURDeC0+Q1IxID0gdG1wcmVnOw0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBBRENfR3JvdXAzIFRlbXBlcmF0dXJlIFNlbnNvciwgVnJlZmludCAoVm9sdGFnZSBSZWZlcmVuY2UgaW50ZXJuYWwpIA0KKyAqICAgICAgICAgICAgYW5kIFZCQVQgKFZvbHRhZ2UgQkFUdGVyeSkgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgVGVtcGVyYXR1cmUgU2Vuc29yLCBWcmVmaW50IGFuZCBWQkFUIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICBUZW1wZXJhdHVyZSBTZW5zb3IsIFZyZWZpbnQgYW5kIFZCQVQgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGVuYWJsZS8gZGlzYWJsZSB0aGUgaW50ZXJuYWwgDQorICBjb25uZWN0aW9ucyBiZXR3ZWVuIHRoZSBBREMgYW5kIHRoZSBUZW1wZXJhdHVyZSBTZW5zb3IsIHRoZSBWcmVmaW50IGFuZCB0aGUNCisgIFZiYXQgc291cmNlcy4NCisgICAgIA0KKyAgQSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24gdG8gZ2V0IHRoZSBUZW1wZXJhdHVyZSBzZW5zb3IgYW5kIFZyZWZpbnQgY2hhbm5lbHMgDQorICB2b2x0YWdlcyBpcyBkb25lIGZvbGxvd2luZyB0aGVzZSBzdGVwcyA6DQorICAgMS4gRW5hYmxlIHRoZSBpbnRlcm5hbCBjb25uZWN0aW9uIG9mIFRlbXBlcmF0dXJlIHNlbnNvciBhbmQgVnJlZmludCBzb3VyY2VzIA0KKyAgICAgIHdpdGggdGhlIEFEQyBjaGFubmVscyB1c2luZyBBRENfVGVtcFNlbnNvclZyZWZpbnRDbWQoKSBmdW5jdGlvbi4gDQorICAgMi4gU2VsZWN0IHRoZSBBRENfQ2hhbm5lbF9UZW1wU2Vuc29yIGFuZC9vciBBRENfQ2hhbm5lbF9WcmVmaW50IHVzaW5nIA0KKyAgICAgIEFEQ19SZWd1bGFyQ2hhbm5lbENvbmZpZygpIG9yICBBRENfSW5qZWN0ZWRDaGFubmVsQ29uZmlnKCkgZnVuY3Rpb25zIA0KKyAgIDMuIEdldCB0aGUgdm9sdGFnZSB2YWx1ZXMsIHVzaW5nIEFEQ19HZXRDb252ZXJzaW9uVmFsdWUoKSBvciAgDQorICAgICAgQURDX0dldEluamVjdGVkQ29udmVyc2lvblZhbHVlKCkuDQorDQorICBBIHR5cGljYWwgY29uZmlndXJhdGlvbiB0byBnZXQgdGhlIFZCQVQgY2hhbm5lbCB2b2x0YWdlIGlzIGRvbmUgZm9sbG93aW5nIA0KKyAgdGhlc2Ugc3RlcHMgOg0KKyAgIDEuIEVuYWJsZSB0aGUgaW50ZXJuYWwgY29ubmVjdGlvbiBvZiBWQkFUIHNvdXJjZSB3aXRoIHRoZSBBREMgY2hhbm5lbCB1c2luZyANCisgICAgICBBRENfVkJBVENtZCgpIGZ1bmN0aW9uLiANCisgICAyLiBTZWxlY3QgdGhlIEFEQ19DaGFubmVsX1ZiYXQgdXNpbmcgQURDX1JlZ3VsYXJDaGFubmVsQ29uZmlnKCkgb3IgIA0KKyAgICAgIEFEQ19JbmplY3RlZENoYW5uZWxDb25maWcoKSBmdW5jdGlvbnMgDQorICAgMy4gR2V0IHRoZSB2b2x0YWdlIHZhbHVlLCB1c2luZyBBRENfR2V0Q29udmVyc2lvblZhbHVlKCkgb3IgIA0KKyAgICAgIEFEQ19HZXRJbmplY3RlZENvbnZlcnNpb25WYWx1ZSgpLg0KKyANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRlbXBlcmF0dXJlIHNlbnNvciBhbmQgVnJlZmludCBjaGFubmVscy4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3IgYW5kIFZyZWZpbnQgY2hhbm5lbHMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19UZW1wU2Vuc29yVnJlZmludENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpICAgICAgICAgICAgICAgIA0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgdGVtcGVyYXR1cmUgc2Vuc29yIGFuZCBWcmVmaW50IGNoYW5uZWwqLw0KKyAgICBBREMtPkNDUiB8PSAodWludDMyX3QpQURDX0NDUl9UU1ZSRUZFOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3IgYW5kIFZyZWZpbnQgY2hhbm5lbCovDQorICAgIEFEQy0+Q0NSICY9ICh1aW50MzJfdCkofkFEQ19DQ1JfVFNWUkVGRSk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFZCQVQgKFZvbHRhZ2UgQmF0dGVyeSkgY2hhbm5lbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBWQkFUIGNoYW5uZWwuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19WQkFUQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgVkJBVCBjaGFubmVsKi8NCisgICAgQURDLT5DQ1IgfD0gKHVpbnQzMl90KUFEQ19DQ1JfVkJBVEU7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFZCQVQgY2hhbm5lbCovDQorICAgIEFEQy0+Q0NSICY9ICh1aW50MzJfdCkofkFEQ19DQ1JfVkJBVEUpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBBRENfR3JvdXA0IFJlZ3VsYXIgQ2hhbm5lbHMgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgUmVndWxhciBDaGFubmVscyBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgUmVndWxhciBDaGFubmVscyBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBBREMncyByZWd1bGFyIGNoYW5uZWxzLA0KKyAgaXQgaXMgY29tcG9zZWQgb2YgMiBzdWIgc2VjdGlvbnMgOiANCisgIA0KKyAgMS4gQ29uZmlndXJhdGlvbiBhbmQgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIHJlZ3VsYXIgY2hhbm5lbHM6IFRoaXMgc3Vic2VjdGlvbiANCisgICAgIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIEFEQyByZWd1bGFyIGNoYW5uZWxzIDogICAgDQorICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSByYW5rIGluIHRoZSByZWd1bGFyIGdyb3VwIHNlcXVlbmNlciBmb3IgZWFjaCBjaGFubmVsDQorICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBzYW1wbGluZyB0aW1lIGZvciBlYWNoIGNoYW5uZWwNCisgICAgICAgICAgLSBzZWxlY3QgdGhlIGNvbnZlcnNpb24gVHJpZ2dlciBmb3IgcmVndWxhciBjaGFubmVscw0KKyAgICAgICAgICAtIHNlbGVjdCB0aGUgZGVzaXJlZCBFT0MgZXZlbnQgYmVoYXZpb3IgY29uZmlndXJhdGlvbg0KKyAgICAgICAgICAtIEFjdGl2YXRlIHRoZSBjb250aW51b3VzIE1vZGUgICgqKQ0KKyAgICAgICAgICAtIEFjdGl2YXRlIHRoZSBEaXNjb250aW51b3VzIE1vZGUgDQorICAgICBQbGVhc2UgTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZm9yIHJlZ3VsYXIgY2hhbm5lbHMgYXJlIGNvbmZpZ3VyYXRlZA0KKyAgICAgdXNpbmcgdGhlIEFEQ19Jbml0KCkgZnVuY3Rpb24gOiANCisgICAgICAgICAgLSBzY2FuIG1vZGUgYWN0aXZhdGlvbiANCisgICAgICAgICAgLSBjb250aW51b3VzIG1vZGUgYWN0aXZhdGlvbiAoKiopIA0KKyAgICAgICAgICAtIEV4dGVybmFsIHRyaWdnZXIgc291cmNlICANCisgICAgICAgICAgLSBFeHRlcm5hbCB0cmlnZ2VyIGVkZ2UgDQorICAgICAgICAgIC0gbnVtYmVyIG9mIGNvbnZlcnNpb24gaW4gdGhlIHJlZ3VsYXIgY2hhbm5lbHMgZ3JvdXAgc2VxdWVuY2VyLg0KKyAgICAgDQorICAgICBAbm90ZSAoKikgYW5kICgqKikgYXJlIHBlcmZvcm1pbmcgdGhlIHNhbWUgY29uZmlndXJhdGlvbg0KKyAgICAgDQorICAyLiBHZXQgdGhlIGNvbnZlcnNpb24gZGF0YTogVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGFuIGltcG9ydGFudCBmdW5jdGlvbiBpbiANCisgICAgIHRoZSBBREMgcGVyaXBoZXJhbCBzaW5jZSBpdCByZXR1cm5zIHRoZSBjb252ZXJ0ZWQgZGF0YSBvZiB0aGUgY3VycmVudCANCisgICAgIHJlZ3VsYXIgY2hhbm5lbC4gV2hlbiB0aGUgQ29udmVyc2lvbiB2YWx1ZSBpcyByZWFkLCB0aGUgRU9DIEZsYWcgaXMgDQorICAgICBhdXRvbWF0aWNhbGx5IGNsZWFyZWQuDQorICAgICANCisgICAgIEBub3RlIEZvciBtdWx0aSBBREMgbW9kZSwgdGhlIGxhc3QgQURDMSwgQURDMiBhbmQgQURDMyByZWd1bGFyIGNvbnZlcnNpb25zIA0KKyAgICAgICAgICAgcmVzdWx0cyBkYXRhIChpbiB0aGUgc2VsZWN0ZWQgbXVsdGkgbW9kZSkgY2FuIGJlIHJldHVybmVkIGluIHRoZSBzYW1lIA0KKyAgICAgICAgICAgdGltZSB1c2luZyBBRENfR2V0TXVsdGlNb2RlQ29udmVyc2lvblZhbHVlKCkgZnVuY3Rpb24uIA0KKyAgICAgICANCisgIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIGZvciB0aGUgc2VsZWN0ZWQgQURDIHJlZ3VsYXIgY2hhbm5lbCBpdHMgY29ycmVzcG9uZGluZw0KKyAgKiAgICAgICAgIHJhbmsgaW4gdGhlIHNlcXVlbmNlciBhbmQgaXRzIHNhbXBsZSB0aW1lLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFEQ19DaGFubmVsOiB0aGUgQURDIGNoYW5uZWwgdG8gY29uZmlndXJlLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzA6IEFEQyBDaGFubmVsMCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTogQURDIENoYW5uZWwxIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8yOiBBREMgQ2hhbm5lbDIgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzM6IEFEQyBDaGFubmVsMyBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfNDogQURDIENoYW5uZWw0IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF81OiBBREMgQ2hhbm5lbDUgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzY6IEFEQyBDaGFubmVsNiBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfNzogQURDIENoYW5uZWw3IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF84OiBBREMgQ2hhbm5lbDggc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzk6IEFEQyBDaGFubmVsOSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTA6IEFEQyBDaGFubmVsMTAgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzExOiBBREMgQ2hhbm5lbDExIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xMjogQURDIENoYW5uZWwxMiBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTM6IEFEQyBDaGFubmVsMTMgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzE0OiBBREMgQ2hhbm5lbDE0IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xNTogQURDIENoYW5uZWwxNSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTY6IEFEQyBDaGFubmVsMTYgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzE3OiBBREMgQ2hhbm5lbDE3IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xODogQURDIENoYW5uZWwxOCBzZWxlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgDQorICAqIEBwYXJhbSAgUmFuazogVGhlIHJhbmsgaW4gdGhlIHJlZ3VsYXIgZ3JvdXAgc2VxdWVuY2VyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGJldHdlZW4gMSB0byAxNi4NCisgICogQHBhcmFtICBBRENfU2FtcGxlVGltZTogVGhlIHNhbXBsZSB0aW1lIHZhbHVlIHRvIGJlIHNldCBmb3IgdGhlIHNlbGVjdGVkIGNoYW5uZWwuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfM0N5Y2xlczogU2FtcGxlIHRpbWUgZXF1YWwgdG8gMyBjeWNsZXMNCisgICogICAgICAgICAgICBAYXJnIEFEQ19TYW1wbGVUaW1lXzE1Q3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byAxNSBjeWNsZXMNCisgICogICAgICAgICAgICBAYXJnIEFEQ19TYW1wbGVUaW1lXzI4Q3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byAyOCBjeWNsZXMNCisgICogICAgICAgICAgICBAYXJnIEFEQ19TYW1wbGVUaW1lXzU2Q3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byA1NiBjeWNsZXMJDQorICAqICAgICAgICAgICAgQGFyZyBBRENfU2FtcGxlVGltZV84NEN5Y2xlczogU2FtcGxlIHRpbWUgZXF1YWwgdG8gODQgY3ljbGVzCQ0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfMTEyQ3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byAxMTIgY3ljbGVzCQ0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfMTQ0Q3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byAxNDQgY3ljbGVzCQ0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfNDgwQ3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byA0ODAgY3ljbGVzCQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfUmVndWxhckNoYW5uZWxDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgQURDX0NoYW5uZWwsIHVpbnQ4X3QgUmFuaywgdWludDhfdCBBRENfU2FtcGxlVGltZSkNCit7DQorICB1aW50MzJfdCB0bXByZWcxID0gMCwgdG1wcmVnMiA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfQ0hBTk5FTChBRENfQ2hhbm5lbCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SRUdVTEFSX1JBTksoUmFuaykpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19TQU1QTEVfVElNRShBRENfU2FtcGxlVGltZSkpOw0KKyAgDQorICAvKiBpZiBBRENfQ2hhbm5lbF8xMCAuLi4gQURDX0NoYW5uZWxfMTggaXMgc2VsZWN0ZWQgKi8NCisgIGlmIChBRENfQ2hhbm5lbCA+IEFEQ19DaGFubmVsXzkpDQorICB7DQorICAgIC8qIEdldCB0aGUgb2xkIHJlZ2lzdGVyIHZhbHVlICovDQorICAgIHRtcHJlZzEgPSBBREN4LT5TTVBSMTsNCisgICAgDQorICAgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBjbGVhciAqLw0KKyAgICB0bXByZWcyID0gU01QUjFfU01QX1NFVCA8PCAoMyAqIChBRENfQ2hhbm5lbCAtIDEwKSk7DQorICAgIA0KKyAgICAvKiBDbGVhciB0aGUgb2xkIHNhbXBsZSB0aW1lICovDQorICAgIHRtcHJlZzEgJj0gfnRtcHJlZzI7DQorICAgIA0KKyAgICAvKiBDYWxjdWxhdGUgdGhlIG1hc2sgdG8gc2V0ICovDQorICAgIHRtcHJlZzIgPSAodWludDMyX3QpQURDX1NhbXBsZVRpbWUgPDwgKDMgKiAoQURDX0NoYW5uZWwgLSAxMCkpOw0KKyAgICANCisgICAgLyogU2V0IHRoZSBuZXcgc2FtcGxlIHRpbWUgKi8NCisgICAgdG1wcmVnMSB8PSB0bXByZWcyOw0KKyAgICANCisgICAgLyogU3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICBBREN4LT5TTVBSMSA9IHRtcHJlZzE7DQorICB9DQorICBlbHNlIC8qIEFEQ19DaGFubmVsIGluY2x1ZGUgaW4gQURDX0NoYW5uZWxfWzAuLjldICovDQorICB7DQorICAgIC8qIEdldCB0aGUgb2xkIHJlZ2lzdGVyIHZhbHVlICovDQorICAgIHRtcHJlZzEgPSBBREN4LT5TTVBSMjsNCisgICAgDQorICAgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBjbGVhciAqLw0KKyAgICB0bXByZWcyID0gU01QUjJfU01QX1NFVCA8PCAoMyAqIEFEQ19DaGFubmVsKTsNCisgICAgDQorICAgIC8qIENsZWFyIHRoZSBvbGQgc2FtcGxlIHRpbWUgKi8NCisgICAgdG1wcmVnMSAmPSB+dG1wcmVnMjsNCisgICAgDQorICAgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBzZXQgKi8NCisgICAgdG1wcmVnMiA9ICh1aW50MzJfdClBRENfU2FtcGxlVGltZSA8PCAoMyAqIEFEQ19DaGFubmVsKTsNCisgICAgDQorICAgIC8qIFNldCB0aGUgbmV3IHNhbXBsZSB0aW1lICovDQorICAgIHRtcHJlZzEgfD0gdG1wcmVnMjsNCisgICAgDQorICAgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgICAgQURDeC0+U01QUjIgPSB0bXByZWcxOw0KKyAgfQ0KKyAgLyogRm9yIFJhbmsgMSB0byA2ICovDQorICBpZiAoUmFuayA8IDcpDQorICB7DQorICAgIC8qIEdldCB0aGUgb2xkIHJlZ2lzdGVyIHZhbHVlICovDQorICAgIHRtcHJlZzEgPSBBREN4LT5TUVIzOw0KKyAgICANCisgICAgLyogQ2FsY3VsYXRlIHRoZSBtYXNrIHRvIGNsZWFyICovDQorICAgIHRtcHJlZzIgPSBTUVIzX1NRX1NFVCA8PCAoNSAqIChSYW5rIC0gMSkpOw0KKyAgICANCisgICAgLyogQ2xlYXIgdGhlIG9sZCBTUXggYml0cyBmb3IgdGhlIHNlbGVjdGVkIHJhbmsgKi8NCisgICAgdG1wcmVnMSAmPSB+dG1wcmVnMjsNCisgICAgDQorICAgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBzZXQgKi8NCisgICAgdG1wcmVnMiA9ICh1aW50MzJfdClBRENfQ2hhbm5lbCA8PCAoNSAqIChSYW5rIC0gMSkpOw0KKyAgICANCisgICAgLyogU2V0IHRoZSBTUXggYml0cyBmb3IgdGhlIHNlbGVjdGVkIHJhbmsgKi8NCisgICAgdG1wcmVnMSB8PSB0bXByZWcyOw0KKyAgICANCisgICAgLyogU3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICBBREN4LT5TUVIzID0gdG1wcmVnMTsNCisgIH0NCisgIC8qIEZvciBSYW5rIDcgdG8gMTIgKi8NCisgIGVsc2UgaWYgKFJhbmsgPCAxMykNCisgIHsNCisgICAgLyogR2V0IHRoZSBvbGQgcmVnaXN0ZXIgdmFsdWUgKi8NCisgICAgdG1wcmVnMSA9IEFEQ3gtPlNRUjI7DQorICAgIA0KKyAgICAvKiBDYWxjdWxhdGUgdGhlIG1hc2sgdG8gY2xlYXIgKi8NCisgICAgdG1wcmVnMiA9IFNRUjJfU1FfU0VUIDw8ICg1ICogKFJhbmsgLSA3KSk7DQorICAgIA0KKyAgICAvKiBDbGVhciB0aGUgb2xkIFNReCBiaXRzIGZvciB0aGUgc2VsZWN0ZWQgcmFuayAqLw0KKyAgICB0bXByZWcxICY9IH50bXByZWcyOw0KKyAgICANCisgICAgLyogQ2FsY3VsYXRlIHRoZSBtYXNrIHRvIHNldCAqLw0KKyAgICB0bXByZWcyID0gKHVpbnQzMl90KUFEQ19DaGFubmVsIDw8ICg1ICogKFJhbmsgLSA3KSk7DQorICAgIA0KKyAgICAvKiBTZXQgdGhlIFNReCBiaXRzIGZvciB0aGUgc2VsZWN0ZWQgcmFuayAqLw0KKyAgICB0bXByZWcxIHw9IHRtcHJlZzI7DQorICAgIA0KKyAgICAvKiBTdG9yZSB0aGUgbmV3IHJlZ2lzdGVyIHZhbHVlICovDQorICAgIEFEQ3gtPlNRUjIgPSB0bXByZWcxOw0KKyAgfQ0KKyAgLyogRm9yIFJhbmsgMTMgdG8gMTYgKi8NCisgIGVsc2UNCisgIHsNCisgICAgLyogR2V0IHRoZSBvbGQgcmVnaXN0ZXIgdmFsdWUgKi8NCisgICAgdG1wcmVnMSA9IEFEQ3gtPlNRUjE7DQorICAgIA0KKyAgICAvKiBDYWxjdWxhdGUgdGhlIG1hc2sgdG8gY2xlYXIgKi8NCisgICAgdG1wcmVnMiA9IFNRUjFfU1FfU0VUIDw8ICg1ICogKFJhbmsgLSAxMykpOw0KKyAgICANCisgICAgLyogQ2xlYXIgdGhlIG9sZCBTUXggYml0cyBmb3IgdGhlIHNlbGVjdGVkIHJhbmsgKi8NCisgICAgdG1wcmVnMSAmPSB+dG1wcmVnMjsNCisgICAgDQorICAgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBzZXQgKi8NCisgICAgdG1wcmVnMiA9ICh1aW50MzJfdClBRENfQ2hhbm5lbCA8PCAoNSAqIChSYW5rIC0gMTMpKTsNCisgICAgDQorICAgIC8qIFNldCB0aGUgU1F4IGJpdHMgZm9yIHRoZSBzZWxlY3RlZCByYW5rICovDQorICAgIHRtcHJlZzEgfD0gdG1wcmVnMjsNCisgICAgDQorICAgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgICAgQURDeC0+U1FSMSA9IHRtcHJlZzE7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgdGhlIHNlbGVjdGVkIEFEQyBzb2Z0d2FyZSBzdGFydCBjb252ZXJzaW9uIG9mIHRoZSByZWd1bGFyIGNoYW5uZWxzLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfU29mdHdhcmVTdGFydENvbnYoQURDX1R5cGVEZWYqIEFEQ3gpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICANCisgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGNvbnZlcnNpb24gZm9yIHJlZ3VsYXIgZ3JvdXAgKi8NCisgIEFEQ3gtPkNSMiB8PSAodWludDMyX3QpQURDX0NSMl9TV1NUQVJUOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBHZXRzIHRoZSBzZWxlY3RlZCBBREMgU29mdHdhcmUgc3RhcnQgcmVndWxhciBjb252ZXJzaW9uIFN0YXR1cy4NCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEFEQyBzb2Z0d2FyZSBzdGFydCBjb252ZXJzaW9uIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIEFEQ19HZXRTb2Z0d2FyZVN0YXJ0Q29udlN0YXR1cyhBRENfVHlwZURlZiogQURDeCkNCit7DQorICBGbGFnU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICANCisgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgU1dTVEFSVCBiaXQgKi8NCisgIGlmICgoQURDeC0+Q1IyICYgQURDX0NSMl9KU1dTVEFSVCkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICAvKiBTV1NUQVJUIGJpdCBpcyBzZXQgKi8NCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBTV1NUQVJUIGJpdCBpcyByZXNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIA0KKyAgLyogUmV0dXJuIHRoZSBTV1NUQVJUIGJpdCBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBFT0Mgb24gZWFjaCByZWd1bGFyIGNoYW5uZWwgY29udmVyc2lvbg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIEFEQyBFT0MgZmxhZyByaXNpbmcNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQURDX0VPQ09uRWFjaFJlZ3VsYXJDaGFubmVsQ21kKEFEQ19UeXBlRGVmKiBBREN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBBREMgRU9DIHJpc2luZyBvbiBlYWNoIHJlZ3VsYXIgY2hhbm5lbCBjb252ZXJzaW9uICovDQorICAgIEFEQ3gtPkNSMiB8PSAodWludDMyX3QpQURDX0NSMl9FT0NTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBBREMgRU9DIHJpc2luZyBvbiBlYWNoIHJlZ3VsYXIgY2hhbm5lbCBjb252ZXJzaW9uICovDQorICAgIEFEQ3gtPkNSMiAmPSAodWludDMyX3QpKH5BRENfQ1IyX0VPQ1MpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBBREMgY29udGludW91cyBjb252ZXJzaW9uIG1vZGUgDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgQURDIGNvbnRpbnVvdXMgY29udmVyc2lvbiBtb2RlDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19Db250aW51b3VzTW9kZUNtZChBRENfVHlwZURlZiogQURDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGNvbnRpbnVvdXMgY29udmVyc2lvbiBtb2RlICovDQorICAgIEFEQ3gtPkNSMiB8PSAodWludDMyX3QpQURDX0NSMl9DT05UOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBBREMgY29udGludW91cyBjb252ZXJzaW9uIG1vZGUgKi8NCisgICAgQURDeC0+Q1IyICY9ICh1aW50MzJfdCkofkFEQ19DUjJfQ09OVCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIGRpc2NvbnRpbnVvdXMgbW9kZSBmb3IgdGhlIHNlbGVjdGVkIEFEQyByZWd1bGFyIGdyb3VwIA0KKyAgKiAgICAgICAgIGNoYW5uZWwuDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTnVtYmVyOiBzcGVjaWZpZXMgdGhlIGRpc2NvbnRpbnVvdXMgbW9kZSByZWd1bGFyIGNoYW5uZWwgY291bnQgdmFsdWUuDQorICAqICAgICAgICAgIFRoaXMgbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA4Lg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfRGlzY01vZGVDaGFubmVsQ291bnRDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgTnVtYmVyKQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZzEgPSAwOw0KKyAgdWludDMyX3QgdG1wcmVnMiA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SRUdVTEFSX0RJU0NfTlVNQkVSKE51bWJlcikpOw0KKyAgDQorICAvKiBHZXQgdGhlIG9sZCByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wcmVnMSA9IEFEQ3gtPkNSMTsNCisgIA0KKyAgLyogQ2xlYXIgdGhlIG9sZCBkaXNjb250aW51b3VzIG1vZGUgY2hhbm5lbCBjb3VudCAqLw0KKyAgdG1wcmVnMSAmPSBDUjFfRElTQ05VTV9SRVNFVDsNCisgIA0KKyAgLyogU2V0IHRoZSBkaXNjb250aW51b3VzIG1vZGUgY2hhbm5lbCBjb3VudCAqLw0KKyAgdG1wcmVnMiA9IE51bWJlciAtIDE7DQorICB0bXByZWcxIHw9IHRtcHJlZzIgPDwgMTM7DQorICANCisgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIEFEQ3gtPkNSMSA9IHRtcHJlZzE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGRpc2NvbnRpbnVvdXMgbW9kZSBvbiByZWd1bGFyIGdyb3VwIGNoYW5uZWwgDQorICAqICAgICAgICAgZm9yIHRoZSBzcGVjaWZpZWQgQURDDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgQURDIGRpc2NvbnRpbnVvdXMgbW9kZSBvbiANCisgICogICAgICAgICByZWd1bGFyIGdyb3VwIGNoYW5uZWwuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19EaXNjTW9kZUNtZChBRENfVHlwZURlZiogQURDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIHJlZ3VsYXIgZGlzY29udGludW91cyBtb2RlICovDQorICAgIEFEQ3gtPkNSMSB8PSAodWludDMyX3QpQURDX0NSMV9ESVNDRU47DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEFEQyByZWd1bGFyIGRpc2NvbnRpbnVvdXMgbW9kZSAqLw0KKyAgICBBREN4LT5DUjEgJj0gKHVpbnQzMl90KSh+QURDX0NSMV9ESVNDRU4pOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBsYXN0IEFEQ3ggY29udmVyc2lvbiByZXN1bHQgZGF0YSBmb3IgcmVndWxhciBjaGFubmVsLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIFRoZSBEYXRhIGNvbnZlcnNpb24gdmFsdWUuDQorICAqLw0KK3VpbnQxNl90IEFEQ19HZXRDb252ZXJzaW9uVmFsdWUoQURDX1R5cGVEZWYqIEFEQ3gpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICANCisgIC8qIFJldHVybiB0aGUgc2VsZWN0ZWQgQURDIGNvbnZlcnNpb24gdmFsdWUgKi8NCisgIHJldHVybiAodWludDE2X3QpIEFEQ3gtPkRSOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBsYXN0IEFEQzEsIEFEQzIgYW5kIEFEQzMgcmVndWxhciBjb252ZXJzaW9ucyByZXN1bHRzIA0KKyAgKiAgICAgICAgIGRhdGEgaW4gdGhlIHNlbGVjdGVkIG11bHRpIG1vZGUuDQorICAqIEBwYXJhbSAgTm9uZSAgDQorICAqIEByZXR2YWwgVGhlIERhdGEgY29udmVyc2lvbiB2YWx1ZS4NCisgICogQG5vdGUgICBJbiBkdWFsIG1vZGUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGFzIGZvbGxvd2luZw0KKyAgKiAgICAgICAgICAgRGF0YVsxNTowXSA6IHRoZXNlIGJpdHMgY29udGFpbiB0aGUgcmVndWxhciBkYXRhIG9mIEFEQzEuDQorICAqICAgICAgICAgICBEYXRhWzMxOjE2XTogdGhlc2UgYml0cyBjb250YWluIHRoZSByZWd1bGFyIGRhdGEgb2YgQURDMi4NCisgICogQG5vdGUgICBJbiB0cmlwbGUgbW9kZSwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgYXMgZm9sbG93aW5nDQorICAqICAgICAgICAgICBEYXRhWzE1OjBdIDogdGhlc2UgYml0cyBjb250YWluIGFsdGVybmF0aXZlbHkgdGhlIHJlZ3VsYXIgZGF0YSBvZiBBREMxLCBBREMzIGFuZCBBREMyLg0KKyAgKiAgICAgICAgICAgRGF0YVszMToxNl06IHRoZXNlIGJpdHMgY29udGFpbiBhbHRlcm5hdGl2ZWx5IHRoZSByZWd1bGFyIGRhdGEgb2YgQURDMiwgQURDMSBhbmQgQURDMy4gICAgICAgICAgIA0KKyAgKi8NCit1aW50MzJfdCBBRENfR2V0TXVsdGlNb2RlQ29udmVyc2lvblZhbHVlKHZvaWQpDQorew0KKyAgLyogUmV0dXJuIHRoZSBtdWx0aSBtb2RlIGNvbnZlcnNpb24gdmFsdWUgKi8NCisgIHJldHVybiAoKihfX0lPIHVpbnQzMl90ICopIENEUl9BRERSRVNTKTsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQURDX0dyb3VwNSBSZWd1bGFyIENoYW5uZWxzIERNQSBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBSZWd1bGFyIENoYW5uZWxzIERNQSBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgIFJlZ3VsYXIgQ2hhbm5lbHMgRE1BIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIERNQSBmb3IgQURDIHJlZ3VsYXIgDQorICBjaGFubmVscy4NCisgIFNpbmNlIGNvbnZlcnRlZCByZWd1bGFyIGNoYW5uZWwgdmFsdWVzIGFyZSBzdG9yZWQgaW50byBhIHVuaXF1ZSBkYXRhIHJlZ2lzdGVyLCANCisgIGl0IGlzIHVzZWZ1bCB0byB1c2UgRE1BIGZvciBjb252ZXJzaW9uIG9mIG1vcmUgdGhhbiBvbmUgcmVndWxhciBjaGFubmVsLiBUaGlzIA0KKyAgYXZvaWRzIHRoZSBsb3NzIG9mIHRoZSBkYXRhIGFscmVhZHkgc3RvcmVkIGluIHRoZSBBREMgRGF0YSByZWdpc3Rlci4gDQorICANCisgIFdoZW4gdGhlIERNQSBtb2RlIGlzIGVuYWJsZWQgKHVzaW5nIHRoZSBBRENfRE1BQ21kKCkgZnVuY3Rpb24pLCBhZnRlciBlYWNoDQorICBjb252ZXJzaW9uIG9mIGEgcmVndWxhciBjaGFubmVsLCBhIERNQSByZXF1ZXN0IGlzIGdlbmVyYXRlZC4NCisgIA0KKyAgRGVwZW5kaW5nIG9uIHRoZSAiRE1BIGRpc2FibGUgc2VsZWN0aW9uIGZvciBJbmRlcGVuZGVudCBBREMgbW9kZSIgDQorICBjb25maWd1cmF0aW9uICh1c2luZyB0aGUgQURDX0RNQVJlcXVlc3RBZnRlckxhc3RUcmFuc2ZlckNtZCgpIGZ1bmN0aW9uKSwgDQorICBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IERNQSB0cmFuc2ZlciwgdHdvIHBvc3NpYmlsaXRpZXMgYXJlIGFsbG93ZWQ6DQorICAtIE5vIG5ldyBETUEgcmVxdWVzdCBpcyBpc3N1ZWQgdG8gdGhlIERNQSBjb250cm9sbGVyIChmZWF0dXJlIERJU0FCTEVEKSANCisgIC0gUmVxdWVzdHMgY2FuIGNvbnRpbnVlIHRvIGJlIGdlbmVyYXRlZCAoZmVhdHVyZSBFTkFCTEVEKS4NCisgIA0KKyAgRGVwZW5kaW5nIG9uIHRoZSAiRE1BIGRpc2FibGUgc2VsZWN0aW9uIGZvciBtdWx0aSBBREMgbW9kZSIgY29uZmlndXJhdGlvbiANCisgICh1c2luZyB0aGUgdm9pZCBBRENfTXVsdGlNb2RlRE1BUmVxdWVzdEFmdGVyTGFzdFRyYW5zZmVyQ21kKCkgZnVuY3Rpb24pLCANCisgIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgRE1BIHRyYW5zZmVyLCB0d28gcG9zc2liaWxpdGllcyBhcmUgYWxsb3dlZDoNCisgIC0gTm8gbmV3IERNQSByZXF1ZXN0IGlzIGlzc3VlZCB0byB0aGUgRE1BIGNvbnRyb2xsZXIgKGZlYXR1cmUgRElTQUJMRUQpIA0KKyAgLSBSZXF1ZXN0cyBjYW4gY29udGludWUgdG8gYmUgZ2VuZXJhdGVkIChmZWF0dXJlIEVOQUJMRUQpLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisgIA0KKyAvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgQURDIERNQSByZXF1ZXN0Lg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIEFEQyBETUEgdHJhbnNmZXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19ETUFDbWQoQURDX1R5cGVEZWYqIEFEQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBBREMgRE1BIHJlcXVlc3QgKi8NCisgICAgQURDeC0+Q1IyIHw9ICh1aW50MzJfdClBRENfQ1IyX0RNQTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQURDIERNQSByZXF1ZXN0ICovDQorICAgIEFEQ3gtPkNSMiAmPSAodWludDMyX3QpKH5BRENfQ1IyX0RNQSk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEFEQyBETUEgcmVxdWVzdCBhZnRlciBsYXN0IHRyYW5zZmVyIChTaW5nbGUtQURDIG1vZGUpICANCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBBREMgRE1BIHJlcXVlc3QgYWZ0ZXIgbGFzdCB0cmFuc2Zlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQURDX0RNQVJlcXVlc3RBZnRlckxhc3RUcmFuc2ZlckNtZChBRENfVHlwZURlZiogQURDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEFEQyBETUEgcmVxdWVzdCBhZnRlciBsYXN0IHRyYW5zZmVyICovDQorICAgIEFEQ3gtPkNSMiB8PSAodWludDMyX3QpQURDX0NSMl9ERFM7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEFEQyBETUEgcmVxdWVzdCBhZnRlciBsYXN0IHRyYW5zZmVyICovDQorICAgIEFEQ3gtPkNSMiAmPSAodWludDMyX3QpKH5BRENfQ1IyX0REUyk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEFEQyBETUEgcmVxdWVzdCBhZnRlciBsYXN0IHRyYW5zZmVyIGluIG11bHRpIEFEQyBtb2RlICAgICAgIA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIEFEQyBETUEgcmVxdWVzdCBhZnRlciBsYXN0IHRyYW5zZmVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAbm90ZSAgIGlmIEVuYWJsZWQsIERNQSByZXF1ZXN0cyBhcmUgaXNzdWVkIGFzIGxvbmcgYXMgZGF0YSBhcmUgY29udmVydGVkIGFuZCANCisgICogICAgICAgICBETUEgbW9kZSBmb3IgbXVsdGkgQURDIG1vZGUgKHNlbGVjdGVkIHVzaW5nIEFEQ19Db21tb25Jbml0KCkgZnVuY3Rpb24gDQorICAqICAgICAgICAgYnkgQURDX0NvbW1vbkluaXRTdHJ1Y3QuQURDX0RNQUFjY2Vzc01vZGUgc3RydWN0dXJlIG1lbWJlcikgaXMgDQorICAqICAgICAgICAgIEFEQ19ETUFBY2Nlc3NNb2RlXzEsIEFEQ19ETUFBY2Nlc3NNb2RlXzIgb3IgQURDX0RNQUFjY2Vzc01vZGVfMy4gICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfTXVsdGlNb2RlRE1BUmVxdWVzdEFmdGVyTGFzdFRyYW5zZmVyQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEFEQyBETUEgcmVxdWVzdCBhZnRlciBsYXN0IHRyYW5zZmVyICovDQorICAgIEFEQy0+Q0NSIHw9ICh1aW50MzJfdClBRENfQ0NSX0REUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQURDIERNQSByZXF1ZXN0IGFmdGVyIGxhc3QgdHJhbnNmZXIgKi8NCisgICAgQURDLT5DQ1IgJj0gKHVpbnQzMl90KSh+QURDX0NDUl9ERFMpOw0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBBRENfR3JvdXA2IEluamVjdGVkIGNoYW5uZWxzIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEluamVjdGVkIGNoYW5uZWxzIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICBJbmplY3RlZCBjaGFubmVscyBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIEFEQyBJbmplY3RlZCBjaGFubmVscywNCisgIGl0IGlzIGNvbXBvc2VkIG9mIDIgc3ViIHNlY3Rpb25zIDogDQorICAgIA0KKyAgMS4gQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgZm9yIEluamVjdGVkIGNoYW5uZWxzOiBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgDQorICAgICBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBBREMgaW5qZWN0ZWQgY2hhbm5lbHMgOiAgICANCisgICAgLSBDb25maWd1cmUgdGhlIHJhbmsgaW4gdGhlIGluamVjdGVkIGdyb3VwIHNlcXVlbmNlciBmb3IgZWFjaCBjaGFubmVsDQorICAgIC0gQ29uZmlndXJlIHRoZSBzYW1wbGluZyB0aW1lIGZvciBlYWNoIGNoYW5uZWwgICAgDQorICAgIC0gQWN0aXZhdGUgdGhlIEF1dG8gaW5qZWN0ZWQgTW9kZSAgDQorICAgIC0gQWN0aXZhdGUgdGhlIERpc2NvbnRpbnVvdXMgTW9kZSANCisgICAgLSBzY2FuIG1vZGUgYWN0aXZhdGlvbiAgDQorICAgIC0gRXh0ZXJuYWwvc29mdHdhcmUgdHJpZ2dlciBzb3VyY2UgICANCisgICAgLSBFeHRlcm5hbCB0cmlnZ2VyIGVkZ2UgDQorICAgIC0gaW5qZWN0ZWQgY2hhbm5lbHMgc2VxdWVuY2VyLg0KKyAgICANCisgICAyLiBHZXQgdGhlIFNwZWNpZmllZCBJbmplY3RlZCBjaGFubmVsIGNvbnZlcnNpb24gZGF0YTogVGhpcyBzdWJzZWN0aW9uIA0KKyAgICAgIHByb3ZpZGVzIGFuIGltcG9ydGFudCBmdW5jdGlvbiBpbiB0aGUgQURDIHBlcmlwaGVyYWwgc2luY2UgaXQgcmV0dXJucyB0aGUgDQorICAgICAgY29udmVydGVkIGRhdGEgb2YgdGhlIHNwZWNpZmljIGluamVjdGVkIGNoYW5uZWwuDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLyANCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIGZvciB0aGUgc2VsZWN0ZWQgQURDIGluamVjdGVkIGNoYW5uZWwgaXRzIGNvcnJlc3BvbmRpbmcNCisgICogICAgICAgICByYW5rIGluIHRoZSBzZXF1ZW5jZXIgYW5kIGl0cyBzYW1wbGUgdGltZS4NCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBBRENfQ2hhbm5lbDogdGhlIEFEQyBjaGFubmVsIHRvIGNvbmZpZ3VyZS4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8wOiBBREMgQ2hhbm5lbDAgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzE6IEFEQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMjogQURDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8zOiBBREMgQ2hhbm5lbDMgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzQ6IEFEQyBDaGFubmVsNCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfNTogQURDIENoYW5uZWw1IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF82OiBBREMgQ2hhbm5lbDYgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzc6IEFEQyBDaGFubmVsNyBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfODogQURDIENoYW5uZWw4IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF85OiBBREMgQ2hhbm5lbDkgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzEwOiBBREMgQ2hhbm5lbDEwIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xMTogQURDIENoYW5uZWwxMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTI6IEFEQyBDaGFubmVsMTIgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzEzOiBBREMgQ2hhbm5lbDEzIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xNDogQURDIENoYW5uZWwxNCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTU6IEFEQyBDaGFubmVsMTUgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19DaGFubmVsXzE2OiBBREMgQ2hhbm5lbDE2IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBBRENfQ2hhbm5lbF8xNzogQURDIENoYW5uZWwxNyBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0NoYW5uZWxfMTg6IEFEQyBDaGFubmVsMTggc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcGFyYW0gIFJhbms6IFRoZSByYW5rIGluIHRoZSBpbmplY3RlZCBncm91cCBzZXF1ZW5jZXIuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGJldHdlZW4gMSB0byA0Lg0KKyAgKiBAcGFyYW0gIEFEQ19TYW1wbGVUaW1lOiBUaGUgc2FtcGxlIHRpbWUgdmFsdWUgdG8gYmUgc2V0IGZvciB0aGUgc2VsZWN0ZWQgY2hhbm5lbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBBRENfU2FtcGxlVGltZV8zQ3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byAzIGN5Y2xlcw0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfMTVDeWNsZXM6IFNhbXBsZSB0aW1lIGVxdWFsIHRvIDE1IGN5Y2xlcw0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfMjhDeWNsZXM6IFNhbXBsZSB0aW1lIGVxdWFsIHRvIDI4IGN5Y2xlcw0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX1NhbXBsZVRpbWVfNTZDeWNsZXM6IFNhbXBsZSB0aW1lIGVxdWFsIHRvIDU2IGN5Y2xlcwkNCisgICogICAgICAgICAgICBAYXJnIEFEQ19TYW1wbGVUaW1lXzg0Q3ljbGVzOiBTYW1wbGUgdGltZSBlcXVhbCB0byA4NCBjeWNsZXMJDQorICAqICAgICAgICAgICAgQGFyZyBBRENfU2FtcGxlVGltZV8xMTJDeWNsZXM6IFNhbXBsZSB0aW1lIGVxdWFsIHRvIDExMiBjeWNsZXMJDQorICAqICAgICAgICAgICAgQGFyZyBBRENfU2FtcGxlVGltZV8xNDRDeWNsZXM6IFNhbXBsZSB0aW1lIGVxdWFsIHRvIDE0NCBjeWNsZXMJDQorICAqICAgICAgICAgICAgQGFyZyBBRENfU2FtcGxlVGltZV80ODBDeWNsZXM6IFNhbXBsZSB0aW1lIGVxdWFsIHRvIDQ4MCBjeWNsZXMJDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19JbmplY3RlZENoYW5uZWxDb25maWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgQURDX0NoYW5uZWwsIHVpbnQ4X3QgUmFuaywgdWludDhfdCBBRENfU2FtcGxlVGltZSkNCit7DQorICB1aW50MzJfdCB0bXByZWcxID0gMCwgdG1wcmVnMiA9IDAsIHRtcHJlZzMgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0NIQU5ORUwoQURDX0NoYW5uZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfSU5KRUNURURfUkFOSyhSYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX1NBTVBMRV9USU1FKEFEQ19TYW1wbGVUaW1lKSk7DQorICAvKiBpZiBBRENfQ2hhbm5lbF8xMCAuLi4gQURDX0NoYW5uZWxfMTggaXMgc2VsZWN0ZWQgKi8NCisgIGlmIChBRENfQ2hhbm5lbCA+IEFEQ19DaGFubmVsXzkpDQorICB7DQorICAgIC8qIEdldCB0aGUgb2xkIHJlZ2lzdGVyIHZhbHVlICovDQorICAgIHRtcHJlZzEgPSBBREN4LT5TTVBSMTsNCisgICAgLyogQ2FsY3VsYXRlIHRoZSBtYXNrIHRvIGNsZWFyICovDQorICAgIHRtcHJlZzIgPSBTTVBSMV9TTVBfU0VUIDw8ICgzKihBRENfQ2hhbm5lbCAtIDEwKSk7DQorICAgIC8qIENsZWFyIHRoZSBvbGQgc2FtcGxlIHRpbWUgKi8NCisgICAgdG1wcmVnMSAmPSB+dG1wcmVnMjsNCisgICAgLyogQ2FsY3VsYXRlIHRoZSBtYXNrIHRvIHNldCAqLw0KKyAgICB0bXByZWcyID0gKHVpbnQzMl90KUFEQ19TYW1wbGVUaW1lIDw8ICgzKihBRENfQ2hhbm5lbCAtIDEwKSk7DQorICAgIC8qIFNldCB0aGUgbmV3IHNhbXBsZSB0aW1lICovDQorICAgIHRtcHJlZzEgfD0gdG1wcmVnMjsNCisgICAgLyogU3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICBBREN4LT5TTVBSMSA9IHRtcHJlZzE7DQorICB9DQorICBlbHNlIC8qIEFEQ19DaGFubmVsIGluY2x1ZGUgaW4gQURDX0NoYW5uZWxfWzAuLjldICovDQorICB7DQorICAgIC8qIEdldCB0aGUgb2xkIHJlZ2lzdGVyIHZhbHVlICovDQorICAgIHRtcHJlZzEgPSBBREN4LT5TTVBSMjsNCisgICAgLyogQ2FsY3VsYXRlIHRoZSBtYXNrIHRvIGNsZWFyICovDQorICAgIHRtcHJlZzIgPSBTTVBSMl9TTVBfU0VUIDw8ICgzICogQURDX0NoYW5uZWwpOw0KKyAgICAvKiBDbGVhciB0aGUgb2xkIHNhbXBsZSB0aW1lICovDQorICAgIHRtcHJlZzEgJj0gfnRtcHJlZzI7DQorICAgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBzZXQgKi8NCisgICAgdG1wcmVnMiA9ICh1aW50MzJfdClBRENfU2FtcGxlVGltZSA8PCAoMyAqIEFEQ19DaGFubmVsKTsNCisgICAgLyogU2V0IHRoZSBuZXcgc2FtcGxlIHRpbWUgKi8NCisgICAgdG1wcmVnMSB8PSB0bXByZWcyOw0KKyAgICAvKiBTdG9yZSB0aGUgbmV3IHJlZ2lzdGVyIHZhbHVlICovDQorICAgIEFEQ3gtPlNNUFIyID0gdG1wcmVnMTsNCisgIH0NCisgIC8qIFJhbmsgY29uZmlndXJhdGlvbiAqLw0KKyAgLyogR2V0IHRoZSBvbGQgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcHJlZzEgPSBBREN4LT5KU1FSOw0KKyAgLyogR2V0IEpMIHZhbHVlOiBOdW1iZXIgPSBKTCsxICovDQorICB0bXByZWczID0gICh0bXByZWcxICYgSlNRUl9KTF9TRVQpPj4gMjA7DQorICAvKiBDYWxjdWxhdGUgdGhlIG1hc2sgdG8gY2xlYXI6ICgoUmFuay0xKSsoNC1KTC0xKSkgKi8NCisgIHRtcHJlZzIgPSBKU1FSX0pTUV9TRVQgPDwgKDUgKiAodWludDhfdCkoKFJhbmsgKyAzKSAtICh0bXByZWczICsgMSkpKTsNCisgIC8qIENsZWFyIHRoZSBvbGQgSlNReCBiaXRzIGZvciB0aGUgc2VsZWN0ZWQgcmFuayAqLw0KKyAgdG1wcmVnMSAmPSB+dG1wcmVnMjsNCisgIC8qIENhbGN1bGF0ZSB0aGUgbWFzayB0byBzZXQ6ICgoUmFuay0xKSsoNC1KTC0xKSkgKi8NCisgIHRtcHJlZzIgPSAodWludDMyX3QpQURDX0NoYW5uZWwgPDwgKDUgKiAodWludDhfdCkoKFJhbmsgKyAzKSAtICh0bXByZWczICsgMSkpKTsNCisgIC8qIFNldCB0aGUgSlNReCBiaXRzIGZvciB0aGUgc2VsZWN0ZWQgcmFuayAqLw0KKyAgdG1wcmVnMSB8PSB0bXByZWcyOw0KKyAgLyogU3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgQURDeC0+SlNRUiA9IHRtcHJlZzE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIHNlcXVlbmNlciBsZW5ndGggZm9yIGluamVjdGVkIGNoYW5uZWxzDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTGVuZ3RoOiBUaGUgc2VxdWVuY2VyIGxlbmd0aC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAxIHRvIDQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19JbmplY3RlZFNlcXVlbmNlckxlbmd0aENvbmZpZyhBRENfVHlwZURlZiogQURDeCwgdWludDhfdCBMZW5ndGgpDQorew0KKyAgdWludDMyX3QgdG1wcmVnMSA9IDA7DQorICB1aW50MzJfdCB0bXByZWcyID0gMDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19JTkpFQ1RFRF9MRU5HVEgoTGVuZ3RoKSk7DQorICANCisgIC8qIEdldCB0aGUgb2xkIHJlZ2lzdGVyIHZhbHVlICovDQorICB0bXByZWcxID0gQURDeC0+SlNRUjsNCisgIA0KKyAgLyogQ2xlYXIgdGhlIG9sZCBpbmplY3RlZCBzZXF1ZW5jZSBsZW5ndGggSkwgYml0cyAqLw0KKyAgdG1wcmVnMSAmPSBKU1FSX0pMX1JFU0VUOw0KKyAgDQorICAvKiBTZXQgdGhlIGluamVjdGVkIHNlcXVlbmNlIGxlbmd0aCBKTCBiaXRzICovDQorICB0bXByZWcyID0gTGVuZ3RoIC0gMTsgDQorICB0bXByZWcxIHw9IHRtcHJlZzIgPDwgMjA7DQorICANCisgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIEFEQ3gtPkpTUVIgPSB0bXByZWcxOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXQgdGhlIGluamVjdGVkIGNoYW5uZWxzIGNvbnZlcnNpb24gdmFsdWUgb2Zmc2V0DQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQURDX0luamVjdGVkQ2hhbm5lbDogdGhlIEFEQyBpbmplY3RlZCBjaGFubmVsIHRvIHNldCBpdHMgb2Zmc2V0LiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JbmplY3RlZENoYW5uZWxfMTogSW5qZWN0ZWQgQ2hhbm5lbDEgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JbmplY3RlZENoYW5uZWxfMjogSW5qZWN0ZWQgQ2hhbm5lbDIgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JbmplY3RlZENoYW5uZWxfMzogSW5qZWN0ZWQgQ2hhbm5lbDMgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JbmplY3RlZENoYW5uZWxfNDogSW5qZWN0ZWQgQ2hhbm5lbDQgc2VsZWN0ZWQNCisgICogQHBhcmFtICBPZmZzZXQ6IHRoZSBvZmZzZXQgdmFsdWUgZm9yIHRoZSBzZWxlY3RlZCBBREMgaW5qZWN0ZWQgY2hhbm5lbA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgMTJiaXQgdmFsdWUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19TZXRJbmplY3RlZE9mZnNldChBRENfVHlwZURlZiogQURDeCwgdWludDhfdCBBRENfSW5qZWN0ZWRDaGFubmVsLCB1aW50MTZfdCBPZmZzZXQpDQorew0KKyAgICBfX0lPIHVpbnQzMl90IHRtcCA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfSU5KRUNURURfQ0hBTk5FTChBRENfSW5qZWN0ZWRDaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX09GRlNFVChPZmZzZXQpKTsNCisgIA0KKyAgdG1wID0gKHVpbnQzMl90KUFEQ3g7DQorICB0bXAgKz0gQURDX0luamVjdGVkQ2hhbm5lbDsNCisgIA0KKyAgLyogU2V0IHRoZSBzZWxlY3RlZCBpbmplY3RlZCBjaGFubmVsIGRhdGEgb2Zmc2V0ICovDQorICooX19JTyB1aW50MzJfdCAqKSB0bXAgPSAodWludDMyX3QpT2Zmc2V0Ow0KK30NCisNCisgLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgQURDeCBleHRlcm5hbCB0cmlnZ2VyIGZvciBpbmplY3RlZCBjaGFubmVscyBjb252ZXJzaW9uLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnY6IHNwZWNpZmllcyB0aGUgQURDIHRyaWdnZXIgdG8gc3RhcnQgaW5qZWN0ZWQgY29udmVyc2lvbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UMV9DQzQ6IFRpbWVyMSBjYXB0dXJlIGNvbXBhcmU0IHNlbGVjdGVkIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UMV9UUkdPOiBUaW1lcjEgVFJHTyBldmVudCBzZWxlY3RlZCANCisgICogICAgICAgICAgICBAYXJnIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDJfQ0MxOiBUaW1lcjIgY2FwdHVyZSBjb21wYXJlMSBzZWxlY3RlZCANCisgICogICAgICAgICAgICBAYXJnIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDJfVFJHTzogVGltZXIyIFRSR08gZXZlbnQgc2VsZWN0ZWQgDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1QzX0NDMjogVGltZXIzIGNhcHR1cmUgY29tcGFyZTIgc2VsZWN0ZWQgDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1QzX0NDNDogVGltZXIzIGNhcHR1cmUgY29tcGFyZTQgc2VsZWN0ZWQgDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q0X0NDMTogVGltZXI0IGNhcHR1cmUgY29tcGFyZTEgc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNF9DQzI6IFRpbWVyNCBjYXB0dXJlIGNvbXBhcmUyIHNlbGVjdGVkIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNF9DQzM6IFRpbWVyNCBjYXB0dXJlIGNvbXBhcmUzIHNlbGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q0X1RSR086IFRpbWVyNCBUUkdPIGV2ZW50IHNlbGVjdGVkIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UNV9DQzQ6IFRpbWVyNSBjYXB0dXJlIGNvbXBhcmU0IHNlbGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q1X1RSR086IFRpbWVyNSBUUkdPIGV2ZW50IHNlbGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252X1Q4X0NDMjogVGltZXI4IGNhcHR1cmUgY29tcGFyZTIgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZfVDhfQ0MzOiBUaW1lcjggY2FwdHVyZSBjb21wYXJlMyBzZWxlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9UOF9DQzQ6IFRpbWVyOCBjYXB0dXJlIGNvbXBhcmU0IHNlbGVjdGVkIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udl9FeHRfSVQxNTogRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgMTUgZXZlbnQgc2VsZWN0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfRXh0ZXJuYWxUcmlnSW5qZWN0ZWRDb252Q29uZmlnKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50MzJfdCBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfRVhUX0lOSkVDX1RSSUcoQURDX0V4dGVybmFsVHJpZ0luamVjQ29udikpOw0KKyAgDQorICAvKiBHZXQgdGhlIG9sZCByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wcmVnID0gQURDeC0+Q1IyOw0KKyAgDQorICAvKiBDbGVhciB0aGUgb2xkIGV4dGVybmFsIGV2ZW50IHNlbGVjdGlvbiBmb3IgaW5qZWN0ZWQgZ3JvdXAgKi8NCisgIHRtcHJlZyAmPSBDUjJfSkVYVFNFTF9SRVNFVDsNCisgIA0KKyAgLyogU2V0IHRoZSBleHRlcm5hbCBldmVudCBzZWxlY3Rpb24gZm9yIGluamVjdGVkIGdyb3VwICovDQorICB0bXByZWcgfD0gQURDX0V4dGVybmFsVHJpZ0luamVjQ29udjsNCisgIA0KKyAgLyogU3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgQURDeC0+Q1IyID0gdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBBREN4IGV4dGVybmFsIHRyaWdnZXIgZWRnZSBmb3IgaW5qZWN0ZWQgY2hhbm5lbHMgY29udmVyc2lvbi4NCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZTogc3BlY2lmaWVzIHRoZSBBREMgZXh0ZXJuYWwgdHJpZ2dlciBlZGdlDQorICAqICAgICAgICAgdG8gc3RhcnQgaW5qZWN0ZWQgY29udmVyc2lvbi4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZV9Ob25lOiBleHRlcm5hbCB0cmlnZ2VyIGRpc2FibGVkIGZvciANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluamVjdGVkIGNvbnZlcnNpb24NCisgICogICAgICAgICAgICBAYXJnIEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlX1Jpc2luZzogZGV0ZWN0aW9uIG9uIHJpc2luZyBlZGdlDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZV9GYWxsaW5nOiBkZXRlY3Rpb24gb24gZmFsbGluZyBlZGdlDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZV9SaXNpbmdGYWxsaW5nOiBkZXRlY3Rpb24gb24gYm90aCByaXNpbmcgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZhbGxpbmcgZWRnZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfRXh0ZXJuYWxUcmlnSW5qZWN0ZWRDb252RWRnZUNvbmZpZyhBRENfVHlwZURlZiogQURDeCwgdWludDMyX3QgQURDX0V4dGVybmFsVHJpZ0luamVjQ29udkVkZ2UpDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19FWFRfSU5KRUNfVFJJR19FREdFKEFEQ19FeHRlcm5hbFRyaWdJbmplY0NvbnZFZGdlKSk7DQorICAvKiBHZXQgdGhlIG9sZCByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wcmVnID0gQURDeC0+Q1IyOw0KKyAgLyogQ2xlYXIgdGhlIG9sZCBleHRlcm5hbCB0cmlnZ2VyIGVkZ2UgZm9yIGluamVjdGVkIGdyb3VwICovDQorICB0bXByZWcgJj0gQ1IyX0pFWFRFTl9SRVNFVDsNCisgIC8qIFNldCB0aGUgbmV3IGV4dGVybmFsIHRyaWdnZXIgZWRnZSBmb3IgaW5qZWN0ZWQgZ3JvdXAgKi8NCisgIHRtcHJlZyB8PSBBRENfRXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZTsNCisgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIEFEQ3gtPkNSMiA9IHRtcHJlZzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyB0aGUgc2VsZWN0ZWQgQURDIHNvZnR3YXJlIHN0YXJ0IGNvbnZlcnNpb24gb2YgdGhlIGluamVjdGVkIGNoYW5uZWxzLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfU29mdHdhcmVTdGFydEluamVjdGVkQ29udihBRENfVHlwZURlZiogQURDeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGNvbnZlcnNpb24gZm9yIGluamVjdGVkIGdyb3VwICovDQorICBBREN4LT5DUjIgfD0gKHVpbnQzMl90KUFEQ19DUjJfSlNXU1RBUlQ7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEdldHMgdGhlIHNlbGVjdGVkIEFEQyBTb2Z0d2FyZSBzdGFydCBpbmplY3RlZCBjb252ZXJzaW9uIFN0YXR1cy4NCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEFEQyBzb2Z0d2FyZSBzdGFydCBpbmplY3RlZCBjb252ZXJzaW9uIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIEFEQ19HZXRTb2Z0d2FyZVN0YXJ0SW5qZWN0ZWRDb252Q21kU3RhdHVzKEFEQ19UeXBlRGVmKiBBREN4KQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiBKU1dTVEFSVCBiaXQgKi8NCisgIGlmICgoQURDeC0+Q1IyICYgQURDX0NSMl9KU1dTVEFSVCkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICAvKiBKU1dTVEFSVCBiaXQgaXMgc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogSlNXU1RBUlQgYml0IGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBKU1dTVEFSVCBiaXQgc3RhdHVzICovDQorICByZXR1cm4gIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc2VsZWN0ZWQgQURDIGF1dG9tYXRpYyBpbmplY3RlZCBncm91cCANCisgICogICAgICAgICBjb252ZXJzaW9uIGFmdGVyIHJlZ3VsYXIgb25lLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIEFEQyBhdXRvIGluamVjdGVkIGNvbnZlcnNpb24NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQURDX0F1dG9JbmplY3RlZENvbnZDbWQoQURDX1R5cGVEZWYqIEFEQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBBREMgYXV0b21hdGljIGluamVjdGVkIGdyb3VwIGNvbnZlcnNpb24gKi8NCisgICAgQURDeC0+Q1IxIHw9ICh1aW50MzJfdClBRENfQ1IxX0pBVVRPOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBBREMgYXV0b21hdGljIGluamVjdGVkIGdyb3VwIGNvbnZlcnNpb24gKi8NCisgICAgQURDeC0+Q1IxICY9ICh1aW50MzJfdCkofkFEQ19DUjFfSkFVVE8pOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBkaXNjb250aW51b3VzIG1vZGUgZm9yIGluamVjdGVkIGdyb3VwIA0KKyAgKiAgICAgICAgIGNoYW5uZWwgZm9yIHRoZSBzcGVjaWZpZWQgQURDDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgQURDIGRpc2NvbnRpbnVvdXMgbW9kZSBvbiBpbmplY3RlZA0KKyAgKiAgICAgICAgIGdyb3VwIGNoYW5uZWwuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19JbmplY3RlZERpc2NNb2RlQ21kKEFEQ19UeXBlRGVmKiBBREN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGluamVjdGVkIGRpc2NvbnRpbnVvdXMgbW9kZSAqLw0KKyAgICBBREN4LT5DUjEgfD0gKHVpbnQzMl90KUFEQ19DUjFfSkRJU0NFTjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQURDIGluamVjdGVkIGRpc2NvbnRpbnVvdXMgbW9kZSAqLw0KKyAgICBBREN4LT5DUjEgJj0gKHVpbnQzMl90KSh+QURDX0NSMV9KRElTQ0VOKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgQURDIGluamVjdGVkIGNoYW5uZWwgY29udmVyc2lvbiByZXN1bHQNCisgICogQHBhcmFtICBBREN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBBRENfSW5qZWN0ZWRDaGFubmVsOiB0aGUgY29udmVydGVkIEFEQyBpbmplY3RlZCBjaGFubmVsLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0luamVjdGVkQ2hhbm5lbF8xOiBJbmplY3RlZCBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0luamVjdGVkQ2hhbm5lbF8yOiBJbmplY3RlZCBDaGFubmVsMiBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0luamVjdGVkQ2hhbm5lbF8zOiBJbmplY3RlZCBDaGFubmVsMyBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0luamVjdGVkQ2hhbm5lbF80OiBJbmplY3RlZCBDaGFubmVsNCBzZWxlY3RlZA0KKyAgKiBAcmV0dmFsIFRoZSBEYXRhIGNvbnZlcnNpb24gdmFsdWUuDQorICAqLw0KK3VpbnQxNl90IEFEQ19HZXRJbmplY3RlZENvbnZlcnNpb25WYWx1ZShBRENfVHlwZURlZiogQURDeCwgdWludDhfdCBBRENfSW5qZWN0ZWRDaGFubmVsKQ0KK3sNCisgIF9fSU8gdWludDMyX3QgdG1wID0gMDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0lOSkVDVEVEX0NIQU5ORUwoQURDX0luamVjdGVkQ2hhbm5lbCkpOw0KKw0KKyAgdG1wID0gKHVpbnQzMl90KUFEQ3g7DQorICB0bXAgKz0gQURDX0luamVjdGVkQ2hhbm5lbCArIEpEUl9PRkZTRVQ7DQorICANCisgIC8qIFJldHVybnMgdGhlIHNlbGVjdGVkIGluamVjdGVkIGNoYW5uZWwgY29udmVyc2lvbiBkYXRhIHZhbHVlICovDQorICByZXR1cm4gKHVpbnQxNl90KSAoKihfX0lPIHVpbnQzMl90KikgIHRtcCk7IA0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBBRENfR3JvdXA3IEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBBREMgSW50ZXJydXB0cyBhbmQgDQorICB0byBnZXQgdGhlIHN0YXR1cyBhbmQgY2xlYXIgZmxhZ3MgYW5kIEludGVycnVwdHMgcGVuZGluZyBiaXRzLg0KKyAgDQorICBFYWNoIEFEQyBwcm92aWRlcyA0IEludGVycnVwdHMgc291cmNlcyBhbmQgNiBGbGFncyB3aGljaCBjYW4gYmUgZGl2aWRlZCBpbnRvIA0KKyAgMyBncm91cHM6DQorICANCisgIEkuIEZsYWdzIGFuZCBJbnRlcnJ1cHRzIGZvciBBREMgcmVndWxhciBjaGFubmVscw0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgRmxhZ3MgOg0KKyAgLS0tLS0tLS0tLSANCisgICAgIDEuIEFEQ19GTEFHX09WUiA6IE92ZXJydW4gZGV0ZWN0aW9uIHdoZW4gcmVndWxhciBjb252ZXJ0ZWQgZGF0YSBhcmUgbG9zdA0KKw0KKyAgICAgMi4gQURDX0ZMQUdfRU9DIDogUmVndWxhciBjaGFubmVsIGVuZCBvZiBjb252ZXJzaW9uID09PiB0byBpbmRpY2F0ZSAoZGVwZW5kaW5nIA0KKyAgICAgICAgICAgICAgb24gRU9DUyBiaXQsIG1hbmFnZWQgYnkgQURDX0VPQ09uRWFjaFJlZ3VsYXJDaGFubmVsQ21kKCkgKSB0aGUgZW5kIG9mOg0KKyAgICAgICAgICAgICAgID09PiBhIHJlZ3VsYXIgQ0hBTk5FTCBjb252ZXJzaW9uIA0KKyAgICAgICAgICAgICAgID09PiBzZXF1ZW5jZSBvZiByZWd1bGFyIEdST1VQIGNvbnZlcnNpb25zIC4NCisNCisgICAgIDMuIEFEQ19GTEFHX1NUUlQ6IFJlZ3VsYXIgY2hhbm5lbCBzdGFydCA9PT4gdG8gaW5kaWNhdGUgd2hlbiByZWd1bGFyIENIQU5ORUwgDQorICAgICAgICAgICAgICBjb252ZXJzaW9uIHN0YXJ0cy4NCisNCisgIEludGVycnVwdHMgOg0KKyAgLS0tLS0tLS0tLS0tDQorICAgICAxLiBBRENfSVRfT1ZSIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciBPdmVycnVuIGRldGVjdGlvbiBldmVudC4gIA0KKyAgICAgMi4gQURDX0lUX0VPQyA6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgUmVndWxhciBjaGFubmVsIGVuZCBvZiANCisgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uIGV2ZW50Lg0KKyAgDQorICANCisgIElJLiBGbGFncyBhbmQgSW50ZXJydXB0cyBmb3IgQURDIEluamVjdGVkIGNoYW5uZWxzDQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICBGbGFncyA6DQorICAtLS0tLS0tLS0tIA0KKyAgICAgMS4gQURDX0ZMQUdfSkVPQyA6IEluamVjdGVkIGNoYW5uZWwgZW5kIG9mIGNvbnZlcnNpb24gPT0+IHRvIGluZGljYXRlIGF0IA0KKyAgICAgICAgICAgICAgIHRoZSBlbmQgb2YgaW5qZWN0ZWQgR1JPVVAgY29udmVyc2lvbiAgDQorICAgICAgICAgICAgICANCisgICAgIDIuIEFEQ19GTEFHX0pTVFJUOiBJbmplY3RlZCBjaGFubmVsIHN0YXJ0ID09PiB0byBpbmRpY2F0ZSBoYXJkd2FyZSB3aGVuIA0KKyAgICAgICAgICAgICAgIGluamVjdGVkIEdST1VQIGNvbnZlcnNpb24gc3RhcnRzLg0KKw0KKyAgSW50ZXJydXB0cyA6DQorICAtLS0tLS0tLS0tLS0NCisgICAgIDEuIEFEQ19JVF9KRU9DIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciBJbmplY3RlZCBjaGFubmVsIGVuZCBvZiANCisgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbiBldmVudC4gICAgIA0KKw0KKyAgSUlJLiBHZW5lcmFsIEZsYWdzIGFuZCBJbnRlcnJ1cHRzIGZvciB0aGUgQURDDQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgRmxhZ3MgOg0KKyAgLS0tLS0tLS0tLSANCisgICAgIDEuIEFEQ19GTEFHX0FXRDogQW5hbG9nIHdhdGNoZG9nID09PiB0byBpbmRpY2F0ZSBpZiB0aGUgY29udmVydGVkIHZvbHRhZ2UgDQorICAgICAgICAgICAgICBjcm9zc2VzIHRoZSBwcm9ncmFtbWVkIHRocmVzaG9sZHMgdmFsdWVzLg0KKyAgICAgICAgICAgICAgDQorICBJbnRlcnJ1cHRzIDoNCisgIC0tLS0tLS0tLS0tLQ0KKyAgICAgMS4gQURDX0lUX0FXRCA6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgQW5hbG9nIHdhdGNoZG9nIGV2ZW50LiANCisNCisgIA0KKyAgVGhlIHVzZXIgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIG1vZGUgd2lsbCBiZSB1c2VkIGluIGhpcyBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgDQorICB0aGUgQURDIGNvbnRyb2xsZXIgZXZlbnRzOiBQb2xsaW5nIG1vZGUgb3IgSW50ZXJydXB0IG1vZGUuDQorICANCisgIEluIHRoZSBQb2xsaW5nIE1vZGUgaXQgaXMgYWR2aXNlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQorICAgICAgLSBBRENfR2V0RmxhZ1N0YXR1cygpIDogdG8gY2hlY2sgaWYgZmxhZ3MgZXZlbnRzIG9jY3VyLiANCisgICAgICAtIEFEQ19DbGVhckZsYWcoKSAgICAgOiB0byBjbGVhciB0aGUgZmxhZ3MgZXZlbnRzLg0KKyAgICAgIA0KKyAgSW4gdGhlIEludGVycnVwdCBNb2RlIGl0IGlzIGFkdmlzZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgICAgLSBBRENfSVRDb25maWcoKSAgICAgICAgICA6IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgc291cmNlLg0KKyAgICAgLSBBRENfR2V0SVRTdGF0dXMoKSAgICAgICA6IHRvIGNoZWNrIGlmIEludGVycnVwdCBvY2N1cnMuDQorICAgICAtIEFEQ19DbGVhcklUUGVuZGluZ0JpdCgpIDogdG8gY2xlYXIgdGhlIEludGVycnVwdCBwZW5kaW5nIEJpdCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ycmVzcG9uZGluZyBGbGFnKS4gDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLyANCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgQURDIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQURDX0lUOiBzcGVjaWZpZXMgdGhlIEFEQyBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JVF9FT0M6IEVuZCBvZiBjb252ZXJzaW9uIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBBRENfSVRfQVdEOiBBbmFsb2cgd2F0Y2hkb2cgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JVF9KRU9DOiBFbmQgb2YgaW5qZWN0ZWQgY29udmVyc2lvbiBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0lUX09WUjogT3ZlcnJ1biBpbnRlcnJ1cHQgZW5hYmxlICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgQURDIGludGVycnVwdHMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19JVENvbmZpZyhBRENfVHlwZURlZiogQURDeCwgdWludDE2X3QgQURDX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpICANCit7DQorICB1aW50MzJfdCBpdG1hc2sgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19JVChBRENfSVQpKTsgDQorDQorICAvKiBHZXQgdGhlIEFEQyBJVCBpbmRleCAqLw0KKyAgaXRtYXNrID0gKHVpbnQ4X3QpQURDX0lUOw0KKyAgaXRtYXNrID0gKHVpbnQzMl90KTB4MDEgPDwgaXRtYXNrOyAgICANCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEFEQyBpbnRlcnJ1cHRzICovDQorICAgIEFEQ3gtPkNSMSB8PSBpdG1hc2s7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEFEQyBpbnRlcnJ1cHRzICovDQorICAgIEFEQ3gtPkNSMSAmPSAofih1aW50MzJfdClpdG1hc2spOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIEFEQyBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQURDX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBBRENfRkxBR19BV0Q6IEFuYWxvZyB3YXRjaGRvZyBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRkxBR19FT0M6IEVuZCBvZiBjb252ZXJzaW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEFEQ19GTEFHX0pFT0M6IEVuZCBvZiBpbmplY3RlZCBncm91cCBjb252ZXJzaW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEFEQ19GTEFHX0pTVFJUOiBTdGFydCBvZiBpbmplY3RlZCBncm91cCBjb252ZXJzaW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEFEQ19GTEFHX1NUUlQ6IFN0YXJ0IG9mIHJlZ3VsYXIgZ3JvdXAgY29udmVyc2lvbiBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRkxBR19PVlI6IE92ZXJydW4gZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEFEQ19GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIEFEQ19HZXRGbGFnU3RhdHVzKEFEQ19UeXBlRGVmKiBBREN4LCB1aW50OF90IEFEQ19GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfR0VUX0ZMQUcoQURDX0ZMQUcpKTsNCisNCisgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBBREMgZmxhZyAqLw0KKyAgaWYgKChBREN4LT5TUiAmIEFEQ19GTEFHKSAhPSAodWludDhfdClSRVNFVCkNCisgIHsNCisgICAgLyogQURDX0ZMQUcgaXMgc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogQURDX0ZMQUcgaXMgcmVzZXQgKi8NCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIEFEQ19GTEFHIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgQURDeCdzIHBlbmRpbmcgZmxhZ3MuDQorICAqIEBwYXJhbSAgQURDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgQURDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQURDX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBBRENfRkxBR19BV0Q6IEFuYWxvZyB3YXRjaGRvZyBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRkxBR19FT0M6IEVuZCBvZiBjb252ZXJzaW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEFEQ19GTEFHX0pFT0M6IEVuZCBvZiBpbmplY3RlZCBncm91cCBjb252ZXJzaW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEFEQ19GTEFHX0pTVFJUOiBTdGFydCBvZiBpbmplY3RlZCBncm91cCBjb252ZXJzaW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEFEQ19GTEFHX1NUUlQ6IFN0YXJ0IG9mIHJlZ3VsYXIgZ3JvdXAgY29udmVyc2lvbiBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBBRENfRkxBR19PVlI6IE92ZXJydW4gZmxhZyAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEFEQ19DbGVhckZsYWcoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQ4X3QgQURDX0ZMQUcpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19BRENfQUxMX1BFUklQSChBREN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0NMRUFSX0ZMQUcoQURDX0ZMQUcpKTsNCisNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBBREMgZmxhZ3MgKi8NCisgIEFEQ3gtPlNSID0gfih1aW50MzJfdClBRENfRkxBRzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBBREMgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuDQorICAqIEBwYXJhbSAgQURDeDogICB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBBREMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBBRENfSVQ6IHNwZWNpZmllcyB0aGUgQURDIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2suIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0lUX0VPQzogRW5kIG9mIGNvbnZlcnNpb24gaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JVF9BV0Q6IEFuYWxvZyB3YXRjaGRvZyBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0lUX0pFT0M6IEVuZCBvZiBpbmplY3RlZCBjb252ZXJzaW9uIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBBRENfSVRfT1ZSOiBPdmVycnVuIGludGVycnVwdCBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBBRENfSVQgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0lUU3RhdHVzIEFEQ19HZXRJVFN0YXR1cyhBRENfVHlwZURlZiogQURDeCwgdWludDE2X3QgQURDX0lUKQ0KK3sNCisgIElUU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgdWludDMyX3QgaXRtYXNrID0gMCwgZW5hYmxlc3RhdHVzID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQURDX0FMTF9QRVJJUEgoQURDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19JVChBRENfSVQpKTsNCisNCisgIC8qIEdldCB0aGUgQURDIElUIGluZGV4ICovDQorICBpdG1hc2sgPSBBRENfSVQgPj4gODsNCisNCisgIC8qIEdldCB0aGUgQURDX0lUIGVuYWJsZSBiaXQgc3RhdHVzICovDQorICBlbmFibGVzdGF0dXMgPSAoQURDeC0+Q1IxICYgKCh1aW50MzJfdCkweDAxIDw8ICh1aW50OF90KUFEQ19JVCkpIDsNCisNCisgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBBREMgaW50ZXJydXB0ICovDQorICBpZiAoKChBREN4LT5TUiAmIGl0bWFzaykgIT0gKHVpbnQzMl90KVJFU0VUKSAmJiBlbmFibGVzdGF0dXMpDQorICB7DQorICAgIC8qIEFEQ19JVCBpcyBzZXQgKi8NCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBBRENfSVQgaXMgcmVzZXQgKi8NCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIEFEQ19JVCBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIEFEQ3gncyBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzLg0KKyAgKiBAcGFyYW0gIEFEQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEFEQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFEQ19JVDogc3BlY2lmaWVzIHRoZSBBREMgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0lUX0VPQzogRW5kIG9mIGNvbnZlcnNpb24gaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIEFEQ19JVF9BV0Q6IEFuYWxvZyB3YXRjaGRvZyBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgQURDX0lUX0pFT0M6IEVuZCBvZiBpbmplY3RlZCBjb252ZXJzaW9uIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBBRENfSVRfT1ZSOiBPdmVycnVuIGludGVycnVwdCBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBBRENfQ2xlYXJJVFBlbmRpbmdCaXQoQURDX1R5cGVEZWYqIEFEQ3gsIHVpbnQxNl90IEFEQ19JVCkNCit7DQorICB1aW50OF90IGl0bWFzayA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfUEVSSVBIKEFEQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19BRENfSVQoQURDX0lUKSk7IA0KKyAgLyogR2V0IHRoZSBBREMgSVQgaW5kZXggKi8NCisgIGl0bWFzayA9ICh1aW50OF90KShBRENfSVQgPj4gOCk7DQorICAvKiBDbGVhciB0aGUgc2VsZWN0ZWQgQURDIGludGVycnVwdCBwZW5kaW5nIGJpdHMgKi8NCisgIEFEQ3gtPlNSID0gfih1aW50MzJfdClpdG1hc2s7DQorfSAgICAgICAgICAgICAgICAgICAgDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jYW4uYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5OGFjZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfY2FuLmMKQEAgLTAsMCArMSwxNzA0IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfY2FuLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQ29udHJvbGxlciBhcmVhIG5ldHdvcmsgKENBTikgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiANCisgICogICAgICAgICAgIC0gQ0FOIEZyYW1lcyBUcmFuc21pc3Npb24gDQorICAqICAgICAgICAgICAtIENBTiBGcmFtZXMgUmVjZXB0aW9uICAgIA0KKyAgKiAgICAgICAgICAgLSBPcGVyYXRpb24gbW9kZXMgc3dpdGNoICANCisgICogICAgICAgICAgIC0gRXJyb3IgbWFuYWdlbWVudCAgICAgICAgICANCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgICAgICAgIA0KKyAgKiAgICAgICAgIA0KKyAgKiAgQHZlcmJhdGltDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDEuICBFbmFibGUgdGhlIENBTiBjb250cm9sbGVyIGludGVyZmFjZSBjbG9jayB1c2luZyANCisgICogICAgICAgICAgICAgICAgICBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKFJDQ19BUEIxUGVyaXBoX0NBTjEsIEVOQUJMRSk7IGZvciBDQU4xIA0KKyAgKiAgICAgICAgICAgICAgYW5kIFJDQ19BUEIxUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjFQZXJpcGhfQ0FOMiwgRU5BQkxFKTsgZm9yIENBTjINCisgICogIEBub3RlICAgSW4gY2FzZSB5b3UgYXJlIHVzaW5nIENBTjIgb25seSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZSBDQU4xIGNsb2NrLg0KKyAgKiAgICAgDQorICAqICAgICAgICAgIDIuIENBTiBwaW5zIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgICAgICAtIEVuYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBDQU4gR1BJT3MgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoNCisgICogICAgICAgICAgICAgICAgICAgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMVBlcmlwaF9HUElPeCwgRU5BQkxFKTsgICANCisgICogICAgICAgICAgICAgICAtIENvbm5lY3QgdGhlIGludm9sdmVkIENBTiBwaW5zIHRvIEFGOSB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIA0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX1BpbkFGQ29uZmlnKEdQSU94LCBHUElPX1BpblNvdXJjZXgsIEdQSU9fQUZfQ0FOeCk7IA0KKyAgKiAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGVzZSBDQU4gcGlucyBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBieSBjYWxsaW5nDQorICAqICAgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uICBHUElPX0luaXQoKTsNCisgICogICAgDQorICAqICAgICAgICAgIDMuICBJbml0aWFsaXNlIGFuZCBjb25maWd1cmUgdGhlIENBTiB1c2luZyBDQU5fSW5pdCgpIGFuZCANCisgICogICAgICAgICAgICAgICBDQU5fRmlsdGVySW5pdCgpIGZ1bmN0aW9ucy4gICANCisgICogICAgICAgICAgICAgICANCisgICogICAgICAgICAgNC4gIFRyYW5zbWl0IHRoZSBkZXNpcmVkIENBTiBmcmFtZSB1c2luZyBDQU5fVHJhbnNtaXQoKSBmdW5jdGlvbi4NCisgICogICAgICAgICANCisgICogICAgICAgICAgNS4gIENoZWNrIHRoZSB0cmFuc21pc3Npb24gb2YgYSBDQU4gZnJhbWUgdXNpbmcgQ0FOX1RyYW5zbWl0U3RhdHVzKCkNCisgICogICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA2LiAgQ2FuY2VsIHRoZSB0cmFuc21pc3Npb24gb2YgYSBDQU4gZnJhbWUgdXNpbmcgQ0FOX0NhbmNlbFRyYW5zbWl0KCkNCisgICogICAgICAgICAgICAgIGZ1bmN0aW9uLiAgDQorICAqICAgICAgICAgICAgDQorICAqICAgICAgICAgIDcuICBSZWNlaXZlIGEgQ0FOIGZyYW1lIHVzaW5nIENBTl9SZWNpZXZlKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgDQorICAqICAgICAgICAgIDguICBSZWxlYXNlIHRoZSByZWNlaXZlIEZJRk9zIHVzaW5nIENBTl9GSUZPUmVsZWFzZSgpIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA5LiBSZXR1cm4gdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlY2VpdmVkIGZyYW1lcyB1c2luZyANCisgICogICAgICAgICAgICAgIENBTl9NZXNzYWdlUGVuZGluZygpIGZ1bmN0aW9uLiAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgMTAuIFRvIGNvbnRyb2wgQ0FOIGV2ZW50cyB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gbWV0aG9kczoNCisgICogICAgICAgICAgICAgICAtIENoZWNrIG9uIENBTiBmbGFncyB1c2luZyB0aGUgQ0FOX0dldEZsYWdTdGF0dXMoKSBmdW5jdGlvbi4gIA0KKyAgKiAgICAgICAgICAgICAgIC0gVXNlIENBTiBpbnRlcnJ1cHRzIHRocm91Z2ggdGhlIGZ1bmN0aW9uIENBTl9JVENvbmZpZygpIGF0IA0KKyAgKiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gcGhhc2UgYW5kIENBTl9HZXRJVFN0YXR1cygpIGZ1bmN0aW9uIGludG8gDQorICAqICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgcm91dGluZXMgdG8gY2hlY2sgaWYgdGhlIGV2ZW50IGhhcyBvY2N1cnJlZCBvciBub3QuDQorICAqICAgICAgICAgICAgIEFmdGVyIGNoZWNraW5nIG9uIGEgZmxhZyB5b3Ugc2hvdWxkIGNsZWFyIGl0IHVzaW5nIENBTl9DbGVhckZsYWcoKQ0KKyAgKiAgICAgICAgICAgICBmdW5jdGlvbi4gQW5kIGFmdGVyIGNoZWNraW5nIG9uIGFuIGludGVycnVwdCBldmVudCB5b3Ugc2hvdWxkIA0KKyAgKiAgICAgICAgICAgICBjbGVhciBpdCB1c2luZyBDQU5fQ2xlYXJJVFBlbmRpbmdCaXQoKSBmdW5jdGlvbi4gICAgICAgICAgICANCisgICogICAgICAgICAgICAgICANCisgICogICAgICAgICAgICAgIA0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqICAgICAgICAgDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfY2FuLmgiDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBDQU4gDQorICAqIEBicmllZiBDQU4gZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovIA0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiBDQU4gTWFzdGVyIENvbnRyb2wgUmVnaXN0ZXIgYml0cyAqLw0KKyNkZWZpbmUgTUNSX0RCRiAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDEwMDAwKSAvKiBzb2Z0d2FyZSBtYXN0ZXIgcmVzZXQgKi8NCisNCisvKiBDQU4gTWFpbGJveCBUcmFuc21pdCBSZXF1ZXN0ICovDQorI2RlZmluZSBUTUlEeFJfVFhSUSAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpIC8qIFRyYW5zbWl0IG1haWxib3ggcmVxdWVzdCAqLw0KKw0KKy8qIENBTiBGaWx0ZXIgTWFzdGVyIFJlZ2lzdGVyIGJpdHMgKi8NCisjZGVmaW5lIEZNUl9GSU5JVCAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMSkgLyogRmlsdGVyIGluaXQgbW9kZSAqLw0KKw0KKy8qIFRpbWUgb3V0IGZvciBJTkFLIGJpdCAqLw0KKyNkZWZpbmUgSU5BS19USU1FT1VUICAgICAgKCh1aW50MzJfdCkweDAwMDBGRkZGKQ0KKy8qIFRpbWUgb3V0IGZvciBTTEFLIGJpdCAqLw0KKyNkZWZpbmUgU0xBS19USU1FT1VUICAgICAgKCh1aW50MzJfdCkweDAwMDBGRkZGKQ0KKw0KKy8qIEZsYWdzIGluIFRTUiByZWdpc3RlciAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdTX1RTUiAgICAgKCh1aW50MzJfdCkweDA4MDAwMDAwKSANCisvKiBGbGFncyBpbiBSRjFSIHJlZ2lzdGVyICovDQorI2RlZmluZSBDQU5fRkxBR1NfUkYxUiAgICAoKHVpbnQzMl90KTB4MDQwMDAwMDApIA0KKy8qIEZsYWdzIGluIFJGMFIgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIENBTl9GTEFHU19SRjBSICAgICgodWludDMyX3QpMHgwMjAwMDAwMCkgDQorLyogRmxhZ3MgaW4gTVNSIHJlZ2lzdGVyICovDQorI2RlZmluZSBDQU5fRkxBR1NfTVNSICAgICAoKHVpbnQzMl90KTB4MDEwMDAwMDApIA0KKy8qIEZsYWdzIGluIEVTUiByZWdpc3RlciAqLw0KKyNkZWZpbmUgQ0FOX0ZMQUdTX0VTUiAgICAgKCh1aW50MzJfdCkweDAwRjAwMDAwKSANCisNCisvKiBNYWlsYm94ZXMgZGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgQ0FOX1RYTUFJTEJPWF8wICAgKCh1aW50OF90KTB4MDApDQorI2RlZmluZSBDQU5fVFhNQUlMQk9YXzEgICAoKHVpbnQ4X3QpMHgwMSkNCisjZGVmaW5lIENBTl9UWE1BSUxCT1hfMiAgICgodWludDhfdCkweDAyKSANCisNCisjZGVmaW5lIENBTl9NT0RFX01BU0sgICAgICgodWludDMyX3QpIDB4MDAwMDAwMDMpDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCitzdGF0aWMgSVRTdGF0dXMgQ2hlY2tJVFN0YXR1cyh1aW50MzJfdCBDQU5fUmVnLCB1aW50MzJfdCBJdF9CaXQpOw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIA0KKyAgIC0gSW5pdGlhbGl6ZSB0aGUgQ0FOIHBlcmlwaGVyYWxzIDogUHJlc2NhbGVyLCBvcGVyYXRpbmcgbW9kZSwgdGhlIG1heGltdW0gbnVtYmVyIA0KKyAgICAgb2YgdGltZSBxdWFudGEgdG8gcGVyZm9ybSByZXN5bmNocm9uaXphdGlvbiwgdGhlIG51bWJlciBvZiB0aW1lIHF1YW50YSBpbg0KKyAgICAgQml0IFNlZ21lbnQgMSBhbmQgMiBhbmQgbWFueSBvdGhlciBtb2Rlcy4gDQorICAgICBSZWZlciB0byAgQHJlZiBDQU5fSW5pdFR5cGVEZWYgIGZvciBtb3JlIGRldGFpbHMuDQorICAgLSBDb25maWd1cmVzIHRoZSBDQU4gcmVjZXB0aW9uIGZpbHRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgIC0gU2VsZWN0IHRoZSBzdGFydCBiYW5rIGZpbHRlciBmb3Igc2xhdmUgQ0FOLg0KKyAgIC0gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRGVidWcgRnJlZXplIG1vZGUgZm9yIENBTg0KKyAgIC0gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgQ0FOIFRpbWUgVHJpZ2dlciBPcGVyYXRpb24gY29tbXVuaWNhdGlvbiBtb2RlDQorICAgDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKyAgDQorLyoqDQorICAqIEBicmllZiAgRGVpbml0aWFsaXplcyB0aGUgQ0FOIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUuDQorICAqLw0KK3ZvaWQgQ0FOX0RlSW5pdChDQU5fVHlwZURlZiogQ0FOeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgDQorICBpZiAoQ0FOeCA9PSBDQU4xKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgQ0FOMSByZXNldCBzdGF0ZSAqLw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX0NBTjEsIEVOQUJMRSk7DQorICAgIC8qIFJlbGVhc2UgQ0FOMSBmcm9tIHJlc2V0IHN0YXRlICovDQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfQ0FOMSwgRElTQUJMRSk7DQorICB9DQorICBlbHNlDQorICB7ICANCisgICAgLyogRW5hYmxlIENBTjIgcmVzZXQgc3RhdGUgKi8NCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9DQU4yLCBFTkFCTEUpOw0KKyAgICAvKiBSZWxlYXNlIENBTjIgZnJvbSByZXNldCBzdGF0ZSAqLw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX0NBTjIsIERJU0FCTEUpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgQ0FOIHBlcmlwaGVyYWwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQNCisgICogICAgICAgICBwYXJhbWV0ZXJzIGluIHRoZSBDQU5fSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBDQU5fSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIENBTl9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucw0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgQ0FOIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgQ29uc3RhbnQgaW5kaWNhdGVzIGluaXRpYWxpemF0aW9uIHN1Y2NlZWQgd2hpY2ggd2lsbCBiZSANCisgICogICAgICAgICBDQU5fSW5pdFN0YXR1c19GYWlsZWQgb3IgQ0FOX0luaXRTdGF0dXNfU3VjY2Vzcy4NCisgICovDQordWludDhfdCBDQU5fSW5pdChDQU5fVHlwZURlZiogQ0FOeCwgQ0FOX0luaXRUeXBlRGVmKiBDQU5fSW5pdFN0cnVjdCkNCit7DQorICB1aW50OF90IEluaXRTdGF0dXMgPSBDQU5fSW5pdFN0YXR1c19GYWlsZWQ7DQorICB1aW50MzJfdCB3YWl0X2FjayA9IDB4MDAwMDAwMDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKENBTl9Jbml0U3RydWN0LT5DQU5fVFRDTSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoQ0FOX0luaXRTdHJ1Y3QtPkNBTl9BQk9NKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShDQU5fSW5pdFN0cnVjdC0+Q0FOX0FXVU0pKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKENBTl9Jbml0U3RydWN0LT5DQU5fTkFSVCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoQ0FOX0luaXRTdHJ1Y3QtPkNBTl9SRkxNKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShDQU5fSW5pdFN0cnVjdC0+Q0FOX1RYRlApKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fTU9ERShDQU5fSW5pdFN0cnVjdC0+Q0FOX01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fU0pXKENBTl9Jbml0U3RydWN0LT5DQU5fU0pXKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0JTMShDQU5fSW5pdFN0cnVjdC0+Q0FOX0JTMSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9CUzIoQ0FOX0luaXRTdHJ1Y3QtPkNBTl9CUzIpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fUFJFU0NBTEVSKENBTl9Jbml0U3RydWN0LT5DQU5fUHJlc2NhbGVyKSk7DQorDQorICAvKiBFeGl0IGZyb20gc2xlZXAgbW9kZSAqLw0KKyAgQ0FOeC0+TUNSICY9ICh+KHVpbnQzMl90KUNBTl9NQ1JfU0xFRVApOw0KKw0KKyAgLyogUmVxdWVzdCBpbml0aWFsaXNhdGlvbiAqLw0KKyAgQ0FOeC0+TUNSIHw9IENBTl9NQ1JfSU5SUSA7DQorDQorICAvKiBXYWl0IHRoZSBhY2tub3dsZWRnZSAqLw0KKyAgd2hpbGUgKCgoQ0FOeC0+TVNSICYgQ0FOX01TUl9JTkFLKSAhPSBDQU5fTVNSX0lOQUspICYmICh3YWl0X2FjayAhPSBJTkFLX1RJTUVPVVQpKQ0KKyAgew0KKyAgICB3YWl0X2FjaysrOw0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgYWNrbm93bGVkZ2UgKi8NCisgIGlmICgoQ0FOeC0+TVNSICYgQ0FOX01TUl9JTkFLKSAhPSBDQU5fTVNSX0lOQUspDQorICB7DQorICAgIEluaXRTdGF0dXMgPSBDQU5fSW5pdFN0YXR1c19GYWlsZWQ7DQorICB9DQorICBlbHNlIA0KKyAgew0KKyAgICAvKiBTZXQgdGhlIHRpbWUgdHJpZ2dlcmVkIGNvbW11bmljYXRpb24gbW9kZSAqLw0KKyAgICBpZiAoQ0FOX0luaXRTdHJ1Y3QtPkNBTl9UVENNID09IEVOQUJMRSkNCisgICAgew0KKyAgICAgIENBTngtPk1DUiB8PSBDQU5fTUNSX1RUQ007DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgQ0FOeC0+TUNSICY9IH4odWludDMyX3QpQ0FOX01DUl9UVENNOw0KKyAgICB9DQorDQorICAgIC8qIFNldCB0aGUgYXV0b21hdGljIGJ1cy1vZmYgbWFuYWdlbWVudCAqLw0KKyAgICBpZiAoQ0FOX0luaXRTdHJ1Y3QtPkNBTl9BQk9NID09IEVOQUJMRSkNCisgICAgew0KKyAgICAgIENBTngtPk1DUiB8PSBDQU5fTUNSX0FCT007DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgQ0FOeC0+TUNSICY9IH4odWludDMyX3QpQ0FOX01DUl9BQk9NOw0KKyAgICB9DQorDQorICAgIC8qIFNldCB0aGUgYXV0b21hdGljIHdha2UtdXAgbW9kZSAqLw0KKyAgICBpZiAoQ0FOX0luaXRTdHJ1Y3QtPkNBTl9BV1VNID09IEVOQUJMRSkNCisgICAgew0KKyAgICAgIENBTngtPk1DUiB8PSBDQU5fTUNSX0FXVU07DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgQ0FOeC0+TUNSICY9IH4odWludDMyX3QpQ0FOX01DUl9BV1VNOw0KKyAgICB9DQorDQorICAgIC8qIFNldCB0aGUgbm8gYXV0b21hdGljIHJldHJhbnNtaXNzaW9uICovDQorICAgIGlmIChDQU5fSW5pdFN0cnVjdC0+Q0FOX05BUlQgPT0gRU5BQkxFKQ0KKyAgICB7DQorICAgICAgQ0FOeC0+TUNSIHw9IENBTl9NQ1JfTkFSVDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBDQU54LT5NQ1IgJj0gfih1aW50MzJfdClDQU5fTUNSX05BUlQ7DQorICAgIH0NCisNCisgICAgLyogU2V0IHRoZSByZWNlaXZlIEZJRk8gbG9ja2VkIG1vZGUgKi8NCisgICAgaWYgKENBTl9Jbml0U3RydWN0LT5DQU5fUkZMTSA9PSBFTkFCTEUpDQorICAgIHsNCisgICAgICBDQU54LT5NQ1IgfD0gQ0FOX01DUl9SRkxNOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIENBTngtPk1DUiAmPSB+KHVpbnQzMl90KUNBTl9NQ1JfUkZMTTsNCisgICAgfQ0KKw0KKyAgICAvKiBTZXQgdGhlIHRyYW5zbWl0IEZJRk8gcHJpb3JpdHkgKi8NCisgICAgaWYgKENBTl9Jbml0U3RydWN0LT5DQU5fVFhGUCA9PSBFTkFCTEUpDQorICAgIHsNCisgICAgICBDQU54LT5NQ1IgfD0gQ0FOX01DUl9UWEZQOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIENBTngtPk1DUiAmPSB+KHVpbnQzMl90KUNBTl9NQ1JfVFhGUDsNCisgICAgfQ0KKw0KKyAgICAvKiBTZXQgdGhlIGJpdCB0aW1pbmcgcmVnaXN0ZXIgKi8NCisgICAgQ0FOeC0+QlRSID0gKHVpbnQzMl90KSgodWludDMyX3QpQ0FOX0luaXRTdHJ1Y3QtPkNBTl9Nb2RlIDw8IDMwKSB8IFwNCisgICAgICAgICAgICAgICAgKCh1aW50MzJfdClDQU5fSW5pdFN0cnVjdC0+Q0FOX1NKVyA8PCAyNCkgfCBcDQorICAgICAgICAgICAgICAgICgodWludDMyX3QpQ0FOX0luaXRTdHJ1Y3QtPkNBTl9CUzEgPDwgMTYpIHwgXA0KKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KUNBTl9Jbml0U3RydWN0LT5DQU5fQlMyIDw8IDIwKSB8IFwNCisgICAgICAgICAgICAgICAoKHVpbnQzMl90KUNBTl9Jbml0U3RydWN0LT5DQU5fUHJlc2NhbGVyIC0gMSk7DQorDQorICAgIC8qIFJlcXVlc3QgbGVhdmUgaW5pdGlhbGlzYXRpb24gKi8NCisgICAgQ0FOeC0+TUNSICY9IH4odWludDMyX3QpQ0FOX01DUl9JTlJROw0KKw0KKyAgIC8qIFdhaXQgdGhlIGFja25vd2xlZGdlICovDQorICAgd2FpdF9hY2sgPSAwOw0KKw0KKyAgIHdoaWxlICgoKENBTngtPk1TUiAmIENBTl9NU1JfSU5BSykgPT0gQ0FOX01TUl9JTkFLKSAmJiAod2FpdF9hY2sgIT0gSU5BS19USU1FT1VUKSkNCisgICB7DQorICAgICB3YWl0X2FjaysrOw0KKyAgIH0NCisNCisgICAgLyogLi4uYW5kIGNoZWNrIGFja25vd2xlZGdlZCAqLw0KKyAgICBpZiAoKENBTngtPk1TUiAmIENBTl9NU1JfSU5BSykgPT0gQ0FOX01TUl9JTkFLKQ0KKyAgICB7DQorICAgICAgSW5pdFN0YXR1cyA9IENBTl9Jbml0U3RhdHVzX0ZhaWxlZDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBJbml0U3RhdHVzID0gQ0FOX0luaXRTdGF0dXNfU3VjY2VzcyA7DQorICAgIH0NCisgIH0NCisNCisgIC8qIEF0IHRoaXMgc3RlcCwgcmV0dXJuIHRoZSBzdGF0dXMgb2YgaW5pdGlhbGl6YXRpb24gKi8NCisgIHJldHVybiBJbml0U3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBDQU4gcmVjZXB0aW9uIGZpbHRlciBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZA0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIENBTl9GaWx0ZXJJbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIENBTl9GaWx0ZXJJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgQ0FOX0ZpbHRlckluaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0DQorICAqICAgICAgICAgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENBTl9GaWx0ZXJJbml0KENBTl9GaWx0ZXJJbml0VHlwZURlZiogQ0FOX0ZpbHRlckluaXRTdHJ1Y3QpDQorew0KKyAgdWludDMyX3QgZmlsdGVyX251bWJlcl9iaXRfcG9zID0gMDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0ZJTFRFUl9OVU1CRVIoQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJOdW1iZXIpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fRklMVEVSX01PREUoQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJNb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0ZJTFRFUl9TQ0FMRShDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlclNjYWxlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0ZJTFRFUl9GSUZPKENBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVyRklGT0Fzc2lnbm1lbnQpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKENBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVyQWN0aXZhdGlvbikpOw0KKw0KKyAgZmlsdGVyX251bWJlcl9iaXRfcG9zID0gKCh1aW50MzJfdCkxKSA8PCBDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlck51bWJlcjsNCisNCisgIC8qIEluaXRpYWxpc2F0aW9uIG1vZGUgZm9yIHRoZSBmaWx0ZXIgKi8NCisgIENBTjEtPkZNUiB8PSBGTVJfRklOSVQ7DQorDQorICAvKiBGaWx0ZXIgRGVhY3RpdmF0aW9uICovDQorICBDQU4xLT5GQTFSICY9IH4odWludDMyX3QpZmlsdGVyX251bWJlcl9iaXRfcG9zOw0KKw0KKyAgLyogRmlsdGVyIFNjYWxlICovDQorICBpZiAoQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJTY2FsZSA9PSBDQU5fRmlsdGVyU2NhbGVfMTZiaXQpDQorICB7DQorICAgIC8qIDE2LWJpdCBzY2FsZSBmb3IgdGhlIGZpbHRlciAqLw0KKyAgICBDQU4xLT5GUzFSICY9IH4odWludDMyX3QpZmlsdGVyX251bWJlcl9iaXRfcG9zOw0KKw0KKyAgICAvKiBGaXJzdCAxNi1iaXQgaWRlbnRpZmllciBhbmQgRmlyc3QgMTYtYml0IG1hc2sgKi8NCisgICAgLyogT3IgRmlyc3QgMTYtYml0IGlkZW50aWZpZXIgYW5kIFNlY29uZCAxNi1iaXQgaWRlbnRpZmllciAqLw0KKyAgICBDQU4xLT5zRmlsdGVyUmVnaXN0ZXJbQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJOdW1iZXJdLkZSMSA9IA0KKyAgICAgICAoKDB4MDAwMEZGRkYgJiAodWludDMyX3QpQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJNYXNrSWRMb3cpIDw8IDE2KSB8DQorICAgICAgICAoMHgwMDAwRkZGRiAmICh1aW50MzJfdClDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlcklkTG93KTsNCisNCisgICAgLyogU2Vjb25kIDE2LWJpdCBpZGVudGlmaWVyIGFuZCBTZWNvbmQgMTYtYml0IG1hc2sgKi8NCisgICAgLyogT3IgVGhpcmQgMTYtYml0IGlkZW50aWZpZXIgYW5kIEZvdXJ0aCAxNi1iaXQgaWRlbnRpZmllciAqLw0KKyAgICBDQU4xLT5zRmlsdGVyUmVnaXN0ZXJbQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJOdW1iZXJdLkZSMiA9IA0KKyAgICAgICAoKDB4MDAwMEZGRkYgJiAodWludDMyX3QpQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJNYXNrSWRIaWdoKSA8PCAxNikgfA0KKyAgICAgICAgKDB4MDAwMEZGRkYgJiAodWludDMyX3QpQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJJZEhpZ2gpOw0KKyAgfQ0KKw0KKyAgaWYgKENBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVyU2NhbGUgPT0gQ0FOX0ZpbHRlclNjYWxlXzMyYml0KQ0KKyAgew0KKyAgICAvKiAzMi1iaXQgc2NhbGUgZm9yIHRoZSBmaWx0ZXIgKi8NCisgICAgQ0FOMS0+RlMxUiB8PSBmaWx0ZXJfbnVtYmVyX2JpdF9wb3M7DQorICAgIC8qIDMyLWJpdCBpZGVudGlmaWVyIG9yIEZpcnN0IDMyLWJpdCBpZGVudGlmaWVyICovDQorICAgIENBTjEtPnNGaWx0ZXJSZWdpc3RlcltDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlck51bWJlcl0uRlIxID0gDQorICAgICAgICgoMHgwMDAwRkZGRiAmICh1aW50MzJfdClDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlcklkSGlnaCkgPDwgMTYpIHwNCisgICAgICAgICgweDAwMDBGRkZGICYgKHVpbnQzMl90KUNBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVySWRMb3cpOw0KKyAgICAvKiAzMi1iaXQgbWFzayBvciBTZWNvbmQgMzItYml0IGlkZW50aWZpZXIgKi8NCisgICAgQ0FOMS0+c0ZpbHRlclJlZ2lzdGVyW0NBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVyTnVtYmVyXS5GUjIgPSANCisgICAgICAgKCgweDAwMDBGRkZGICYgKHVpbnQzMl90KUNBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVyTWFza0lkSGlnaCkgPDwgMTYpIHwNCisgICAgICAgICgweDAwMDBGRkZGICYgKHVpbnQzMl90KUNBTl9GaWx0ZXJJbml0U3RydWN0LT5DQU5fRmlsdGVyTWFza0lkTG93KTsNCisgIH0NCisNCisgIC8qIEZpbHRlciBNb2RlICovDQorICBpZiAoQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJNb2RlID09IENBTl9GaWx0ZXJNb2RlX0lkTWFzaykNCisgIHsNCisgICAgLypJZC9NYXNrIG1vZGUgZm9yIHRoZSBmaWx0ZXIqLw0KKyAgICBDQU4xLT5GTTFSICY9IH4odWludDMyX3QpZmlsdGVyX251bWJlcl9iaXRfcG9zOw0KKyAgfQ0KKyAgZWxzZSAvKiBDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlck1vZGUgPT0gQ0FOX0ZpbHRlck1vZGVfSWRMaXN0ICovDQorICB7DQorICAgIC8qSWRlbnRpZmllciBsaXN0IG1vZGUgZm9yIHRoZSBmaWx0ZXIqLw0KKyAgICBDQU4xLT5GTTFSIHw9ICh1aW50MzJfdClmaWx0ZXJfbnVtYmVyX2JpdF9wb3M7DQorICB9DQorDQorICAvKiBGaWx0ZXIgRklGTyBhc3NpZ25tZW50ICovDQorICBpZiAoQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJGSUZPQXNzaWdubWVudCA9PSBDQU5fRmlsdGVyX0ZJRk8wKQ0KKyAgew0KKyAgICAvKiBGSUZPIDAgYXNzaWduYXRpb24gZm9yIHRoZSBmaWx0ZXIgKi8NCisgICAgQ0FOMS0+RkZBMVIgJj0gfih1aW50MzJfdClmaWx0ZXJfbnVtYmVyX2JpdF9wb3M7DQorICB9DQorDQorICBpZiAoQ0FOX0ZpbHRlckluaXRTdHJ1Y3QtPkNBTl9GaWx0ZXJGSUZPQXNzaWdubWVudCA9PSBDQU5fRmlsdGVyX0ZJRk8xKQ0KKyAgew0KKyAgICAvKiBGSUZPIDEgYXNzaWduYXRpb24gZm9yIHRoZSBmaWx0ZXIgKi8NCisgICAgQ0FOMS0+RkZBMVIgfD0gKHVpbnQzMl90KWZpbHRlcl9udW1iZXJfYml0X3BvczsNCisgIH0NCisgIA0KKyAgLyogRmlsdGVyIGFjdGl2YXRpb24gKi8NCisgIGlmIChDQU5fRmlsdGVySW5pdFN0cnVjdC0+Q0FOX0ZpbHRlckFjdGl2YXRpb24gPT0gRU5BQkxFKQ0KKyAgew0KKyAgICBDQU4xLT5GQTFSIHw9IGZpbHRlcl9udW1iZXJfYml0X3BvczsNCisgIH0NCisNCisgIC8qIExlYXZlIHRoZSBpbml0aWFsaXNhdGlvbiBtb2RlIGZvciB0aGUgZmlsdGVyICovDQorICBDQU4xLT5GTVIgJj0gfkZNUl9GSU5JVDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBDQU5fSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBDQU5fSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIENBTl9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggaWxsIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDQU5fU3RydWN0SW5pdChDQU5fSW5pdFR5cGVEZWYqIENBTl9Jbml0U3RydWN0KQ0KK3sNCisgIC8qIFJlc2V0IENBTiBpbml0IHN0cnVjdHVyZSBwYXJhbWV0ZXJzIHZhbHVlcyAqLw0KKyAgDQorICAvKiBJbml0aWFsaXplIHRoZSB0aW1lIHRyaWdnZXJlZCBjb21tdW5pY2F0aW9uIG1vZGUgKi8NCisgIENBTl9Jbml0U3RydWN0LT5DQU5fVFRDTSA9IERJU0FCTEU7DQorICANCisgIC8qIEluaXRpYWxpemUgdGhlIGF1dG9tYXRpYyBidXMtb2ZmIG1hbmFnZW1lbnQgKi8NCisgIENBTl9Jbml0U3RydWN0LT5DQU5fQUJPTSA9IERJU0FCTEU7DQorICANCisgIC8qIEluaXRpYWxpemUgdGhlIGF1dG9tYXRpYyB3YWtlLXVwIG1vZGUgKi8NCisgIENBTl9Jbml0U3RydWN0LT5DQU5fQVdVTSA9IERJU0FCTEU7DQorICANCisgIC8qIEluaXRpYWxpemUgdGhlIG5vIGF1dG9tYXRpYyByZXRyYW5zbWlzc2lvbiAqLw0KKyAgQ0FOX0luaXRTdHJ1Y3QtPkNBTl9OQVJUID0gRElTQUJMRTsNCisgIA0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBGSUZPIGxvY2tlZCBtb2RlICovDQorICBDQU5fSW5pdFN0cnVjdC0+Q0FOX1JGTE0gPSBESVNBQkxFOw0KKyAgDQorICAvKiBJbml0aWFsaXplIHRoZSB0cmFuc21pdCBGSUZPIHByaW9yaXR5ICovDQorICBDQU5fSW5pdFN0cnVjdC0+Q0FOX1RYRlAgPSBESVNBQkxFOw0KKyAgDQorICAvKiBJbml0aWFsaXplIHRoZSBDQU5fTW9kZSBtZW1iZXIgKi8NCisgIENBTl9Jbml0U3RydWN0LT5DQU5fTW9kZSA9IENBTl9Nb2RlX05vcm1hbDsNCisgIA0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgQ0FOX1NKVyBtZW1iZXIgKi8NCisgIENBTl9Jbml0U3RydWN0LT5DQU5fU0pXID0gQ0FOX1NKV18xdHE7DQorICANCisgIC8qIEluaXRpYWxpemUgdGhlIENBTl9CUzEgbWVtYmVyICovDQorICBDQU5fSW5pdFN0cnVjdC0+Q0FOX0JTMSA9IENBTl9CUzFfNHRxOw0KKyAgDQorICAvKiBJbml0aWFsaXplIHRoZSBDQU5fQlMyIG1lbWJlciAqLw0KKyAgQ0FOX0luaXRTdHJ1Y3QtPkNBTl9CUzIgPSBDQU5fQlMyXzN0cTsNCisgIA0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgQ0FOX1ByZXNjYWxlciBtZW1iZXIgKi8NCisgIENBTl9Jbml0U3RydWN0LT5DQU5fUHJlc2NhbGVyID0gMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0IHRoZSBzdGFydCBiYW5rIGZpbHRlciBmb3Igc2xhdmUgQ0FOLg0KKyAgKiBAcGFyYW0gIENBTl9CYW5rTnVtYmVyOiBTZWxlY3QgdGhlIHN0YXJ0IHNsYXZlIGJhbmsgZmlsdGVyIGZyb20gMS4uMjcuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENBTl9TbGF2ZVN0YXJ0QmFuayh1aW50OF90IENBTl9CYW5rTnVtYmVyKSANCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9CQU5LTlVNQkVSKENBTl9CYW5rTnVtYmVyKSk7DQorICANCisgIC8qIEVudGVyIEluaXRpYWxpc2F0aW9uIG1vZGUgZm9yIHRoZSBmaWx0ZXIgKi8NCisgIENBTjEtPkZNUiB8PSBGTVJfRklOSVQ7DQorICANCisgIC8qIFNlbGVjdCB0aGUgc3RhcnQgc2xhdmUgYmFuayAqLw0KKyAgQ0FOMS0+Rk1SICY9ICh1aW50MzJfdCkweEZGRkZDMEYxIDsNCisgIENBTjEtPkZNUiB8PSAodWludDMyX3QpKENBTl9CYW5rTnVtYmVyKTw8ODsNCisgIA0KKyAgLyogTGVhdmUgSW5pdGlhbGlzYXRpb24gbW9kZSBmb3IgdGhlIGZpbHRlciAqLw0KKyAgQ0FOMS0+Rk1SICY9IH5GTVJfRklOSVQ7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIERCRyBGcmVlemUgZm9yIENBTi4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBDQU4gcGVyaXBoZXJhbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIChDQU4gcmVjZXB0aW9uL3RyYW5zbWlzc2lvbiBpcyBmcm96ZW4NCisgICogICAgICAgICAgZHVyaW5nIGRlYnVnLiBSZWNlcHRpb24gRklGT3MgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkL2NvbnRyb2xsZWQgbm9ybWFsbHkpIA0KKyAgKiAgICAgICAgICBvciBESVNBQkxFIChDQU4gaXMgd29ya2luZyBkdXJpbmcgZGVidWcpLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDQU5fREJHRnJlZXplKENBTl9UeXBlRGVmKiBDQU54LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DQU5fQUxMX1BFUklQSChDQU54KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIERlYnVnIEZyZWV6ZSAgKi8NCisgICAgQ0FOeC0+TUNSIHw9IE1DUl9EQkY7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgRGVidWcgRnJlZXplICovDQorICAgIENBTngtPk1DUiAmPSB+TUNSX0RCRjsNCisgIH0NCit9DQorDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgQ0FOIFRpbWUgVHJpZ2dlck9wZXJhdGlvbiBjb21tdW5pY2F0aW9uIG1vZGUuDQorICAqIEBub3RlICAgRExDIG11c3QgYmUgcHJvZ3JhbW1lZCBhcyA4IGluIG9yZGVyIFRpbWUgU3RhbXAgKDIgYnl0ZXMpIHRvIGJlIA0KKyAgKiAgICAgICAgIHNlbnQgb3ZlciB0aGUgQ0FOIGJ1cy4gIA0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBNb2RlIG5ldyBzdGF0ZS4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogICAgICAgICBXaGVuIGVuYWJsZWQsIFRpbWUgc3RhbXAgKFRJTUVbMTU6MF0pIHZhbHVlIGlzICBzZW50IGluIHRoZSBsYXN0IHR3bw0KKyAgKiAgICAgICAgIGRhdGEgYnl0ZXMgb2YgdGhlIDgtYnl0ZSBtZXNzYWdlOiBUSU1FWzc6MF0gaW4gZGF0YSBieXRlIDYgYW5kIFRJTUVbMTU6OF0gDQorICAqICAgICAgICAgaW4gZGF0YSBieXRlIDcuIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDQU5fVFRDb21Nb2RlQ21kKENBTl9UeXBlRGVmKiBDQU54LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DQU5fQUxMX1BFUklQSChDQU54KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgVFRDTSBtb2RlICovDQorICAgIENBTngtPk1DUiB8PSBDQU5fTUNSX1RUQ007DQorDQorICAgIC8qIFNldCBUR1QgYml0cyAqLw0KKyAgICBDQU54LT5zVHhNYWlsQm94WzBdLlREVFIgfD0gKCh1aW50MzJfdClDQU5fVERUMFJfVEdUKTsNCisgICAgQ0FOeC0+c1R4TWFpbEJveFsxXS5URFRSIHw9ICgodWludDMyX3QpQ0FOX1REVDFSX1RHVCk7DQorICAgIENBTngtPnNUeE1haWxCb3hbMl0uVERUUiB8PSAoKHVpbnQzMl90KUNBTl9URFQyUl9UR1QpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBUVENNIG1vZGUgKi8NCisgICAgQ0FOeC0+TUNSICY9ICh1aW50MzJfdCkofih1aW50MzJfdClDQU5fTUNSX1RUQ00pOw0KKw0KKyAgICAvKiBSZXNldCBUR1QgYml0cyAqLw0KKyAgICBDQU54LT5zVHhNYWlsQm94WzBdLlREVFIgJj0gKCh1aW50MzJfdCl+Q0FOX1REVDBSX1RHVCk7DQorICAgIENBTngtPnNUeE1haWxCb3hbMV0uVERUUiAmPSAoKHVpbnQzMl90KX5DQU5fVERUMVJfVEdUKTsNCisgICAgQ0FOeC0+c1R4TWFpbEJveFsyXS5URFRSICY9ICgodWludDMyX3QpfkNBTl9URFQyUl9UR1QpOw0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorDQorLyoqIEBkZWZncm91cCBDQU5fR3JvdXAyIENBTiBGcmFtZXMgVHJhbnNtaXNzaW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICAgQ0FOIEZyYW1lcyBUcmFuc21pc3Npb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgIENBTiBGcmFtZXMgVHJhbnNtaXNzaW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gDQorICAgLSBJbml0aWF0ZSBhbmQgdHJhbnNtaXQgYSBDQU4gZnJhbWUgbWVzc2FnZSAoaWYgdGhlcmUgaXMgYW4gZW1wdHkgbWFpbGJveCkuDQorICAgLSBDaGVjayB0aGUgdHJhbnNtaXNzaW9uIHN0YXR1cyBvZiBhIENBTiBGcmFtZQ0KKyAgIC0gQ2FuY2VsIGEgdHJhbnNtaXQgcmVxdWVzdA0KKyAgIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWF0ZXMgYW5kIHRyYW5zbWl0cyBhIENBTiBmcmFtZSBtZXNzYWdlLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFR4TWVzc2FnZTogcG9pbnRlciB0byBhIHN0cnVjdHVyZSB3aGljaCBjb250YWlucyBDQU4gSWQsIENBTiBETEMgYW5kIENBTiBkYXRhLg0KKyAgKiBAcmV0dmFsIFRoZSBudW1iZXIgb2YgdGhlIG1haWxib3ggdGhhdCBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24gb3INCisgICogICAgICAgICBDQU5fVHhTdGF0dXNfTm9NYWlsQm94IGlmIHRoZXJlIGlzIG5vIGVtcHR5IG1haWxib3guDQorICAqLw0KK3VpbnQ4X3QgQ0FOX1RyYW5zbWl0KENBTl9UeXBlRGVmKiBDQU54LCBDYW5UeE1zZyogVHhNZXNzYWdlKQ0KK3sNCisgIHVpbnQ4X3QgdHJhbnNtaXRfbWFpbGJveCA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fSURUWVBFKFR4TWVzc2FnZS0+SURFKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX1JUUihUeE1lc3NhZ2UtPlJUUikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9ETEMoVHhNZXNzYWdlLT5ETEMpKTsNCisNCisgIC8qIFNlbGVjdCBvbmUgZW1wdHkgdHJhbnNtaXQgbWFpbGJveCAqLw0KKyAgaWYgKChDQU54LT5UU1ImQ0FOX1RTUl9UTUUwKSA9PSBDQU5fVFNSX1RNRTApDQorICB7DQorICAgIHRyYW5zbWl0X21haWxib3ggPSAwOw0KKyAgfQ0KKyAgZWxzZSBpZiAoKENBTngtPlRTUiZDQU5fVFNSX1RNRTEpID09IENBTl9UU1JfVE1FMSkNCisgIHsNCisgICAgdHJhbnNtaXRfbWFpbGJveCA9IDE7DQorICB9DQorICBlbHNlIGlmICgoQ0FOeC0+VFNSJkNBTl9UU1JfVE1FMikgPT0gQ0FOX1RTUl9UTUUyKQ0KKyAgew0KKyAgICB0cmFuc21pdF9tYWlsYm94ID0gMjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgdHJhbnNtaXRfbWFpbGJveCA9IENBTl9UeFN0YXR1c19Ob01haWxCb3g7DQorICB9DQorDQorICBpZiAodHJhbnNtaXRfbWFpbGJveCAhPSBDQU5fVHhTdGF0dXNfTm9NYWlsQm94KQ0KKyAgew0KKyAgICAvKiBTZXQgdXAgdGhlIElkICovDQorICAgIENBTngtPnNUeE1haWxCb3hbdHJhbnNtaXRfbWFpbGJveF0uVElSICY9IFRNSUR4Ul9UWFJROw0KKyAgICBpZiAoVHhNZXNzYWdlLT5JREUgPT0gQ0FOX0lkX1N0YW5kYXJkKQ0KKyAgICB7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX0NBTl9TVERJRChUeE1lc3NhZ2UtPlN0ZElkKSk7ICANCisgICAgICBDQU54LT5zVHhNYWlsQm94W3RyYW5zbWl0X21haWxib3hdLlRJUiB8PSAoKFR4TWVzc2FnZS0+U3RkSWQgPDwgMjEpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhNZXNzYWdlLT5SVFIpOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIGFzc2VydF9wYXJhbShJU19DQU5fRVhUSUQoVHhNZXNzYWdlLT5FeHRJZCkpOw0KKyAgICAgIENBTngtPnNUeE1haWxCb3hbdHJhbnNtaXRfbWFpbGJveF0uVElSIHw9ICgoVHhNZXNzYWdlLT5FeHRJZCA8PCAzKSB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4TWVzc2FnZS0+SURFIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhNZXNzYWdlLT5SVFIpOw0KKyAgICB9DQorICAgIA0KKyAgICAvKiBTZXQgdXAgdGhlIERMQyAqLw0KKyAgICBUeE1lc3NhZ2UtPkRMQyAmPSAodWludDhfdCkweDAwMDAwMDBGOw0KKyAgICBDQU54LT5zVHhNYWlsQm94W3RyYW5zbWl0X21haWxib3hdLlREVFIgJj0gKHVpbnQzMl90KTB4RkZGRkZGRjA7DQorICAgIENBTngtPnNUeE1haWxCb3hbdHJhbnNtaXRfbWFpbGJveF0uVERUUiB8PSBUeE1lc3NhZ2UtPkRMQzsNCisNCisgICAgLyogU2V0IHVwIHRoZSBkYXRhIGZpZWxkICovDQorICAgIENBTngtPnNUeE1haWxCb3hbdHJhbnNtaXRfbWFpbGJveF0uVERMUiA9ICgoKHVpbnQzMl90KVR4TWVzc2FnZS0+RGF0YVszXSA8PCAyNCkgfCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVR4TWVzc2FnZS0+RGF0YVsyXSA8PCAxNikgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpVHhNZXNzYWdlLT5EYXRhWzFdIDw8IDgpIHwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClUeE1lc3NhZ2UtPkRhdGFbMF0pKTsNCisgICAgQ0FOeC0+c1R4TWFpbEJveFt0cmFuc21pdF9tYWlsYm94XS5UREhSID0gKCgodWludDMyX3QpVHhNZXNzYWdlLT5EYXRhWzddIDw8IDI0KSB8IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpVHhNZXNzYWdlLT5EYXRhWzZdIDw8IDE2KSB8DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClUeE1lc3NhZ2UtPkRhdGFbNV0gPDwgOCkgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpVHhNZXNzYWdlLT5EYXRhWzRdKSk7DQorICAgIC8qIFJlcXVlc3QgdHJhbnNtaXNzaW9uICovDQorICAgIENBTngtPnNUeE1haWxCb3hbdHJhbnNtaXRfbWFpbGJveF0uVElSIHw9IFRNSUR4Ul9UWFJROw0KKyAgfQ0KKyAgcmV0dXJuIHRyYW5zbWl0X21haWxib3g7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB0aGUgdHJhbnNtaXNzaW9uIHN0YXR1cyBvZiBhIENBTiBGcmFtZS4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUcmFuc21pdE1haWxib3g6IHRoZSBudW1iZXIgb2YgdGhlIG1haWxib3ggdGhhdCBpcyB1c2VkIGZvciB0cmFuc21pc3Npb24uDQorICAqIEByZXR2YWwgQ0FOX1R4U3RhdHVzX09rIGlmIHRoZSBDQU4gZHJpdmVyIHRyYW5zbWl0cyB0aGUgbWVzc2FnZSwgDQorICAqICAgICAgICAgQ0FOX1R4U3RhdHVzX0ZhaWxlZCBpbiBhbiBvdGhlciBjYXNlLg0KKyAgKi8NCit1aW50OF90IENBTl9UcmFuc21pdFN0YXR1cyhDQU5fVHlwZURlZiogQ0FOeCwgdWludDhfdCBUcmFuc21pdE1haWxib3gpDQorew0KKyAgdWludDMyX3Qgc3RhdGUgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DQU5fQUxMX1BFUklQSChDQU54KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX1RSQU5TTUlUTUFJTEJPWChUcmFuc21pdE1haWxib3gpKTsNCisgDQorICBzd2l0Y2ggKFRyYW5zbWl0TWFpbGJveCkNCisgIHsNCisgICAgY2FzZSAoQ0FOX1RYTUFJTEJPWF8wKTogDQorICAgICAgc3RhdGUgPSAgIENBTngtPlRTUiAmICAoQ0FOX1RTUl9SUUNQMCB8IENBTl9UU1JfVFhPSzAgfCBDQU5fVFNSX1RNRTApOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIChDQU5fVFhNQUlMQk9YXzEpOiANCisgICAgICBzdGF0ZSA9ICAgQ0FOeC0+VFNSICYgIChDQU5fVFNSX1JRQ1AxIHwgQ0FOX1RTUl9UWE9LMSB8IENBTl9UU1JfVE1FMSk7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgKENBTl9UWE1BSUxCT1hfMik6IA0KKyAgICAgIHN0YXRlID0gICBDQU54LT5UU1IgJiAgKENBTl9UU1JfUlFDUDIgfCBDQU5fVFNSX1RYT0syIHwgQ0FOX1RTUl9UTUUyKTsNCisgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICBzdGF0ZSA9IENBTl9UeFN0YXR1c19GYWlsZWQ7DQorICAgICAgYnJlYWs7DQorICB9DQorICBzd2l0Y2ggKHN0YXRlKQ0KKyAgew0KKyAgICAgIC8qIHRyYW5zbWl0IHBlbmRpbmcgICovDQorICAgIGNhc2UgKDB4MCk6IHN0YXRlID0gQ0FOX1R4U3RhdHVzX1BlbmRpbmc7DQorICAgICAgYnJlYWs7DQorICAgICAgLyogdHJhbnNtaXQgZmFpbGVkICAqLw0KKyAgICAgY2FzZSAoQ0FOX1RTUl9SUUNQMCB8IENBTl9UU1JfVE1FMCk6IHN0YXRlID0gQ0FOX1R4U3RhdHVzX0ZhaWxlZDsNCisgICAgICBicmVhazsNCisgICAgIGNhc2UgKENBTl9UU1JfUlFDUDEgfCBDQU5fVFNSX1RNRTEpOiBzdGF0ZSA9IENBTl9UeFN0YXR1c19GYWlsZWQ7DQorICAgICAgYnJlYWs7DQorICAgICBjYXNlIChDQU5fVFNSX1JRQ1AyIHwgQ0FOX1RTUl9UTUUyKTogc3RhdGUgPSBDQU5fVHhTdGF0dXNfRmFpbGVkOw0KKyAgICAgIGJyZWFrOw0KKyAgICAgIC8qIHRyYW5zbWl0IHN1Y2NlZWRlZCAgKi8NCisgICAgY2FzZSAoQ0FOX1RTUl9SUUNQMCB8IENBTl9UU1JfVFhPSzAgfCBDQU5fVFNSX1RNRTApOnN0YXRlID0gQ0FOX1R4U3RhdHVzX09rOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIChDQU5fVFNSX1JRQ1AxIHwgQ0FOX1RTUl9UWE9LMSB8IENBTl9UU1JfVE1FMSk6c3RhdGUgPSBDQU5fVHhTdGF0dXNfT2s7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgKENBTl9UU1JfUlFDUDIgfCBDQU5fVFNSX1RYT0syIHwgQ0FOX1RTUl9UTUUyKTpzdGF0ZSA9IENBTl9UeFN0YXR1c19PazsNCisgICAgICBicmVhazsNCisgICAgZGVmYXVsdDogc3RhdGUgPSBDQU5fVHhTdGF0dXNfRmFpbGVkOw0KKyAgICAgIGJyZWFrOw0KKyAgfQ0KKyAgcmV0dXJuICh1aW50OF90KSBzdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2FuY2VscyBhIHRyYW5zbWl0IHJlcXVlc3QuDQorICAqIEBwYXJhbSAgQ0FOeDogd2hlcmUgeCBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgQ0FOIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTWFpbGJveDogTWFpbGJveCBudW1iZXIuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENBTl9DYW5jZWxUcmFuc21pdChDQU5fVHlwZURlZiogQ0FOeCwgdWludDhfdCBNYWlsYm94KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0FMTF9QRVJJUEgoQ0FOeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9UUkFOU01JVE1BSUxCT1goTWFpbGJveCkpOw0KKyAgLyogYWJvcnQgdHJhbnNtaXNzaW9uICovDQorICBzd2l0Y2ggKE1haWxib3gpDQorICB7DQorICAgIGNhc2UgKENBTl9UWE1BSUxCT1hfMCk6IENBTngtPlRTUiB8PSBDQU5fVFNSX0FCUlEwOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIChDQU5fVFhNQUlMQk9YXzEpOiBDQU54LT5UU1IgfD0gQ0FOX1RTUl9BQlJRMTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAoQ0FOX1RYTUFJTEJPWF8yKTogQ0FOeC0+VFNSIHw9IENBTl9UU1JfQUJSUTI7DQorICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQorICAgICAgYnJlYWs7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisNCisvKiogQGRlZmdyb3VwIENBTl9Hcm91cDMgQ0FOIEZyYW1lcyBSZWNlcHRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgICBDQU4gRnJhbWVzIFJlY2VwdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgQ0FOIEZyYW1lcyBSZWNlcHRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byANCisgICAtICBSZWNlaXZlIGEgY29ycmVjdCBDQU4gZnJhbWUNCisgICAtICBSZWxlYXNlIGEgc3BlY2lmaWVkIHJlY2VpdmUgRklGTyAoMiBGSUZPcyBhcmUgYXZhaWxhYmxlKQ0KKyAgIC0gIFJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBwZW5kaW5nIHJlY2VpdmVkIENBTiBmcmFtZXMNCisgICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgUmVjZWl2ZXMgYSBjb3JyZWN0IENBTiBmcmFtZS4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBGSUZPTnVtYmVyOiBSZWNlaXZlIEZJRk8gbnVtYmVyLCBDQU5fRklGTzAgb3IgQ0FOX0ZJRk8xLg0KKyAgKiBAcGFyYW0gIFJ4TWVzc2FnZTogcG9pbnRlciB0byBhIHN0cnVjdHVyZSByZWNlaXZlIGZyYW1lIHdoaWNoIGNvbnRhaW5zIENBTiBJZCwNCisgICogICAgICAgICBDQU4gRExDLCBDQU4gZGF0YSBhbmQgRk1JIG51bWJlci4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQ0FOX1JlY2VpdmUoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQ4X3QgRklGT051bWJlciwgQ2FuUnhNc2cqIFJ4TWVzc2FnZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fRklGTyhGSUZPTnVtYmVyKSk7DQorICAvKiBHZXQgdGhlIElkICovDQorICBSeE1lc3NhZ2UtPklERSA9ICh1aW50OF90KTB4MDQgJiBDQU54LT5zRklGT01haWxCb3hbRklGT051bWJlcl0uUklSOw0KKyAgaWYgKFJ4TWVzc2FnZS0+SURFID09IENBTl9JZF9TdGFuZGFyZCkNCisgIHsNCisgICAgUnhNZXNzYWdlLT5TdGRJZCA9ICh1aW50MzJfdCkweDAwMDAwN0ZGICYgKENBTngtPnNGSUZPTWFpbEJveFtGSUZPTnVtYmVyXS5SSVIgPj4gMjEpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBSeE1lc3NhZ2UtPkV4dElkID0gKHVpbnQzMl90KTB4MUZGRkZGRkYgJiAoQ0FOeC0+c0ZJRk9NYWlsQm94W0ZJRk9OdW1iZXJdLlJJUiA+PiAzKTsNCisgIH0NCisgIA0KKyAgUnhNZXNzYWdlLT5SVFIgPSAodWludDhfdCkweDAyICYgQ0FOeC0+c0ZJRk9NYWlsQm94W0ZJRk9OdW1iZXJdLlJJUjsNCisgIC8qIEdldCB0aGUgRExDICovDQorICBSeE1lc3NhZ2UtPkRMQyA9ICh1aW50OF90KTB4MEYgJiBDQU54LT5zRklGT01haWxCb3hbRklGT051bWJlcl0uUkRUUjsNCisgIC8qIEdldCB0aGUgRk1JICovDQorICBSeE1lc3NhZ2UtPkZNSSA9ICh1aW50OF90KTB4RkYgJiAoQ0FOeC0+c0ZJRk9NYWlsQm94W0ZJRk9OdW1iZXJdLlJEVFIgPj4gOCk7DQorICAvKiBHZXQgdGhlIGRhdGEgZmllbGQgKi8NCisgIFJ4TWVzc2FnZS0+RGF0YVswXSA9ICh1aW50OF90KTB4RkYgJiBDQU54LT5zRklGT01haWxCb3hbRklGT051bWJlcl0uUkRMUjsNCisgIFJ4TWVzc2FnZS0+RGF0YVsxXSA9ICh1aW50OF90KTB4RkYgJiAoQ0FOeC0+c0ZJRk9NYWlsQm94W0ZJRk9OdW1iZXJdLlJETFIgPj4gOCk7DQorICBSeE1lc3NhZ2UtPkRhdGFbMl0gPSAodWludDhfdCkweEZGICYgKENBTngtPnNGSUZPTWFpbEJveFtGSUZPTnVtYmVyXS5SRExSID4+IDE2KTsNCisgIFJ4TWVzc2FnZS0+RGF0YVszXSA9ICh1aW50OF90KTB4RkYgJiAoQ0FOeC0+c0ZJRk9NYWlsQm94W0ZJRk9OdW1iZXJdLlJETFIgPj4gMjQpOw0KKyAgUnhNZXNzYWdlLT5EYXRhWzRdID0gKHVpbnQ4X3QpMHhGRiAmIENBTngtPnNGSUZPTWFpbEJveFtGSUZPTnVtYmVyXS5SREhSOw0KKyAgUnhNZXNzYWdlLT5EYXRhWzVdID0gKHVpbnQ4X3QpMHhGRiAmIChDQU54LT5zRklGT01haWxCb3hbRklGT051bWJlcl0uUkRIUiA+PiA4KTsNCisgIFJ4TWVzc2FnZS0+RGF0YVs2XSA9ICh1aW50OF90KTB4RkYgJiAoQ0FOeC0+c0ZJRk9NYWlsQm94W0ZJRk9OdW1iZXJdLlJESFIgPj4gMTYpOw0KKyAgUnhNZXNzYWdlLT5EYXRhWzddID0gKHVpbnQ4X3QpMHhGRiAmIChDQU54LT5zRklGT01haWxCb3hbRklGT051bWJlcl0uUkRIUiA+PiAyNCk7DQorICAvKiBSZWxlYXNlIHRoZSBGSUZPICovDQorICAvKiBSZWxlYXNlIEZJRk8wICovDQorICBpZiAoRklGT051bWJlciA9PSBDQU5fRklGTzApDQorICB7DQorICAgIENBTngtPlJGMFIgfD0gQ0FOX1JGMFJfUkZPTTA7DQorICB9DQorICAvKiBSZWxlYXNlIEZJRk8xICovDQorICBlbHNlIC8qIEZJRk9OdW1iZXIgPT0gQ0FOX0ZJRk8xICovDQorICB7DQorICAgIENBTngtPlJGMVIgfD0gQ0FOX1JGMVJfUkZPTTE7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlbGVhc2VzIHRoZSBzcGVjaWZpZWQgcmVjZWl2ZSBGSUZPLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEZJRk9OdW1iZXI6IEZJRk8gdG8gcmVsZWFzZSwgQ0FOX0ZJRk8wIG9yIENBTl9GSUZPMS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQ0FOX0ZJRk9SZWxlYXNlKENBTl9UeXBlRGVmKiBDQU54LCB1aW50OF90IEZJRk9OdW1iZXIpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DQU5fQUxMX1BFUklQSChDQU54KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0ZJRk8oRklGT051bWJlcikpOw0KKyAgLyogUmVsZWFzZSBGSUZPMCAqLw0KKyAgaWYgKEZJRk9OdW1iZXIgPT0gQ0FOX0ZJRk8wKQ0KKyAgew0KKyAgICBDQU54LT5SRjBSIHw9IENBTl9SRjBSX1JGT00wOw0KKyAgfQ0KKyAgLyogUmVsZWFzZSBGSUZPMSAqLw0KKyAgZWxzZSAvKiBGSUZPTnVtYmVyID09IENBTl9GSUZPMSAqLw0KKyAgew0KKyAgICBDQU54LT5SRjFSIHw9IENBTl9SRjFSX1JGT00xOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGVuZGluZyByZWNlaXZlZCBtZXNzYWdlcy4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBGSUZPTnVtYmVyOiBSZWNlaXZlIEZJRk8gbnVtYmVyLCBDQU5fRklGTzAgb3IgQ0FOX0ZJRk8xLg0KKyAgKiBAcmV0dmFsIE5iTWVzc2FnZSA6IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgcGVuZGluZyBtZXNzYWdlLg0KKyAgKi8NCit1aW50OF90IENBTl9NZXNzYWdlUGVuZGluZyhDQU5fVHlwZURlZiogQ0FOeCwgdWludDhfdCBGSUZPTnVtYmVyKQ0KK3sNCisgIHVpbnQ4X3QgbWVzc2FnZV9wZW5kaW5nPTA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fRklGTyhGSUZPTnVtYmVyKSk7DQorICBpZiAoRklGT051bWJlciA9PSBDQU5fRklGTzApDQorICB7DQorICAgIG1lc3NhZ2VfcGVuZGluZyA9ICh1aW50OF90KShDQU54LT5SRjBSJih1aW50MzJfdCkweDAzKTsNCisgIH0NCisgIGVsc2UgaWYgKEZJRk9OdW1iZXIgPT0gQ0FOX0ZJRk8xKQ0KKyAgew0KKyAgICBtZXNzYWdlX3BlbmRpbmcgPSAodWludDhfdCkoQ0FOeC0+UkYxUiYodWludDMyX3QpMHgwMyk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIG1lc3NhZ2VfcGVuZGluZyA9IDA7DQorICB9DQorICByZXR1cm4gbWVzc2FnZV9wZW5kaW5nOw0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorDQorLyoqIEBkZWZncm91cCBDQU5fR3JvdXA0IENBTiBPcGVyYXRpb24gbW9kZXMgZnVuY3Rpb25zDQorICogIEBicmllZiAgICBDQU4gT3BlcmF0aW9uIG1vZGVzIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICBDQU4gT3BlcmF0aW9uIG1vZGVzIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gc2VsZWN0IHRoZSBDQU4gT3BlcmF0aW9uIG1vZGVzDQorICAtIHNsZWVwIG1vZGUNCisgIC0gbm9ybWFsIG1vZGUgDQorICAtIGluaXRpYWxpemF0aW9uIG1vZGUNCisgICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbGVjdHMgdGhlIENBTiBPcGVyYXRpb24gbW9kZS4NCisgICogQHBhcmFtICBDQU5fT3BlcmF0aW5nTW9kZTogQ0FOIE9wZXJhdGluZyBNb2RlLg0KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgQHJlZiBDQU5fT3BlcmF0aW5nTW9kZV9UeXBlRGVmIGVudW1lcmF0aW9uLg0KKyAgKiBAcmV0dmFsIHN0YXR1cyBvZiB0aGUgcmVxdWVzdGVkIG1vZGUgd2hpY2ggY2FuIGJlIA0KKyAgKiAgICAgICAgIC0gQ0FOX01vZGVTdGF0dXNfRmFpbGVkOiAgQ0FOIGZhaWxlZCBlbnRlcmluZyB0aGUgc3BlY2lmaWMgbW9kZSANCisgICogICAgICAgICAtIENBTl9Nb2RlU3RhdHVzX1N1Y2Nlc3M6IENBTiBTdWNjZWVkIGVudGVyaW5nIHRoZSBzcGVjaWZpYyBtb2RlIA0KKyAgKi8NCit1aW50OF90IENBTl9PcGVyYXRpbmdNb2RlUmVxdWVzdChDQU5fVHlwZURlZiogQ0FOeCwgdWludDhfdCBDQU5fT3BlcmF0aW5nTW9kZSkNCit7DQorICB1aW50OF90IHN0YXR1cyA9IENBTl9Nb2RlU3RhdHVzX0ZhaWxlZDsNCisgIA0KKyAgLyogVGltZW91dCBmb3IgSU5BSyBvciBhbHNvIGZvciBTTEFLIGJpdHMqLw0KKyAgdWludDMyX3QgdGltZW91dCA9IElOQUtfVElNRU9VVDsgDQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fT1BFUkFUSU5HX01PREUoQ0FOX09wZXJhdGluZ01vZGUpKTsNCisNCisgIGlmIChDQU5fT3BlcmF0aW5nTW9kZSA9PSBDQU5fT3BlcmF0aW5nTW9kZV9Jbml0aWFsaXphdGlvbikNCisgIHsNCisgICAgLyogUmVxdWVzdCBpbml0aWFsaXNhdGlvbiAqLw0KKyAgICBDQU54LT5NQ1IgPSAodWludDMyX3QpKChDQU54LT5NQ1IgJiAodWludDMyX3QpKH4odWludDMyX3QpQ0FOX01DUl9TTEVFUCkpIHwgQ0FOX01DUl9JTlJRKTsNCisNCisgICAgLyogV2FpdCB0aGUgYWNrbm93bGVkZ2UgKi8NCisgICAgd2hpbGUgKCgoQ0FOeC0+TVNSICYgQ0FOX01PREVfTUFTSykgIT0gQ0FOX01TUl9JTkFLKSAmJiAodGltZW91dCAhPSAwKSkNCisgICAgew0KKyAgICAgIHRpbWVvdXQtLTsNCisgICAgfQ0KKyAgICBpZiAoKENBTngtPk1TUiAmIENBTl9NT0RFX01BU0spICE9IENBTl9NU1JfSU5BSykNCisgICAgew0KKyAgICAgIHN0YXR1cyA9IENBTl9Nb2RlU3RhdHVzX0ZhaWxlZDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBzdGF0dXMgPSBDQU5fTW9kZVN0YXR1c19TdWNjZXNzOw0KKyAgICB9DQorICB9DQorICBlbHNlICBpZiAoQ0FOX09wZXJhdGluZ01vZGUgPT0gQ0FOX09wZXJhdGluZ01vZGVfTm9ybWFsKQ0KKyAgew0KKyAgICAvKiBSZXF1ZXN0IGxlYXZlIGluaXRpYWxpc2F0aW9uIGFuZCBzbGVlcCBtb2RlICBhbmQgZW50ZXIgTm9ybWFsIG1vZGUgKi8NCisgICAgQ0FOeC0+TUNSICY9ICh1aW50MzJfdCkofihDQU5fTUNSX1NMRUVQfENBTl9NQ1JfSU5SUSkpOw0KKw0KKyAgICAvKiBXYWl0IHRoZSBhY2tub3dsZWRnZSAqLw0KKyAgICB3aGlsZSAoKChDQU54LT5NU1IgJiBDQU5fTU9ERV9NQVNLKSAhPSAwKSAmJiAodGltZW91dCE9MCkpDQorICAgIHsNCisgICAgICB0aW1lb3V0LS07DQorICAgIH0NCisgICAgaWYgKChDQU54LT5NU1IgJiBDQU5fTU9ERV9NQVNLKSAhPSAwKQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gQ0FOX01vZGVTdGF0dXNfRmFpbGVkOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIHN0YXR1cyA9IENBTl9Nb2RlU3RhdHVzX1N1Y2Nlc3M7DQorICAgIH0NCisgIH0NCisgIGVsc2UgIGlmIChDQU5fT3BlcmF0aW5nTW9kZSA9PSBDQU5fT3BlcmF0aW5nTW9kZV9TbGVlcCkNCisgIHsNCisgICAgLyogUmVxdWVzdCBTbGVlcCBtb2RlICovDQorICAgIENBTngtPk1DUiA9ICh1aW50MzJfdCkoKENBTngtPk1DUiAmICh1aW50MzJfdCkofih1aW50MzJfdClDQU5fTUNSX0lOUlEpKSB8IENBTl9NQ1JfU0xFRVApOw0KKw0KKyAgICAvKiBXYWl0IHRoZSBhY2tub3dsZWRnZSAqLw0KKyAgICB3aGlsZSAoKChDQU54LT5NU1IgJiBDQU5fTU9ERV9NQVNLKSAhPSBDQU5fTVNSX1NMQUspICYmICh0aW1lb3V0IT0wKSkNCisgICAgew0KKyAgICAgIHRpbWVvdXQtLTsNCisgICAgfQ0KKyAgICBpZiAoKENBTngtPk1TUiAmIENBTl9NT0RFX01BU0spICE9IENBTl9NU1JfU0xBSykNCisgICAgew0KKyAgICAgIHN0YXR1cyA9IENBTl9Nb2RlU3RhdHVzX0ZhaWxlZDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBzdGF0dXMgPSBDQU5fTW9kZVN0YXR1c19TdWNjZXNzOw0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHN0YXR1cyA9IENBTl9Nb2RlU3RhdHVzX0ZhaWxlZDsNCisgIH0NCisNCisgIHJldHVybiAgKHVpbnQ4X3QpIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW50ZXJzIHRoZSBTbGVlcCAobG93IHBvd2VyKSBtb2RlLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIENBTl9TbGVlcF9PayBpZiBzbGVlcCBlbnRlcmVkLCBDQU5fU2xlZXBfRmFpbGVkIG90aGVyd2lzZS4NCisgICovDQordWludDhfdCBDQU5fU2xlZXAoQ0FOX1R5cGVEZWYqIENBTngpDQorew0KKyAgdWludDhfdCBzbGVlcHN0YXR1cyA9IENBTl9TbGVlcF9GYWlsZWQ7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0FMTF9QRVJJUEgoQ0FOeCkpOw0KKyAgICANCisgIC8qIFJlcXVlc3QgU2xlZXAgbW9kZSAqLw0KKyAgIENBTngtPk1DUiA9ICgoKENBTngtPk1DUikgJiAodWludDMyX3QpKH4odWludDMyX3QpQ0FOX01DUl9JTlJRKSkgfCBDQU5fTUNSX1NMRUVQKTsNCisgICANCisgIC8qIFNsZWVwIG1vZGUgc3RhdHVzICovDQorICBpZiAoKENBTngtPk1TUiAmIChDQU5fTVNSX1NMQUt8Q0FOX01TUl9JTkFLKSkgPT0gQ0FOX01TUl9TTEFLKQ0KKyAgew0KKyAgICAvKiBTbGVlcCBtb2RlIG5vdCBlbnRlcmVkICovDQorICAgIHNsZWVwc3RhdHVzID0gIENBTl9TbGVlcF9PazsNCisgIH0NCisgIC8qIHJldHVybiBzbGVlcCBtb2RlIHN0YXR1cyAqLw0KKyAgIHJldHVybiAodWludDhfdClzbGVlcHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgV2FrZXMgdXAgdGhlIENBTiBwZXJpcGhlcmFsIGZyb20gc2xlZXAgbW9kZSAuDQorICAqIEBwYXJhbSAgQ0FOeDogd2hlcmUgeCBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgQ0FOIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgQ0FOX1dha2VVcF9PayBpZiBzbGVlcCBtb2RlIGxlZnQsIENBTl9XYWtlVXBfRmFpbGVkIG90aGVyd2lzZS4NCisgICovDQordWludDhfdCBDQU5fV2FrZVVwKENBTl9UeXBlRGVmKiBDQU54KQ0KK3sNCisgIHVpbnQzMl90IHdhaXRfc2xhayA9IFNMQUtfVElNRU9VVDsNCisgIHVpbnQ4X3Qgd2FrZXVwc3RhdHVzID0gQ0FOX1dha2VVcF9GYWlsZWQ7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0FMTF9QRVJJUEgoQ0FOeCkpOw0KKyAgICANCisgIC8qIFdha2UgdXAgcmVxdWVzdCAqLw0KKyAgQ0FOeC0+TUNSICY9IH4odWludDMyX3QpQ0FOX01DUl9TTEVFUDsNCisgICAgDQorICAvKiBTbGVlcCBtb2RlIHN0YXR1cyAqLw0KKyAgd2hpbGUoKChDQU54LT5NU1IgJiBDQU5fTVNSX1NMQUspID09IENBTl9NU1JfU0xBSykmJih3YWl0X3NsYWshPTB4MDApKQ0KKyAgew0KKyAgIHdhaXRfc2xhay0tOw0KKyAgfQ0KKyAgaWYoKENBTngtPk1TUiAmIENBTl9NU1JfU0xBSykgIT0gQ0FOX01TUl9TTEFLKQ0KKyAgew0KKyAgIC8qIHdha2UgdXAgZG9uZSA6IFNsZWVwIG1vZGUgZXhpdGVkICovDQorICAgIHdha2V1cHN0YXR1cyA9IENBTl9XYWtlVXBfT2s7DQorICB9DQorICAvKiByZXR1cm4gd2FrZXVwIHN0YXR1cyAqLw0KKyAgcmV0dXJuICh1aW50OF90KXdha2V1cHN0YXR1czsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ0FOX0dyb3VwNSBDQU4gQnVzIEVycm9yIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgICBDQU4gQnVzIEVycm9yIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgIENBTiBCdXMgRXJyb3IgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIA0KKyAgIC0gIFJldHVybiB0aGUgQ0FOeCdzIGxhc3QgZXJyb3IgY29kZSAoTEVDKQ0KKyAgIC0gIFJldHVybiB0aGUgQ0FOeCBSZWNlaXZlIEVycm9yIENvdW50ZXIgKFJFQykNCisgICAtICBSZXR1cm4gdGhlIExTQiBvZiB0aGUgOS1iaXQgQ0FOeCBUcmFuc21pdCBFcnJvciBDb3VudGVyKFRFQykuDQorICAgDQorICAgQG5vdGUgSWYgVEVDIGlzIGdyZWF0ZXIgdGhhbiAyNTUsIFRoZSBDQU4gaXMgaW4gYnVzLW9mZiBzdGF0ZS4NCisgICBAbm90ZSBpZiBSRUMgb3IgVEVDIGFyZSBncmVhdGVyIHRoYW4gOTYsIGFuIEVycm9yIHdhcm5pbmcgZmxhZyBvY2N1cnMuDQorICAgQG5vdGUgaWYgUkVDIG9yIFRFQyBhcmUgZ3JlYXRlciB0aGFuIDEyNywgYW4gRXJyb3IgUGFzc2l2ZSBGbGFnIG9jY3Vycy4NCisgICAgICAgICAgICAgICAgICAgICAgICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBDQU54J3MgbGFzdCBlcnJvciBjb2RlIChMRUMpLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIEVycm9yIGNvZGU6IA0KKyAgKiAgICAgICAgICAtIENBTl9FUlJPUkNPREVfTm9FcnI6IE5vIEVycm9yICANCisgICogICAgICAgICAgLSBDQU5fRVJST1JDT0RFX1N0dWZmRXJyOiBTdHVmZiBFcnJvcg0KKyAgKiAgICAgICAgICAtIENBTl9FUlJPUkNPREVfRm9ybUVycjogRm9ybSBFcnJvcg0KKyAgKiAgICAgICAgICAtIENBTl9FUlJPUkNPREVfQUNLRXJyIDogQWNrbm93bGVkZ21lbnQgRXJyb3INCisgICogICAgICAgICAgLSBDQU5fRVJST1JDT0RFX0JpdFJlY2Vzc2l2ZUVycjogQml0IFJlY2Vzc2l2ZSBFcnJvcg0KKyAgKiAgICAgICAgICAtIENBTl9FUlJPUkNPREVfQml0RG9taW5hbnRFcnI6IEJpdCBEb21pbmFudCBFcnJvcg0KKyAgKiAgICAgICAgICAtIENBTl9FUlJPUkNPREVfQ1JDRXJyOiBDUkMgRXJyb3INCisgICogICAgICAgICAgLSBDQU5fRVJST1JDT0RFX1NvZnR3YXJlU2V0RXJyOiBTb2Z0d2FyZSBTZXQgRXJyb3IgIA0KKyAgKi8NCit1aW50OF90IENBTl9HZXRMYXN0RXJyb3JDb2RlKENBTl9UeXBlRGVmKiBDQU54KQ0KK3sNCisgIHVpbnQ4X3QgZXJyb3Jjb2RlPTA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0FMTF9QRVJJUEgoQ0FOeCkpOw0KKyAgDQorICAvKiBHZXQgdGhlIGVycm9yIGNvZGUqLw0KKyAgZXJyb3Jjb2RlID0gKCgodWludDhfdClDQU54LT5FU1IpICYgKHVpbnQ4X3QpQ0FOX0VTUl9MRUMpOw0KKyAgDQorICAvKiBSZXR1cm4gdGhlIGVycm9yIGNvZGUqLw0KKyAgcmV0dXJuIGVycm9yY29kZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgQ0FOeCBSZWNlaXZlIEVycm9yIENvdW50ZXIgKFJFQykuDQorICAqIEBub3RlICAgSW4gY2FzZSBvZiBhbiBlcnJvciBkdXJpbmcgcmVjZXB0aW9uLCB0aGlzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgDQorICAqICAgICAgICAgYnkgMSBvciBieSA4IGRlcGVuZGluZyBvbiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIGRlZmluZWQgYnkgdGhlIENBTiANCisgICogICAgICAgICBzdGFuZGFyZC4gQWZ0ZXIgZXZlcnkgc3VjY2Vzc2Z1bCByZWNlcHRpb24sIHRoZSBjb3VudGVyIGlzIA0KKyAgKiAgICAgICAgIGRlY3JlbWVudGVkIGJ5IDEgb3IgcmVzZXQgdG8gMTIwIGlmIGl0cyB2YWx1ZSB3YXMgaGlnaGVyIHRoYW4gMTI4LiANCisgICogICAgICAgICBXaGVuIHRoZSBjb3VudGVyIHZhbHVlIGV4Y2VlZHMgMTI3LCB0aGUgQ0FOIGNvbnRyb2xsZXIgZW50ZXJzIHRoZSANCisgICogICAgICAgICBlcnJvciBwYXNzaXZlIHN0YXRlLiAgDQorICAqIEBwYXJhbSAgQ0FOeDogd2hlcmUgeCBjYW4gYmUgMSBvciAyIHRvIHRvIHNlbGVjdCB0aGUgQ0FOIHBlcmlwaGVyYWwuICANCisgICogQHJldHZhbCBDQU4gUmVjZWl2ZSBFcnJvciBDb3VudGVyLiANCisgICovDQordWludDhfdCBDQU5fR2V0UmVjZWl2ZUVycm9yQ291bnRlcihDQU5fVHlwZURlZiogQ0FOeCkNCit7DQorICB1aW50OF90IGNvdW50ZXI9MDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DQU5fQUxMX1BFUklQSChDQU54KSk7DQorICANCisgIC8qIEdldCB0aGUgUmVjZWl2ZSBFcnJvciBDb3VudGVyKi8NCisgIGNvdW50ZXIgPSAodWludDhfdCkoKENBTngtPkVTUiAmIENBTl9FU1JfUkVDKT4+IDI0KTsNCisgIA0KKyAgLyogUmV0dXJuIHRoZSBSZWNlaXZlIEVycm9yIENvdW50ZXIqLw0KKyAgcmV0dXJuIGNvdW50ZXI7DQorfQ0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIExTQiBvZiB0aGUgOS1iaXQgQ0FOeCBUcmFuc21pdCBFcnJvciBDb3VudGVyKFRFQykuDQorICAqIEBwYXJhbSAgQ0FOeDogd2hlcmUgeCBjYW4gYmUgMSBvciAyIHRvIHRvIHNlbGVjdCB0aGUgQ0FOIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgTFNCIG9mIHRoZSA5LWJpdCBDQU4gVHJhbnNtaXQgRXJyb3IgQ291bnRlci4gDQorICAqLw0KK3VpbnQ4X3QgQ0FOX0dldExTQlRyYW5zbWl0RXJyb3JDb3VudGVyKENBTl9UeXBlRGVmKiBDQU54KQ0KK3sNCisgIHVpbnQ4X3QgY291bnRlcj0wOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIA0KKyAgLyogR2V0IHRoZSBMU0Igb2YgdGhlIDktYml0IENBTnggVHJhbnNtaXQgRXJyb3IgQ291bnRlcihURUMpICovDQorICBjb3VudGVyID0gKHVpbnQ4X3QpKChDQU54LT5FU1IgJiBDQU5fRVNSX1RFQyk+PiAxNik7DQorICANCisgIC8qIFJldHVybiB0aGUgTFNCIG9mIHRoZSA5LWJpdCBDQU54IFRyYW5zbWl0IEVycm9yIENvdW50ZXIoVEVDKSAqLw0KKyAgcmV0dXJuIGNvdW50ZXI7DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENBTl9Hcm91cDYgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIENBTiBJbnRlcnJ1cHRzIGFuZCANCisgIHRvIGdldCB0aGUgc3RhdHVzIGFuZCBjbGVhciBmbGFncyBhbmQgSW50ZXJydXB0cyBwZW5kaW5nIGJpdHMuDQorICANCisgIFRoZSBDQU4gcHJvdmlkZXMgMTQgSW50ZXJydXB0cyBzb3VyY2VzIGFuZCAxNSBGbGFnczoNCisNCisgID09PT09PT09PT09PT09PSAgDQorICAgICAgRmxhZ3MgOg0KKyAgPT09PT09PT09PT09PT09DQorICBUaGUgMTUgZmxhZ3MgY2FuIGJlIGRpdmlkZWQgb24gNCBncm91cHM6IA0KKw0KKyAgIEEuIFRyYW5zbWl0IEZsYWdzDQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgQ0FOX0ZMQUdfUlFDUDAsIA0KKyAgICAgICAgQ0FOX0ZMQUdfUlFDUDEsIA0KKyAgICAgICAgQ0FOX0ZMQUdfUlFDUDIgIDogUmVxdWVzdCBjb21wbGV0ZWQgTWFpbEJveGVzIDAsIDEgYW5kIDIgIEZsYWdzDQorICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgd2hlbiB3aGVuIHRoZSBsYXN0IHJlcXVlc3QgKHRyYW5zbWl0IG9yIGFib3J0KSBoYXMgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVuIHBlcmZvcm1lZC4gDQorDQorICBCLiBSZWNlaXZlIEZsYWdzDQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyAgICAgICAgQ0FOX0ZMQUdfRk1QMCwNCisgICAgICAgIENBTl9GTEFHX0ZNUDEgICA6IEZJRk8gMCBhbmQgMSBNZXNzYWdlIFBlbmRpbmcgRmxhZ3MgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gc2lnbmFsIHRoYXQgbWVzc2FnZXMgYXJlIHBlbmRpbmcgaW4gdGhlIHJlY2VpdmUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBGSUZPLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlc2UgRmxhZ3MgYXJlIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4gDQorDQorICAgICAgICBDQU5fRkxBR19GRjAsDQorICAgICAgICBDQU5fRkxBR19GRjEgICAgOiBGSUZPIDAgYW5kIDEgRnVsbCBGbGFncw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gdGhyZWUgbWVzc2FnZXMgYXJlIHN0b3JlZCBpbiB0aGUgc2VsZWN0ZWQgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBGSUZPLiAgICAgICAgICAgICAgICAgICAgICAgIA0KKw0KKyAgICAgICAgQ0FOX0ZMQUdfRk9WMCAgICAgICAgICAgICAgDQorICAgICAgICBDQU5fRkxBR19GT1YxICAgOiBGSUZPIDAgYW5kIDEgT3ZlcnJ1biBGbGFncw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHdoZW4gYSBuZXcgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBhbmQgcGFzc2VkIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZpbHRlciB3aGlsZSB0aGUgRklGTyB3YXMgZnVsbC4gICAgICAgICANCisNCisgIEMuIE9wZXJhdGluZyBNb2RlIEZsYWdzDQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSANCisgICAgICAgIENBTl9GTEFHX1dLVSAgICA6IFdha2UgdXAgRmxhZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRvIHNpZ25hbCB0aGF0IGEgU09GIGJpdCBoYXMgYmVlbiBkZXRlY3RlZCB3aGlsZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBDQU4gaGFyZHdhcmUgd2FzIGluIFNsZWVwIG1vZGUuIA0KKyAgICAgICAgDQorICAgICAgICBDQU5fRkxBR19TTEFLICAgOiBTbGVlcCBhY2tub3dsZWRnZSBGbGFnDQorICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gc2lnbmFsIHRoYXQgdGhlIENBTiBoYXMgZW50ZXJlZCBTbGVlcCBNb2RlLiANCisgICAgDQorICBELiBFcnJvciBGbGFncw0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gDQorICAgICAgICBDQU5fRkxBR19FV0cgICAgOiBFcnJvciBXYXJuaW5nIEZsYWcNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB3aGVuIHRoZSB3YXJuaW5nIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQgKFJlY2VpdmUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBDb3VudGVyIG9yIFRyYW5zbWl0IEVycm9yIENvdW50ZXIgZ3JlYXRlciB0aGFuIDk2KS4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgIENBTl9GTEFHX0VQViAgICA6IEVycm9yIFBhc3NpdmUgRmxhZw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHdoZW4gdGhlIEVycm9yIFBhc3NpdmUgbGltaXQgaGFzIGJlZW4gcmVhY2hlZCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIChSZWNlaXZlIEVycm9yIENvdW50ZXIgb3IgVHJhbnNtaXQgRXJyb3IgQ291bnRlciANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiAxMjcpLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBGbGFnIGlzIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgQ0FOX0ZMQUdfQk9GICAgIDogQnVzLU9mZiBGbGFnDQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgd2hlbiBDQU4gZW50ZXJzIHRoZSBidXMtb2ZmIHN0YXRlLiBUaGUgYnVzLW9mZiANCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIGlzIGVudGVyZWQgb24gVEVDIG92ZXJmbG93LCBncmVhdGVyIHRoYW4gMjU1Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBGbGFnIGlzIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgQ0FOX0ZMQUdfTEVDICAgIDogTGFzdCBlcnJvciBjb2RlIEZsYWcNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBJZiBhIG1lc3NhZ2UgaGFzIGJlZW4gdHJhbnNmZXJyZWQgKHJlY2VwdGlvbiBvcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uKSB3aXRoIGVycm9yLCBhbmQgdGhlIGVycm9yIGNvZGUgaXMgaG9sZC4gICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICA9PT09PT09PT09PT09PT0gIA0KKyAgIEludGVycnVwdHMgOg0KKyAgPT09PT09PT09PT09PT09DQorICBUaGUgMTQgaW50ZXJydXB0cyBjYW4gYmUgZGl2aWRlZCBvbiA0IGdyb3VwczogDQorICANCisgICBBLiBUcmFuc21pdCBpbnRlcnJ1cHQNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgDQorICAgICAgICAgIENBTl9JVF9UTUUgICA6ICBUcmFuc21pdCBtYWlsYm94IGVtcHR5IEludGVycnVwdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5hYmxlZCwgdGhpcyBpbnRlcnJ1cHQgc291cmNlIGlzIHBlbmRpbmcgd2hlbiANCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIHRyYW5zbWl0IHJlcXVlc3QgYXJlIHBlbmRpbmcgZm9yIFR4IG1haWxib3hlcy4gICAgICANCisNCisgICBCLiBSZWNlaXZlIEludGVycnVwdHMNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgIA0KKyAgICAgICAgQ0FOX0lUX0ZNUDAsDQorICAgICAgICBDQU5fSVRfRk1QMSAgICA6ICBGSUZPIDAgYW5kIEZJRk8xIG1lc3NhZ2UgcGVuZGluZyBJbnRlcnJ1cHRzDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbmFibGVkLCB0aGVzZSBpbnRlcnJ1cHQgc291cmNlcyBhcmUgcGVuZGluZyB3aGVuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMgYXJlIHBlbmRpbmcgaW4gdGhlIHJlY2VpdmUgRklGTy4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBwZW5kaW5nIGJpdHMgYXJlIGNsZWFyZWQgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgICAgICAgICANCisgICAgICAgIENBTl9JVF9GRjAsICAgICAgICAgICAgICANCisgICAgICAgIENBTl9JVF9GRjEgICAgIDogIEZJRk8gMCBhbmQgRklGTzEgZnVsbCBJbnRlcnJ1cHRzDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbmFibGVkLCB0aGVzZSBpbnRlcnJ1cHQgc291cmNlcyBhcmUgcGVuZGluZyB3aGVuDQorICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlZSBtZXNzYWdlcyBhcmUgc3RvcmVkIGluIHRoZSBzZWxlY3RlZCBGSUZPLg0KKyAgICAgICAgDQorICAgICAgICBDQU5fSVRfRk9WMCwgICAgICAgIA0KKyAgICAgICAgQ0FOX0lUX0ZPVjEgICAgOiAgRklGTyAwIGFuZCBGSUZPMSBvdmVycnVuIEludGVycnVwdHMgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5hYmxlZCwgdGhlc2UgaW50ZXJydXB0IHNvdXJjZXMgYXJlIHBlbmRpbmcgd2hlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBuZXcgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBhbmQgcGFzc2VkIHRoZSBmaWx0ZXINCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRoZSBGSUZPIHdhcyBmdWxsLg0KKw0KKyAgIEMuIE9wZXJhdGluZyBNb2RlIEludGVycnVwdHMNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgDQorICAgICAgICBDQU5fSVRfV0tVICAgICA6ICBXYWtlLXVwIEludGVycnVwdA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5hYmxlZCwgdGhpcyBpbnRlcnJ1cHQgc291cmNlIGlzIHBlbmRpbmcgd2hlbiANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGEgU09GIGJpdCBoYXMgYmVlbiBkZXRlY3RlZCB3aGlsZSB0aGUgQ0FOIGhhcmR3YXJlIHdhcyANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFNsZWVwIG1vZGUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgQ0FOX0lUX1NMSyAgICAgOiAgU2xlZXAgYWNrbm93bGVkZ2UgSW50ZXJydXB0DQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbmFibGVkLCB0aGlzIGludGVycnVwdCBzb3VyY2UgaXMgcGVuZGluZyB3aGVuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIENBTiBoYXMgZW50ZXJlZCBTbGVlcCBNb2RlLiAgICAgICANCisNCisgICBELiBFcnJvciBJbnRlcnJ1cHRzIA0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICANCisgICAgICAgIENBTl9JVF9FV0cgICAgIDogIEVycm9yIHdhcm5pbmcgSW50ZXJydXB0IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5hYmxlZCwgdGhpcyBpbnRlcnJ1cHQgc291cmNlIGlzIHBlbmRpbmcgd2hlbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHdhcm5pbmcgbGltaXQgaGFzIGJlZW4gcmVhY2hlZCAoUmVjZWl2ZSBFcnJvciANCisgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgb3IgVHJhbnNtaXQgRXJyb3IgQ291bnRlcj05NikuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgIENBTl9JVF9FUFYgICAgIDogIEVycm9yIHBhc3NpdmUgSW50ZXJydXB0ICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVuYWJsZWQsIHRoaXMgaW50ZXJydXB0IHNvdXJjZSBpcyBwZW5kaW5nIHdoZW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBFcnJvciBQYXNzaXZlIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQgKFJlY2VpdmUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBDb3VudGVyIG9yIFRyYW5zbWl0IEVycm9yIENvdW50ZXI+MTI3KS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgQ0FOX0lUX0JPRiAgICAgOiAgQnVzLW9mZiBJbnRlcnJ1cHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVuYWJsZWQsIHRoaXMgaW50ZXJydXB0IHNvdXJjZSBpcyBwZW5kaW5nIHdoZW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIENBTiBlbnRlcnMgdGhlIGJ1cy1vZmYgc3RhdGUuIFRoZSBidXMtb2ZmIHN0YXRlIGlzIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXJlZCBvbiBURUMgb3ZlcmZsb3csIGdyZWF0ZXIgdGhhbiAyNTUuDQorICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgIENBTl9JVF9MRUMgICAgIDogIExhc3QgZXJyb3IgY29kZSBJbnRlcnJ1cHQgICAgICAgIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW5hYmxlZCwgdGhpcyBpbnRlcnJ1cHQgc291cmNlIGlzIHBlbmRpbmcgIHdoZW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIGEgbWVzc2FnZSBoYXMgYmVlbiB0cmFuc2ZlcnJlZCAocmVjZXB0aW9uIG9yDQorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24pIHdpdGggZXJyb3IsIGFuZCB0aGUgZXJyb3IgY29kZSBpcyBob2xkLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICBDQU5fSVRfRVJSICAgICA6ICBFcnJvciBJbnRlcnJ1cHQNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVuYWJsZWQsIHRoaXMgaW50ZXJydXB0IHNvdXJjZSBpcyBwZW5kaW5nIHdoZW4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBlcnJvciBjb25kaXRpb24gaXMgcGVuZGluZy4gICAgICANCisgICAgICAgICAgICAgICAgICAgICAgDQorDQorICBNYW5hZ2luZyB0aGUgQ0FOIGNvbnRyb2xsZXIgZXZlbnRzIDoNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSANCisgIFRoZSB1c2VyIHNob3VsZCBpZGVudGlmeSB3aGljaCBtb2RlIHdpbGwgYmUgdXNlZCBpbiBoaXMgYXBwbGljYXRpb24gdG8gbWFuYWdlIA0KKyAgdGhlIENBTiBjb250cm9sbGVyIGV2ZW50czogUG9sbGluZyBtb2RlIG9yIEludGVycnVwdCBtb2RlLg0KKyAgDQorICAxLiAgSW4gdGhlIFBvbGxpbmcgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAtIENBTl9HZXRGbGFnU3RhdHVzKCkgOiB0byBjaGVjayBpZiBmbGFncyBldmVudHMgb2NjdXIuIA0KKyAgICAgIC0gQ0FOX0NsZWFyRmxhZygpICAgICA6IHRvIGNsZWFyIHRoZSBmbGFncyBldmVudHMuDQorICANCisNCisgIA0KKyAgMi4gIEluIHRoZSBJbnRlcnJ1cHQgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAtIENBTl9JVENvbmZpZygpICAgICAgIDogdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGludGVycnVwdCBzb3VyY2UuDQorICAgICAgLSBDQU5fR2V0SVRTdGF0dXMoKSAgICA6IHRvIGNoZWNrIGlmIEludGVycnVwdCBvY2N1cnMuDQorICAgICAgLSBDQU5fQ2xlYXJJVFBlbmRpbmdCaXQoKSA6IHRvIGNsZWFyIHRoZSBJbnRlcnJ1cHQgcGVuZGluZyBCaXQgKGNvcnJlc3BvbmRpbmcgRmxhZykuDQorICAgICAgQG5vdGUgIFRoaXMgZnVuY3Rpb24gaGFzIG5vIGltcGFjdCBvbiBDQU5fSVRfRk1QMCBhbmQgQ0FOX0lUX0ZNUDEgSW50ZXJydXB0cyANCisgICAgICAgICAgICAgcGVuZGluZyBiaXRzIHNpbmNlIHRoZXJlIGFyZSBjbGVhcmVkIG9ubHkgYnkgaGFyZHdhcmUuIA0KKyAgDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLyANCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgQ0FOeCBpbnRlcnJ1cHRzLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIENBTl9JVDogc3BlY2lmaWVzIHRoZSBDQU4gaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiANCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9UTUU6IFRyYW5zbWl0IG1haWxib3ggZW1wdHkgSW50ZXJydXB0IA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0ZNUDA6IEZJRk8gMCBtZXNzYWdlIHBlbmRpbmcgSW50ZXJydXB0IA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0ZGMDogRklGTyAwIGZ1bGwgSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRk9WMDogRklGTyAwIG92ZXJydW4gSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRk1QMTogRklGTyAxIG1lc3NhZ2UgcGVuZGluZyBJbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRkYxOiBGSUZPIDEgZnVsbCBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9GT1YxOiBGSUZPIDEgb3ZlcnJ1biBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9XS1U6IFdha2UtdXAgSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfU0xLOiBTbGVlcCBhY2tub3dsZWRnZSBJbnRlcnJ1cHQgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0VXRzogRXJyb3Igd2FybmluZyBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9FUFY6IEVycm9yIHBhc3NpdmUgSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfQk9GOiBCdXMtb2ZmIEludGVycnVwdCAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfTEVDOiBMYXN0IGVycm9yIGNvZGUgSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRVJSOiBFcnJvciBJbnRlcnJ1cHQNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBDQU4gaW50ZXJydXB0cy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQ0FOX0lUQ29uZmlnKENBTl9UeXBlRGVmKiBDQU54LCB1aW50MzJfdCBDQU5fSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fSVQoQ0FOX0lUKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQ0FOeCBpbnRlcnJ1cHQgKi8NCisgICAgQ0FOeC0+SUVSIHw9IENBTl9JVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQ0FOeCBpbnRlcnJ1cHQgKi8NCisgICAgQ0FOeC0+SUVSICY9IH5DQU5fSVQ7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgQ0FOIGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBDQU5fRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfUlFDUDA6IFJlcXVlc3QgTWFpbEJveDAgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfUlFDUDE6IFJlcXVlc3QgTWFpbEJveDEgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfUlFDUDI6IFJlcXVlc3QgTWFpbEJveDIgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfRk1QMDogRklGTyAwIE1lc3NhZ2UgUGVuZGluZyBGbGFnICAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19GRjA6IEZJRk8gMCBGdWxsIEZsYWcgICAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19GT1YwOiBGSUZPIDAgT3ZlcnJ1biBGbGFnIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfRk1QMTogRklGTyAxIE1lc3NhZ2UgUGVuZGluZyBGbGFnICAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19GRjE6IEZJRk8gMSBGdWxsIEZsYWcgICAgICAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfRk9WMTogRklGTyAxIE92ZXJydW4gRmxhZyAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19XS1U6IFdha2UgdXAgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfU0xBSzogU2xlZXAgYWNrbm93bGVkZ2UgRmxhZyANCisgICogICAgICAgICAgICBAYXJnIENBTl9GTEFHX0VXRzogRXJyb3IgV2FybmluZyBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19FUFY6IEVycm9yIFBhc3NpdmUgRmxhZyAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19CT0Y6IEJ1cy1PZmYgRmxhZyAgICANCisgICogICAgICAgICAgICBAYXJnIENBTl9GTEFHX0xFQzogTGFzdCBlcnJvciBjb2RlIEZsYWcgICAgICANCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIENBTl9GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIENBTl9HZXRGbGFnU3RhdHVzKENBTl9UeXBlRGVmKiBDQU54LCB1aW50MzJfdCBDQU5fRkxBRykNCit7DQorICBGbGFnU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fR0VUX0ZMQUcoQ0FOX0ZMQUcpKTsNCisgIA0KKw0KKyAgaWYoKENBTl9GTEFHICYgQ0FOX0ZMQUdTX0VTUikgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgeyANCisgICAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIENBTiBmbGFnICovDQorICAgIGlmICgoQ0FOeC0+RVNSICYgKENBTl9GTEFHICYgMHgwMDBGRkZGRikpICE9ICh1aW50MzJfdClSRVNFVCkNCisgICAgeyANCisgICAgICAvKiBDQU5fRkxBRyBpcyBzZXQgKi8NCisgICAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7IA0KKyAgICAgIC8qIENBTl9GTEFHIGlzIHJlc2V0ICovDQorICAgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICAgIH0NCisgIH0NCisgIGVsc2UgaWYoKENBTl9GTEFHICYgQ0FOX0ZMQUdTX01TUikgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgeyANCisgICAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIENBTiBmbGFnICovDQorICAgIGlmICgoQ0FOeC0+TVNSICYgKENBTl9GTEFHICYgMHgwMDBGRkZGRikpICE9ICh1aW50MzJfdClSRVNFVCkNCisgICAgeyANCisgICAgICAvKiBDQU5fRkxBRyBpcyBzZXQgKi8NCisgICAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7IA0KKyAgICAgIC8qIENBTl9GTEFHIGlzIHJlc2V0ICovDQorICAgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICAgIH0NCisgIH0NCisgIGVsc2UgaWYoKENBTl9GTEFHICYgQ0FOX0ZMQUdTX1RTUikgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgeyANCisgICAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIENBTiBmbGFnICovDQorICAgIGlmICgoQ0FOeC0+VFNSICYgKENBTl9GTEFHICYgMHgwMDBGRkZGRikpICE9ICh1aW50MzJfdClSRVNFVCkNCisgICAgeyANCisgICAgICAvKiBDQU5fRkxBRyBpcyBzZXQgKi8NCisgICAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7IA0KKyAgICAgIC8qIENBTl9GTEFHIGlzIHJlc2V0ICovDQorICAgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICAgIH0NCisgIH0NCisgIGVsc2UgaWYoKENBTl9GTEFHICYgQ0FOX0ZMQUdTX1JGMFIpICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsgDQorICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBDQU4gZmxhZyAqLw0KKyAgICBpZiAoKENBTngtPlJGMFIgJiAoQ0FOX0ZMQUcgJiAweDAwMEZGRkZGKSkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgICB7IA0KKyAgICAgIC8qIENBTl9GTEFHIGlzIHNldCAqLw0KKyAgICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsgDQorICAgICAgLyogQ0FOX0ZMQUcgaXMgcmVzZXQgKi8NCisgICAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgICAgfQ0KKyAgfQ0KKyAgZWxzZSAvKiBJZihDQU5fRkxBRyAmIENBTl9GTEFHU19SRjFSICE9ICh1aW50MzJfdClSRVNFVCkgKi8NCisgIHsgDQorICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBDQU4gZmxhZyAqLw0KKyAgICBpZiAoKHVpbnQzMl90KShDQU54LT5SRjFSICYgKENBTl9GTEFHICYgMHgwMDBGRkZGRikpICE9ICh1aW50MzJfdClSRVNFVCkNCisgICAgeyANCisgICAgICAvKiBDQU5fRkxBRyBpcyBzZXQgKi8NCisgICAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7IA0KKyAgICAgIC8qIENBTl9GTEFHIGlzIHJlc2V0ICovDQorICAgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICAgIH0NCisgIH0NCisgIC8qIFJldHVybiB0aGUgQ0FOX0ZMQUcgc3RhdHVzICovDQorICByZXR1cm4gIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBDQU4ncyBwZW5kaW5nIGZsYWdzLg0KKyAgKiBAcGFyYW0gIENBTng6IHdoZXJlIHggY2FuIGJlIDEgb3IgMiB0byB0byBzZWxlY3QgdGhlIENBTiBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIENBTl9GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19SUUNQMDogUmVxdWVzdCBNYWlsQm94MCBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19SUUNQMTogUmVxdWVzdCBNYWlsQm94MSBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19SUUNQMjogUmVxdWVzdCBNYWlsQm94MiBGbGFnIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfRkYwOiBGSUZPIDAgRnVsbCBGbGFnICAgICAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfRk9WMDogRklGTyAwIE92ZXJydW4gRmxhZyAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19GRjE6IEZJRk8gMSBGdWxsIEZsYWcgICAgICAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfRk9WMTogRklGTyAxIE92ZXJydW4gRmxhZyAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fRkxBR19XS1U6IFdha2UgdXAgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0ZMQUdfU0xBSzogU2xlZXAgYWNrbm93bGVkZ2UgRmxhZyAgICANCisgICogICAgICAgICAgICBAYXJnIENBTl9GTEFHX0xFQzogTGFzdCBlcnJvciBjb2RlIEZsYWcgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDQU5fQ2xlYXJGbGFnKENBTl9UeXBlRGVmKiBDQU54LCB1aW50MzJfdCBDQU5fRkxBRykNCit7DQorICB1aW50MzJfdCBmbGFndG1wPTA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fQ0xFQVJfRkxBRyhDQU5fRkxBRykpOw0KKyAgDQorICBpZiAoQ0FOX0ZMQUcgPT0gQ0FOX0ZMQUdfTEVDKSAvKiBFU1IgcmVnaXN0ZXIgKi8NCisgIHsNCisgICAgLyogQ2xlYXIgdGhlIHNlbGVjdGVkIENBTiBmbGFncyAqLw0KKyAgICBDQU54LT5FU1IgPSAodWludDMyX3QpUkVTRVQ7DQorICB9DQorICBlbHNlIC8qIE1TUiBvciBUU1Igb3IgUkYwUiBvciBSRjFSICovDQorICB7DQorICAgIGZsYWd0bXAgPSBDQU5fRkxBRyAmIDB4MDAwRkZGRkY7DQorDQorICAgIGlmICgoQ0FOX0ZMQUcgJiBDQU5fRkxBR1NfUkYwUikhPSh1aW50MzJfdClSRVNFVCkNCisgICAgew0KKyAgICAgIC8qIFJlY2VpdmUgRmxhZ3MgKi8NCisgICAgICBDQU54LT5SRjBSID0gKHVpbnQzMl90KShmbGFndG1wKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmICgoQ0FOX0ZMQUcgJiBDQU5fRkxBR1NfUkYxUikhPSh1aW50MzJfdClSRVNFVCkNCisgICAgew0KKyAgICAgIC8qIFJlY2VpdmUgRmxhZ3MgKi8NCisgICAgICBDQU54LT5SRjFSID0gKHVpbnQzMl90KShmbGFndG1wKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmICgoQ0FOX0ZMQUcgJiBDQU5fRkxBR1NfVFNSKSE9KHVpbnQzMl90KVJFU0VUKQ0KKyAgICB7DQorICAgICAgLyogVHJhbnNtaXQgRmxhZ3MgKi8NCisgICAgICBDQU54LT5UU1IgPSAodWludDMyX3QpKGZsYWd0bXApOw0KKyAgICB9DQorICAgIGVsc2UgLyogSWYoKENBTl9GTEFHICYgQ0FOX0ZMQUdTX01TUikhPSh1aW50MzJfdClSRVNFVCkgKi8NCisgICAgew0KKyAgICAgIC8qIE9wZXJhdGluZyBtb2RlIEZsYWdzICovDQorICAgICAgQ0FOeC0+TVNSID0gKHVpbnQzMl90KShmbGFndG1wKTsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIENBTnggaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuDQorICAqIEBwYXJhbSAgQ0FOeDogd2hlcmUgeCBjYW4gYmUgMSBvciAyIHRvIHRvIHNlbGVjdCB0aGUgQ0FOIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQ0FOX0lUOiBzcGVjaWZpZXMgdGhlIENBTiBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX1RNRTogVHJhbnNtaXQgbWFpbGJveCBlbXB0eSBJbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRk1QMDogRklGTyAwIG1lc3NhZ2UgcGVuZGluZyBJbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRkYwOiBGSUZPIDAgZnVsbCBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9GT1YwOiBGSUZPIDAgb3ZlcnJ1biBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9GTVAxOiBGSUZPIDEgbWVzc2FnZSBwZW5kaW5nIEludGVycnVwdCANCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9GRjE6IEZJRk8gMSBmdWxsIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0ZPVjE6IEZJRk8gMSBvdmVycnVuIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX1dLVTogV2FrZS11cCBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9TTEs6IFNsZWVwIGFja25vd2xlZGdlIEludGVycnVwdCAgDQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRVdHOiBFcnJvciB3YXJuaW5nIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0VQVjogRXJyb3IgcGFzc2l2ZSBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9CT0Y6IEJ1cy1vZmYgSW50ZXJydXB0ICANCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9MRUM6IExhc3QgZXJyb3IgY29kZSBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9FUlI6IEVycm9yIEludGVycnVwdA0KKyAgKiBAcmV0dmFsIFRoZSBjdXJyZW50IHN0YXRlIG9mIENBTl9JVCAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorSVRTdGF0dXMgQ0FOX0dldElUU3RhdHVzKENBTl9UeXBlRGVmKiBDQU54LCB1aW50MzJfdCBDQU5fSVQpDQorew0KKyAgSVRTdGF0dXMgaXRzdGF0dXMgPSBSRVNFVDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ0FOX0FMTF9QRVJJUEgoQ0FOeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9JVChDQU5fSVQpKTsNCisgIA0KKyAgLyogY2hlY2sgdGhlIGludGVycnVwdCBlbmFibGUgYml0ICovDQorIGlmKChDQU54LT5JRVIgJiBDQU5fSVQpICE9IFJFU0VUKQ0KKyB7DQorICAgLyogaW4gY2FzZSB0aGUgSW50ZXJydXB0IGlzIGVuYWJsZWQsIC4uLi4gKi8NCisgICAgc3dpdGNoIChDQU5fSVQpDQorICAgIHsNCisgICAgICBjYXNlIENBTl9JVF9UTUU6DQorICAgICAgICAvKiBDaGVjayBDQU5fVFNSX1JRQ1B4IGJpdHMgKi8NCisgICAgICAgIGl0c3RhdHVzID0gQ2hlY2tJVFN0YXR1cyhDQU54LT5UU1IsIENBTl9UU1JfUlFDUDB8Q0FOX1RTUl9SUUNQMXxDQU5fVFNSX1JRQ1AyKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfRk1QMDoNCisgICAgICAgIC8qIENoZWNrIENBTl9SRjBSX0ZNUDAgYml0ICovDQorICAgICAgICBpdHN0YXR1cyA9IENoZWNrSVRTdGF0dXMoQ0FOeC0+UkYwUiwgQ0FOX1JGMFJfRk1QMCk7ICANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgQ0FOX0lUX0ZGMDoNCisgICAgICAgIC8qIENoZWNrIENBTl9SRjBSX0ZVTEwwIGJpdCAqLw0KKyAgICAgICAgaXRzdGF0dXMgPSBDaGVja0lUU3RhdHVzKENBTngtPlJGMFIsIENBTl9SRjBSX0ZVTEwwKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfRk9WMDoNCisgICAgICAgIC8qIENoZWNrIENBTl9SRjBSX0ZPVlIwIGJpdCAqLw0KKyAgICAgICAgaXRzdGF0dXMgPSBDaGVja0lUU3RhdHVzKENBTngtPlJGMFIsIENBTl9SRjBSX0ZPVlIwKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfRk1QMToNCisgICAgICAgIC8qIENoZWNrIENBTl9SRjFSX0ZNUDEgYml0ICovDQorICAgICAgICBpdHN0YXR1cyA9IENoZWNrSVRTdGF0dXMoQ0FOeC0+UkYxUiwgQ0FOX1JGMVJfRk1QMSk7ICANCisgICAgICAgIGJyZWFrOw0KKyAgICAgIGNhc2UgQ0FOX0lUX0ZGMToNCisgICAgICAgIC8qIENoZWNrIENBTl9SRjFSX0ZVTEwxIGJpdCAqLw0KKyAgICAgICAgaXRzdGF0dXMgPSBDaGVja0lUU3RhdHVzKENBTngtPlJGMVIsIENBTl9SRjFSX0ZVTEwxKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfRk9WMToNCisgICAgICAgIC8qIENoZWNrIENBTl9SRjFSX0ZPVlIxIGJpdCAqLw0KKyAgICAgICAgaXRzdGF0dXMgPSBDaGVja0lUU3RhdHVzKENBTngtPlJGMVIsIENBTl9SRjFSX0ZPVlIxKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfV0tVOg0KKyAgICAgICAgLyogQ2hlY2sgQ0FOX01TUl9XS1VJIGJpdCAqLw0KKyAgICAgICAgaXRzdGF0dXMgPSBDaGVja0lUU3RhdHVzKENBTngtPk1TUiwgQ0FOX01TUl9XS1VJKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfU0xLOg0KKyAgICAgICAgLyogQ2hlY2sgQ0FOX01TUl9TTEFLSSBiaXQgKi8NCisgICAgICAgIGl0c3RhdHVzID0gQ2hlY2tJVFN0YXR1cyhDQU54LT5NU1IsIENBTl9NU1JfU0xBS0kpOyAgDQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIENBTl9JVF9FV0c6DQorICAgICAgICAvKiBDaGVjayBDQU5fRVNSX0VXR0YgYml0ICovDQorICAgICAgICBpdHN0YXR1cyA9IENoZWNrSVRTdGF0dXMoQ0FOeC0+RVNSLCBDQU5fRVNSX0VXR0YpOyAgDQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIENBTl9JVF9FUFY6DQorICAgICAgICAvKiBDaGVjayBDQU5fRVNSX0VQVkYgYml0ICovDQorICAgICAgICBpdHN0YXR1cyA9IENoZWNrSVRTdGF0dXMoQ0FOeC0+RVNSLCBDQU5fRVNSX0VQVkYpOyAgDQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIENBTl9JVF9CT0Y6DQorICAgICAgICAvKiBDaGVjayBDQU5fRVNSX0JPRkYgYml0ICovDQorICAgICAgICBpdHN0YXR1cyA9IENoZWNrSVRTdGF0dXMoQ0FOeC0+RVNSLCBDQU5fRVNSX0JPRkYpOyAgDQorICAgICAgICBicmVhazsNCisgICAgICBjYXNlIENBTl9JVF9MRUM6DQorICAgICAgICAvKiBDaGVjayBDQU5fRVNSX0xFQyBiaXQgKi8NCisgICAgICAgIGl0c3RhdHVzID0gQ2hlY2tJVFN0YXR1cyhDQU54LT5FU1IsIENBTl9FU1JfTEVDKTsgIA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgY2FzZSBDQU5fSVRfRVJSOg0KKyAgICAgICAgLyogQ2hlY2sgQ0FOX01TUl9FUlJJIGJpdCAqLyANCisgICAgICAgIGl0c3RhdHVzID0gQ2hlY2tJVFN0YXR1cyhDQU54LT5NU1IsIENBTl9NU1JfRVJSSSk7IA0KKyAgICAgICAgYnJlYWs7DQorICAgICAgZGVmYXVsdDoNCisgICAgICAgIC8qIGluIGNhc2Ugb2YgZXJyb3IsIHJldHVybiBSRVNFVCAqLw0KKyAgICAgICAgaXRzdGF0dXMgPSBSRVNFVDsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7DQorICAgLyogaW4gY2FzZSB0aGUgSW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLCByZXR1cm4gUkVTRVQgKi8NCisgICAgaXRzdGF0dXMgID0gUkVTRVQ7DQorICB9DQorICANCisgIC8qIFJldHVybiB0aGUgQ0FOX0lUIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBDQU54J3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4NCisgICogQHBhcmFtICBDQU54OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDIgdG8gdG8gc2VsZWN0IHRoZSBDQU4gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBDQU5fSVQ6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX1RNRTogVHJhbnNtaXQgbWFpbGJveCBlbXB0eSBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9GRjA6IEZJRk8gMCBmdWxsIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0ZPVjA6IEZJRk8gMCBvdmVycnVuIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0ZGMTogRklGTyAxIGZ1bGwgSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRk9WMTogRklGTyAxIG92ZXJydW4gSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfV0tVOiBXYWtlLXVwIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX1NMSzogU2xlZXAgYWNrbm93bGVkZ2UgSW50ZXJydXB0ICANCisgICogICAgICAgICAgICBAYXJnIENBTl9JVF9FV0c6IEVycm9yIHdhcm5pbmcgSW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDQU5fSVRfRVBWOiBFcnJvciBwYXNzaXZlIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0JPRjogQnVzLW9mZiBJbnRlcnJ1cHQgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0xFQzogTGFzdCBlcnJvciBjb2RlIEludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ0FOX0lUX0VSUjogRXJyb3IgSW50ZXJydXB0IA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDQU5fQ2xlYXJJVFBlbmRpbmdCaXQoQ0FOX1R5cGVEZWYqIENBTngsIHVpbnQzMl90IENBTl9JVCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NBTl9BTExfUEVSSVBIKENBTngpKTsNCisgIGFzc2VydF9wYXJhbShJU19DQU5fQ0xFQVJfSVQoQ0FOX0lUKSk7DQorDQorICBzd2l0Y2ggKENBTl9JVCkNCisgIHsNCisgICAgY2FzZSBDQU5fSVRfVE1FOg0KKyAgICAgIC8qIENsZWFyIENBTl9UU1JfUlFDUHggKHJjX3cxKSovDQorICAgICAgQ0FOeC0+VFNSID0gQ0FOX1RTUl9SUUNQMHxDQU5fVFNSX1JRQ1AxfENBTl9UU1JfUlFDUDI7ICANCisgICAgICBicmVhazsNCisgICAgY2FzZSBDQU5fSVRfRkYwOg0KKyAgICAgIC8qIENsZWFyIENBTl9SRjBSX0ZVTEwwIChyY193MSkqLw0KKyAgICAgIENBTngtPlJGMFIgPSBDQU5fUkYwUl9GVUxMMDsgDQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgQ0FOX0lUX0ZPVjA6DQorICAgICAgLyogQ2xlYXIgQ0FOX1JGMFJfRk9WUjAgKHJjX3cxKSovDQorICAgICAgQ0FOeC0+UkYwUiA9IENBTl9SRjBSX0ZPVlIwOyANCisgICAgICBicmVhazsNCisgICAgY2FzZSBDQU5fSVRfRkYxOg0KKyAgICAgIC8qIENsZWFyIENBTl9SRjFSX0ZVTEwxIChyY193MSkqLw0KKyAgICAgIENBTngtPlJGMVIgPSBDQU5fUkYxUl9GVUxMMTsgIA0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIENBTl9JVF9GT1YxOg0KKyAgICAgIC8qIENsZWFyIENBTl9SRjFSX0ZPVlIxIChyY193MSkqLw0KKyAgICAgIENBTngtPlJGMVIgPSBDQU5fUkYxUl9GT1ZSMTsgDQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgQ0FOX0lUX1dLVToNCisgICAgICAvKiBDbGVhciBDQU5fTVNSX1dLVUkgKHJjX3cxKSovDQorICAgICAgQ0FOeC0+TVNSID0gQ0FOX01TUl9XS1VJOyAgDQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgQ0FOX0lUX1NMSzoNCisgICAgICAvKiBDbGVhciBDQU5fTVNSX1NMQUtJIChyY193MSkqLyANCisgICAgICBDQU54LT5NU1IgPSBDQU5fTVNSX1NMQUtJOyAgIA0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIENBTl9JVF9FV0c6DQorICAgICAgLyogQ2xlYXIgQ0FOX01TUl9FUlJJIChyY193MSkgKi8NCisgICAgICBDQU54LT5NU1IgPSBDQU5fTVNSX0VSUkk7DQorICAgICAgIC8qIEBub3RlIHRoZSBjb3JyZXNwb25kaW5nIEZsYWcgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBkZXBlbmRpbmcgb24gdGhlIENBTiBCdXMgc3RhdHVzKi8gDQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgQ0FOX0lUX0VQVjoNCisgICAgICAvKiBDbGVhciBDQU5fTVNSX0VSUkkgKHJjX3cxKSAqLw0KKyAgICAgIENBTngtPk1TUiA9IENBTl9NU1JfRVJSSTsgDQorICAgICAgIC8qIEBub3RlIHRoZSBjb3JyZXNwb25kaW5nIEZsYWcgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBkZXBlbmRpbmcgb24gdGhlIENBTiBCdXMgc3RhdHVzKi8NCisgICAgICBicmVhazsNCisgICAgY2FzZSBDQU5fSVRfQk9GOg0KKyAgICAgIC8qIENsZWFyIENBTl9NU1JfRVJSSSAocmNfdzEpICovIA0KKyAgICAgIENBTngtPk1TUiA9IENBTl9NU1JfRVJSSTsgDQorICAgICAgIC8qIEBub3RlIHRoZSBjb3JyZXNwb25kaW5nIEZsYWcgaXMgY2xlYXJlZCBieSBoYXJkd2FyZSBkZXBlbmRpbmcgb24gdGhlIENBTiBCdXMgc3RhdHVzKi8NCisgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQ0FOX0lUX0xFQzoNCisgICAgICAvKiAgQ2xlYXIgTEVDIGJpdHMgKi8NCisgICAgICBDQU54LT5FU1IgPSBSRVNFVDsgDQorICAgICAgLyogQ2xlYXIgQ0FOX01TUl9FUlJJIChyY193MSkgKi8NCisgICAgICBDQU54LT5NU1IgPSBDQU5fTVNSX0VSUkk7IA0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIENBTl9JVF9FUlI6DQorICAgICAgLypDbGVhciBMRUMgYml0cyAqLw0KKyAgICAgIENBTngtPkVTUiA9IFJFU0VUOyANCisgICAgICAvKiBDbGVhciBDQU5fTVNSX0VSUkkgKHJjX3cxKSAqLw0KKyAgICAgIENBTngtPk1TUiA9IENBTl9NU1JfRVJSSTsgDQorICAgICAgIC8qIEBub3RlIEJPRkYsIEVQVkYgYW5kIEVXR0YgRmxhZ3MgYXJlIGNsZWFyZWQgYnkgaGFyZHdhcmUgZGVwZW5kaW5nIG9uIHRoZSBDQU4gQnVzIHN0YXR1cyovDQorICAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICBicmVhazsNCisgICB9DQorfQ0KKyAvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIENBTiBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4NCisgICogQHBhcmFtICBDQU5fUmVnOiBzcGVjaWZpZXMgdGhlIENBTiBpbnRlcnJ1cHQgcmVnaXN0ZXIgdG8gY2hlY2suDQorICAqIEBwYXJhbSAgSXRfQml0OiBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBzb3VyY2UgYml0IHRvIGNoZWNrLg0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgdGhlIENBTiBJbnRlcnJ1cHQgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK3N0YXRpYyBJVFN0YXR1cyBDaGVja0lUU3RhdHVzKHVpbnQzMl90IENBTl9SZWcsIHVpbnQzMl90IEl0X0JpdCkNCit7DQorICBJVFN0YXR1cyBwZW5kaW5nYml0c3RhdHVzID0gUkVTRVQ7DQorICANCisgIGlmICgoQ0FOX1JlZyAmIEl0X0JpdCkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICAvKiBDQU5fSVQgaXMgc2V0ICovDQorICAgIHBlbmRpbmdiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIENBTl9JVCBpcyByZXNldCAqLw0KKyAgICBwZW5kaW5nYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICByZXR1cm4gcGVuZGluZ2JpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2NyYy5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTA4NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcmMuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2NyYy5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgYWxsIHRoZSBDUkMgZmlybXdhcmUgZnVuY3Rpb25zLg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2NyYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSQyANCisgICogQGJyaWVmIENSQyBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIENSQ19Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBSZXNldHMgdGhlIENSQyBEYXRhIHJlZ2lzdGVyIChEUikuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUkNfUmVzZXREUih2b2lkKQ0KK3sNCisgIC8qIFJlc2V0IENSQyBnZW5lcmF0b3IgKi8NCisgIENSQy0+Q1IgPSBDUkNfQ1JfUkVTRVQ7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbXB1dGVzIHRoZSAzMi1iaXQgQ1JDIG9mIGEgZ2l2ZW4gZGF0YSB3b3JkKDMyLWJpdCkuDQorICAqIEBwYXJhbSAgRGF0YTogZGF0YSB3b3JkKDMyLWJpdCkgdG8gY29tcHV0ZSBpdHMgQ1JDDQorICAqIEByZXR2YWwgMzItYml0IENSQw0KKyAgKi8NCit1aW50MzJfdCBDUkNfQ2FsY0NSQyh1aW50MzJfdCBEYXRhKQ0KK3sNCisgIENSQy0+RFIgPSBEYXRhOw0KKyAgDQorICByZXR1cm4gKENSQy0+RFIpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb21wdXRlcyB0aGUgMzItYml0IENSQyBvZiBhIGdpdmVuIGJ1ZmZlciBvZiBkYXRhIHdvcmQoMzItYml0KS4NCisgICogQHBhcmFtICBwQnVmZmVyOiBwb2ludGVyIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBjb21wdXRlZA0KKyAgKiBAcGFyYW0gIEJ1ZmZlckxlbmd0aDogbGVuZ3RoIG9mIHRoZSBidWZmZXIgdG8gYmUgY29tcHV0ZWQJCQkJCQ0KKyAgKiBAcmV0dmFsIDMyLWJpdCBDUkMNCisgICovDQordWludDMyX3QgQ1JDX0NhbGNCbG9ja0NSQyh1aW50MzJfdCBwQnVmZmVyW10sIHVpbnQzMl90IEJ1ZmZlckxlbmd0aCkNCit7DQorICB1aW50MzJfdCBpbmRleCA9IDA7DQorICANCisgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgQnVmZmVyTGVuZ3RoOyBpbmRleCsrKQ0KKyAgew0KKyAgICBDUkMtPkRSID0gcEJ1ZmZlcltpbmRleF07DQorICB9DQorICByZXR1cm4gKENSQy0+RFIpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBjdXJyZW50IENSQyB2YWx1ZS4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgMzItYml0IENSQw0KKyAgKi8NCit1aW50MzJfdCBDUkNfR2V0Q1JDKHZvaWQpDQorew0KKyAgcmV0dXJuIChDUkMtPkRSKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU3RvcmVzIGEgOC1iaXQgZGF0YSBpbiB0aGUgSW5kZXBlbmRlbnQgRGF0YShJRCkgcmVnaXN0ZXIuDQorICAqIEBwYXJhbSAgSURWYWx1ZTogOC1iaXQgdmFsdWUgdG8gYmUgc3RvcmVkIGluIHRoZSBJRCByZWdpc3RlciAJCQkJCQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUkNfU2V0SURSZWdpc3Rlcih1aW50OF90IElEVmFsdWUpDQorew0KKyAgQ1JDLT5JRFIgPSBJRFZhbHVlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSA4LWJpdCBkYXRhIHN0b3JlZCBpbiB0aGUgSW5kZXBlbmRlbnQgRGF0YShJRCkgcmVnaXN0ZXINCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgOC1iaXQgdmFsdWUgb2YgdGhlIElEIHJlZ2lzdGVyIA0KKyAgKi8NCit1aW50OF90IENSQ19HZXRJRFJlZ2lzdGVyKHZvaWQpDQorew0KKyAgcmV0dXJuIChDUkMtPklEUik7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2NyeXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzhiZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwLmMKQEAgLTAsMCArMSw4NTYgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9jcnlwLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgIENyeXB0b2dyYXBoaWMgcHJvY2Vzc29yIChDUllQKSBwZXJpcGhlcmFsOiAgICAgICAgICAgDQorICAqICAgICAgICAgICAtIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAgKiAgICAgICAgICAgLSBEYXRhIHRyZWF0bWVudCBmdW5jdGlvbnMgDQorICAqICAgICAgICAgICAtIENvbnRleHQgc3dhcHBpbmcgZnVuY3Rpb25zICAgICANCisgICogICAgICAgICAgIC0gRE1BIGludGVyZmFjZSBmdW5jdGlvbiAgICAgICANCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCAgICAgICANCisgICoNCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICogICAgICAgICAgMS4gRW5hYmxlIHRoZSBDUllQIGNvbnRyb2xsZXIgY2xvY2sgdXNpbmcgDQorICAqICAgICAgICAgICAgICBSQ0NfQUhCMlBlcmlwaENsb2NrQ21kKFJDQ19BSEIyUGVyaXBoX0NSWVAsIEVOQUJMRSk7IGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgICAyLiBJbml0aWFsaXNlIHRoZSBDUllQIHVzaW5nIENSWVBfSW5pdCgpLCBDUllQX0tleUluaXQoKSBhbmQgaWYgDQorICAqICAgICAgICAgICAgIG5lZWRlZCBDUllQX0lWSW5pdCgpLiANCisgICoNCisgICogICAgICAgICAgMy4gRmx1c2ggdGhlIElOIGFuZCBPVVQgRklGT3MgYnkgdXNpbmcgQ1JZUF9GSUZPRmx1c2goKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgNC4gRW5hYmxlIHRoZSBDUllQIGNvbnRyb2xsZXIgdXNpbmcgdGhlIENSWVBfQ21kKCkgZnVuY3Rpb24uIA0KKyAgKg0KKyAgKiAgICAgICAgICA1LiBJZiB1c2luZyBETUEgZm9yIERhdGEgaW5wdXQgYW5kIG91dHB1dCB0cmFuc2ZlciwgDQorICAqICAgICAgICAgICAgIEFjdGl2YXRlIHRoZSBuZWVkZWQgRE1BIFJlcXVlc3RzIHVzaW5nIENSWVBfRE1BQ21kKCkgZnVuY3Rpb24gDQorICANCisgICogICAgICAgICAgNi4gSWYgRE1BIGlzIG5vdCB1c2VkIGZvciBkYXRhIHRyYW5zZmVyLCB1c2UgQ1JZUF9EYXRhSW4oKSBhbmQgDQorICAqICAgICAgICAgICAgIENSWVBfRGF0YU91dCgpIGZ1bmN0aW9ucyB0byBlbnRlciBkYXRhIHRvIElOIEZJRk8gYW5kIGdldCByZXN1bHQNCisgICogICAgICAgICAgICAgZnJvbSBPVVQgRklGTy4NCisgICoNCisgICogICAgICAgICAgNy4gVG8gY29udHJvbCBDUllQIGV2ZW50cyB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgICAgIHR3byBtZXRob2RzOg0KKyAgKiAgICAgICAgICAgICAgIC0gQ2hlY2sgb24gQ1JZUCBmbGFncyB1c2luZyB0aGUgQ1JZUF9HZXRGbGFnU3RhdHVzKCkgZnVuY3Rpb24uICANCisgICogICAgICAgICAgICAgICAtIFVzZSBDUllQIGludGVycnVwdHMgdGhyb3VnaCB0aGUgZnVuY3Rpb24gQ1JZUF9JVENvbmZpZygpIGF0IA0KKyAgKiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gcGhhc2UgYW5kIENSWVBfR2V0SVRTdGF0dXMoKSBmdW5jdGlvbiBpbnRvIA0KKyAgKiAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHJvdXRpbmVzIGluIHByb2Nlc3NpbmcgcGhhc2UuDQorICAqICAgICAgIA0KKyAgKiAgICAgICAgICA4LiBTYXZlIGFuZCByZXN0b3JlIENyeXB0b2dyYXBoaWMgcHJvY2Vzc29yIGNvbnRleHQgdXNpbmcgIA0KKyAgKiAgICAgICAgICAgICBDUllQX1NhdmVDb250ZXh0KCkgYW5kIENSWVBfUmVzdG9yZUNvbnRleHQoKSBmdW5jdGlvbnMuICAgICANCisgICoNCisgICoNCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorICAqICAgICAgICAgICAgICAgIFByb2NlZHVyZSB0byBwZXJmb3JtIGFuIGVuY3J5cHRpb24gb3IgYSBkZWNyeXB0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgKg0KKyAgKiAgICAgIEluaXRpYWxpemF0aW9uDQorICAqICAgICAgPT09PT09PT09PT09PT09ICANCisgICogICAgIDEuIEluaXRpYWxpemUgdGhlIHBlcmlwaGVyYWwgdXNpbmcgQ1JZUF9Jbml0KCksIENSWVBfS2V5SW5pdCgpIGFuZCANCisgICogICAgICAgIENSWVBfSVZJbml0IGZ1bmN0aW9uczoNCisgICogICAgICAgIC0gQ29uZmlndXJlIHRoZSBrZXkgc2l6ZSAoMTI4LSwgMTkyLSBvciAyNTYtYml0LCBpbiB0aGUgQUVTIG9ubHkpIA0KKyAgKiAgICAgICAgLSBFbnRlciB0aGUgc3ltbWV0cmljIGtleSANCisgICogICAgICAgIC0gQ29uZmlndXJlIHRoZSBkYXRhIHR5cGUNCisgICogICAgICAgIC0gSW4gY2FzZSBvZiBkZWNyeXB0aW9uIGluIEFFUy1FQ0Igb3IgQUVTLUNCQywgeW91IG11c3QgcHJlcGFyZSANCisgICogICAgICAgICAgdGhlIGtleTogY29uZmlndXJlIHRoZSBrZXkgcHJlcGFyYXRpb24gbW9kZS4gVGhlbiBFbmFibGUgdGhlIENSWVAgDQorICAqICAgICAgICAgIHBlcmlwaGVyYWwgdXNpbmcgQ1JZUF9DbWQoKSBmdW5jdGlvbjogdGhlIEJVU1kgZmxhZyBpcyBzZXQuIA0KKyAgKiAgICAgICAgICBXYWl0IHVudGlsIEJVU1kgZmxhZyBpcyByZXNldCA6IHRoZSBrZXkgaXMgcHJlcGFyZWQgZm9yIGRlY3J5cHRpb24NCisgICogICAgICAgLSBDb25maWd1cmUgdGhlIGFsZ29yaXRobSBhbmQgY2hhaW5pbmcgKHRoZSBERVMvVERFUyBpbiBFQ0IvQ0JDLCB0aGUgDQorICAqICAgICAgICAgIEFFUyBpbiBFQ0IvQ0JDL0NUUikgDQorICAqICAgICAgIC0gQ29uZmlndXJlIHRoZSBkaXJlY3Rpb24gKGVuY3J5cHRpb24vZGVjcnlwdGlvbikuDQorICAqICAgICAgIC0gV3JpdGUgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvcnMgKGluIENCQyBvciBDVFIgbW9kZXMgb25seSkNCisgICoNCisgICogICAgMi4gRmx1c2ggdGhlIElOIGFuZCBPVVQgRklGT3MgdXNpbmcgdGhlIENSWVBfRklGT0ZsdXNoKCkgZnVuY3Rpb24NCisgICoNCisgICoNCisgICogICAgQmFzaWMgUHJvY2Vzc2luZyBtb2RlIChwb2xsaW5nIG1vZGUpIA0KKyAgKiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgKiAgICAxLiBFbmFibGUgdGhlIGNyeXB0b2dyYXBoaWMgcHJvY2Vzc29yIHVzaW5nIENSWVBfQ21kKCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgIDIuIFdyaXRlIHRoZSBmaXJzdCBibG9ja3MgaW4gdGhlIGlucHV0IEZJRk8gKDIgdG8gOCB3b3JkcykgdXNpbmcgDQorICAqICAgICAgIENSWVBfRGF0YUluKCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgIDMuIFJlcGVhdCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIHVudGlsIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGhhcyBiZWVuIA0KKyAgKiAgICAgICBwcm9jZXNzZWQ6DQorICAqDQorICAqICAgICAgIGEpIFdhaXQgZm9yIGZsYWcgQ1JZUF9GTEFHX09GTkUgb2NjdXJzICh1c2luZyBDUllQX0dldEZsYWdTdGF0dXMoKSANCisgICogICAgICAgICAgZnVuY3Rpb24pLCB0aGVuIHJlYWQgdGhlIE9VVC1GSUZPIHVzaW5nIENSWVBfRGF0YU91dCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICgxIGJsb2NrIG9yIHVudGlsIHRoZSBGSUZPIGlzIGVtcHR5KQ0KKyAgKg0KKyAgKiAgICAgICBiKSBXYWl0IGZvciBmbGFnIENSWVBfRkxBR19JRk5GIG9jY3VycywgKHVzaW5nIENSWVBfR2V0RmxhZ1N0YXR1cygpIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbiB0aGVuIHdyaXRlIHRoZSBJTiBGSUZPIHVzaW5nIENSWVBfRGF0YUluKCkgZnVuY3Rpb24gDQorICAqICAgICAgICAgICgxIGJsb2NrIG9yIHVudGlsIHRoZSBGSUZPIGlzIGZ1bGwpDQorICAqDQorICAqICAgIDQuIEF0IHRoZSBlbmQgb2YgdGhlIHByb2Nlc3NpbmcsIENSWVBfRkxBR19CVVNZIGZsYWcgd2lsbCBiZSByZXNldCBhbmQgDQorICAqICAgICAgICBib3RoIEZJRk9zIGFyZSBlbXB0eSAoQ1JZUF9GTEFHX0lGRU0gaXMgc2V0IGFuZCBDUllQX0ZMQUdfT0ZORSBpcyANCisgICogICAgICAgIHJlc2V0KS4gWW91IGNhbiBkaXNhYmxlIHRoZSBwZXJpcGhlcmFsIHVzaW5nIENSWVBfQ21kKCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgIEludGVycnVwdHMgUHJvY2Vzc2luZyBtb2RlIA0KKyAgKiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgSW4gdGhpcyBtb2RlLCBQcm9jZXNzaW5nIGlzIGRvbmUgd2hlbiB0aGUgZGF0YSBhcmUgdHJhbnNmZXJyZWQgYnkgdGhlIA0KKyAgKiAgICBDUFUgZHVyaW5nIGludGVycnVwdHMuDQorICAqDQorICAqICAgIDEuIEVuYWJsZSB0aGUgaW50ZXJydXB0cyBDUllQX0lUX0lOSSBhbmQgQ1JZUF9JVF9PVVRJIHVzaW5nIA0KKyAgKiAgICAgICBDUllQX0lUQ29uZmlnKCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgIDIuIEVuYWJsZSB0aGUgY3J5cHRvZ3JhcGhpYyBwcm9jZXNzb3IgdXNpbmcgQ1JZUF9DbWQoKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgMy4gSW4gdGhlIENSWVBfSVRfSU5JIGludGVycnVwdCBoYW5kbGVyIDogbG9hZCB0aGUgaW5wdXQgbWVzc2FnZSBpbnRvIHRoZSANCisgICogICAgICAgSU4gRklGTyB1c2luZyBDUllQX0RhdGFJbigpIGZ1bmN0aW9uIC4gWW91IGNhbiBsb2FkIDIgb3IgNCB3b3JkcyBhdCBhIA0KKyAgKiAgICAgICB0aW1lLCBvciBsb2FkIGRhdGEgdW50aWwgdGhlIElOIEZJRk8gaXMgZnVsbC4gV2hlbiB0aGUgbGFzdCB3b3JkIG9mDQorICAqICAgICAgIHRoZSBtZXNzYWdlIGhhcyBiZWVuIGVudGVyZWQgaW50byB0aGUgSU4gRklGTywgZGlzYWJsZSB0aGUgQ1JZUF9JVF9JTkkgDQorICAqICAgICAgIGludGVycnVwdCAodXNpbmcgQ1JZUF9JVENvbmZpZygpIGZ1bmN0aW9uKS4NCisgICoNCisgICogICAgNC4gSW4gdGhlIENSWVBfSVRfT1VUSSBpbnRlcnJ1cHQgaGFuZGxlciA6IHJlYWQgdGhlIG91dHB1dCBtZXNzYWdlIGZyb20gDQorICAqICAgICAgIHRoZSBPVVQgRklGTyB1c2luZyBDUllQX0RhdGFPdXQoKSBmdW5jdGlvbi4gWW91IGNhbiByZWFkIDEgYmxvY2sgKDIgb3IgDQorICAqICAgICAgIDQgd29yZHMpIGF0IGEgdGltZSBvciByZWFkIGRhdGEgdW50aWwgdGhlIEZJRk8gaXMgZW1wdHkuDQorICAqICAgICAgIFdoZW4gdGhlIGxhc3Qgd29yZCBoYXMgYmVlbiByZWFkLCBJTklNPTAsIEJVU1k9MCBhbmQgYm90aCBGSUZPcyBhcmUgDQorICAqICAgICAgIGVtcHR5IChDUllQX0ZMQUdfSUZFTSBpcyBzZXQgYW5kIENSWVBfRkxBR19PRk5FIGlzIHJlc2V0KS4gDQorICAqICAgICAgIFlvdSBjYW4gZGlzYWJsZSB0aGUgQ1JZUF9JVF9PVVRJIGludGVycnVwdCAodXNpbmcgQ1JZUF9JVENvbmZpZygpIA0KKyAgKiAgICAgICBmdW5jdGlvbikgYW5kIHlvdSBjYW4gZGlzYWJsZSB0aGUgcGVyaXBoZXJhbCB1c2luZyBDUllQX0NtZCgpIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICBETUEgUHJvY2Vzc2luZyBtb2RlIA0KKyAgKiAgICA9PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICBJbiB0aGlzIG1vZGUsIFByb2Nlc3NpbmcgaXMgZG9uZSB3aGVuIHRoZSBETUEgaXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgDQorICAqICAgIGRhdGEgZnJvbS90byB0aGUgbWVtb3J5Lg0KKyAgKg0KKyAgKiAgICAxLiBDb25maWd1cmUgdGhlIERNQSBjb250cm9sbGVyIHRvIHRyYW5zZmVyIHRoZSBpbnB1dCBkYXRhIGZyb20gdGhlIA0KKyAgKiAgICAgICBtZW1vcnkgdXNpbmcgRE1BX0luaXQoKSBmdW5jdGlvbi4gDQorICAqICAgICAgIFRoZSB0cmFuc2ZlciBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZS4gDQorICAqICAgICAgIEFzIG1lc3NhZ2UgcGFkZGluZyBpcyBub3QgbWFuYWdlZCBieSB0aGUgcGVyaXBoZXJhbCwgdGhlIG1lc3NhZ2UgDQorICAqICAgICAgIGxlbmd0aCBtdXN0IGJlIGFuIGVudGlyZSBudW1iZXIgb2YgYmxvY2tzLiBUaGUgZGF0YSBhcmUgdHJhbnNmZXJyZWQgDQorICAqICAgICAgIGluIGJ1cnN0IG1vZGUuIFRoZSBidXJzdCBsZW5ndGggaXMgNCB3b3JkcyBpbiB0aGUgQUVTIGFuZCAyIG9yIDQgDQorICAqICAgICAgIHdvcmRzIGluIHRoZSBERVMvVERFUy4gVGhlIERNQSBzaG91bGQgYmUgY29uZmlndXJlZCB0byBzZXQgYW4gDQorICAqICAgICAgIGludGVycnVwdCBvbiB0cmFuc2ZlciBjb21wbGV0aW9uIG9mIHRoZSBvdXRwdXQgZGF0YSB0byBpbmRpY2F0ZSB0aGF0IA0KKyAgKiAgICAgICB0aGUgcHJvY2Vzc2luZyBpcyBmaW5pc2hlZC4gDQorICAqICAgICAgIFJlZmVyIHRvIERNQSBwZXJpcGhlcmFsIGRyaXZlciBmb3IgbW9yZSBkZXRhaWxzLiAgDQorICAqDQorICAqICAgIDIuIEVuYWJsZSB0aGUgY3J5cHRvZ3JhcGhpYyBwcm9jZXNzb3IgdXNpbmcgQ1JZUF9DbWQoKSBmdW5jdGlvbi4gDQorICAqICAgICAgIEVuYWJsZSB0aGUgRE1BIHJlcXVlc3RzIENSWVBfRE1BUmVxX0RhdGFJTiBhbmQgQ1JZUF9ETUFSZXFfRGF0YU9VVCANCisgICogICAgICAgdXNpbmcgQ1JZUF9ETUFDbWQoKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgMy4gQWxsIHRoZSB0cmFuc2ZlcnMgYW5kIHByb2Nlc3NpbmcgYXJlIG1hbmFnZWQgYnkgdGhlIERNQSBhbmQgdGhlIA0KKyAgKiAgICAgICBjcnlwdG9ncmFwaGljIHByb2Nlc3Nvci4gVGhlIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBpbnRlcnJ1cHQgaW5kaWNhdGVzIA0KKyAgKiAgICAgICB0aGF0IHRoZSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlLiBCb3RoIEZJRk9zIGFyZSBub3JtYWxseSBlbXB0eSBhbmQgDQorICAqICAgICAgIENSWVBfRkxBR19CVVNZIGZsYWcgaXMgcmVzZXQuDQorICAqDQorICAqICBAZW5kdmVyYmF0aW0NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9jcnlwLmgiDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBDUllQIA0KKyAgKiBAYnJpZWYgQ1JZUCBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNkZWZpbmUgRkxBR19NQVNLICAgICAoKHVpbnQ4X3QpMHgyMCkNCisjZGVmaW5lIE1BWF9USU1FT1VUICAgKCh1aW50MTZfdCkweEZGRkYpDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVBfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgQ1JZUF9Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byANCisgICAtIEluaXRpYWxpemUgdGhlIGNyeXB0b2dyYXBoaWMgUHJvY2Vzc29yIHVzaW5nIENSWVBfSW5pdCgpIGZ1bmN0aW9uIA0KKyAgICAgIC0gIEVuY3J5cHQgb3IgRGVjcnlwdCANCisgICAgICAtICBtb2RlIDogVERFUy1FQ0IsIFRERVMtQ0JDLCANCisgICAgICAgICAgICAgICAgREVTLUVDQiwgREVTLUNCQywgDQorICAgICAgICAgICAgICAgIEFFUy1FQ0IsIEFFUy1DQkMsIEFFUy1DVFIsIEFFUy1LZXkgDQorICAgICAgLSBEYXRhVHlwZSA6ICAzMi1iaXQgZGF0YSwgMTYtYml0IGRhdGEsIGJpdCBkYXRhIG9yIGJpdC1zdHJpbmcNCisgICAgICAtIEtleSBTaXplIChvbmx5IGluIEFFUyBtb2RlcykNCisgICAtIENvbmZpZ3VyZSB0aGUgRW5jcnlwdCBvciBEZWNyeXB0IEtleSB1c2luZyBDUllQX0tleUluaXQoKSBmdW5jdGlvbiANCisgICAtIENvbmZpZ3VyZSB0aGUgSW5pdGlhbGl6YXRpb24gVmVjdG9ycyhJVikgZm9yIENCQyBhbmQgQ1RSIG1vZGVzIHVzaW5nIA0KKyAgICAgQ1JZUF9JVkluaXQoKSBmdW5jdGlvbi4gIA0KKyAgIC0gRmx1c2hlcyB0aGUgSU4gYW5kIE9VVCBGSUZPcyA6IHVzaW5nIENSWVBfRklGT0ZsdXNoKCkgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgIC0gRW5hYmxlIG9yIGRpc2FibGUgdGhlIENSWVAgUHJvY2Vzc29yIHVzaW5nIENSWVBfQ21kKCkgZnVuY3Rpb24gDQorICAgIA0KKyAgIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBDUllQIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUllQX0RlSW5pdCh2b2lkKQ0KK3sNCisgIC8qIEVuYWJsZSBDUllQIHJlc2V0IHN0YXRlICovDQorICBSQ0NfQUhCMlBlcmlwaFJlc2V0Q21kKFJDQ19BSEIyUGVyaXBoX0NSWVAsIEVOQUJMRSk7DQorDQorICAvKiBSZWxlYXNlIENSWVAgZnJvbSByZXNldCBzdGF0ZSAqLw0KKyAgUkNDX0FIQjJQZXJpcGhSZXNldENtZChSQ0NfQUhCMlBlcmlwaF9DUllQLCBESVNBQkxFKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIENSWVAgcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzDQorICAqICAgICAgICAgaW4gdGhlIENSWVBfSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBDUllQX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBDUllQX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBDUllQIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENSWVBfSW5pdChDUllQX0luaXRUeXBlRGVmKiBDUllQX0luaXRTdHJ1Y3QpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DUllQX0FMR09NT0RFKENSWVBfSW5pdFN0cnVjdC0+Q1JZUF9BbGdvTW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfREFUQVRZUEUoQ1JZUF9Jbml0U3RydWN0LT5DUllQX0RhdGFUeXBlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfQ1JZUF9BTEdPRElSKENSWVBfSW5pdFN0cnVjdC0+Q1JZUF9BbGdvRGlyKSk7DQorDQorICAvKiBTZWxlY3QgQWxnb3JpdGhtIG1vZGUqLyAgDQorICBDUllQLT5DUiAmPSB+Q1JZUF9DUl9BTEdPTU9ERTsNCisgIENSWVAtPkNSIHw9IENSWVBfSW5pdFN0cnVjdC0+Q1JZUF9BbGdvTW9kZTsNCisNCisgIC8qIFNlbGVjdCBkYXRhVHlwZSAqLyANCisgIENSWVAtPkNSICY9IH5DUllQX0NSX0RBVEFUWVBFOw0KKyAgQ1JZUC0+Q1IgfD0gQ1JZUF9Jbml0U3RydWN0LT5DUllQX0RhdGFUeXBlOw0KKw0KKyAgLyogc2VsZWN0IEtleSBzaXplICh1c2VkIG9ubHkgd2l0aCBBRVMgYWxnb3JpdGhtKSAqLw0KKyAgaWYgKChDUllQX0luaXRTdHJ1Y3QtPkNSWVBfQWxnb01vZGUgPT0gQ1JZUF9BbGdvTW9kZV9BRVNfRUNCKSB8fA0KKyAgICAgIChDUllQX0luaXRTdHJ1Y3QtPkNSWVBfQWxnb01vZGUgPT0gQ1JZUF9BbGdvTW9kZV9BRVNfQ0JDKSB8fA0KKyAgICAgIChDUllQX0luaXRTdHJ1Y3QtPkNSWVBfQWxnb01vZGUgPT0gQ1JZUF9BbGdvTW9kZV9BRVNfQ1RSKSB8fA0KKyAgICAgIChDUllQX0luaXRTdHJ1Y3QtPkNSWVBfQWxnb01vZGUgPT0gQ1JZUF9BbGdvTW9kZV9BRVNfS2V5KSkNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfS0VZU0laRShDUllQX0luaXRTdHJ1Y3QtPkNSWVBfS2V5U2l6ZSkpOw0KKyAgICBDUllQLT5DUiAmPSB+Q1JZUF9DUl9LRVlTSVpFOw0KKyAgICBDUllQLT5DUiB8PSBDUllQX0luaXRTdHJ1Y3QtPkNSWVBfS2V5U2l6ZTsgLyogS2V5IHNpemUgYW5kIHZhbHVlIG11c3QgYmUgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIG9uY2UgdGhlIGtleSBoYXMgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWVuIHByZXBhcmVkICovDQorICB9DQorDQorICAvKiBTZWxlY3QgZGF0YSBEaXJlY3Rpb24gKi8gDQorICBDUllQLT5DUiAmPSB+Q1JZUF9DUl9BTEdPRElSOw0KKyAgQ1JZUC0+Q1IgfD0gQ1JZUF9Jbml0U3RydWN0LT5DUllQX0FsZ29EaXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggQ1JZUF9Jbml0U3RydWN0IG1lbWJlciB3aXRoIGl0cyBkZWZhdWx0IHZhbHVlLg0KKyAgKiBAcGFyYW0gIENSWVBfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIENSWVBfSW5pdFR5cGVEZWYgc3RydWN0dXJlIHdoaWNoIHdpbGwNCisgICogICAgICAgICBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQ1JZUF9TdHJ1Y3RJbml0KENSWVBfSW5pdFR5cGVEZWYqIENSWVBfSW5pdFN0cnVjdCkNCit7DQorICAvKiBJbml0aWFsaXplIHRoZSBDUllQX0FsZ29EaXIgbWVtYmVyICovDQorICBDUllQX0luaXRTdHJ1Y3QtPkNSWVBfQWxnb0RpciA9IENSWVBfQWxnb0Rpcl9FbmNyeXB0Ow0KKw0KKyAgLyogaW5pdGlhbGl6ZSB0aGUgQ1JZUF9BbGdvTW9kZSBtZW1iZXIgKi8NCisgIENSWVBfSW5pdFN0cnVjdC0+Q1JZUF9BbGdvTW9kZSA9IENSWVBfQWxnb01vZGVfVERFU19FQ0I7DQorDQorICAvKiBpbml0aWFsaXplIHRoZSBDUllQX0RhdGFUeXBlIG1lbWJlciAqLw0KKyAgQ1JZUF9Jbml0U3RydWN0LT5DUllQX0RhdGFUeXBlID0gQ1JZUF9EYXRhVHlwZV8zMmI7DQorICANCisgIC8qIEluaXRpYWxpemUgdGhlIENSWVBfS2V5U2l6ZSBtZW1iZXIgKi8NCisgIENSWVBfSW5pdFN0cnVjdC0+Q1JZUF9LZXlTaXplID0gQ1JZUF9LZXlTaXplXzEyOGI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBDUllQIEtleXMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbg0KKyAgKiAgICAgICAgIHRoZSBDUllQX0tleUluaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgQ1JZUF9LZXlJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgQ1JZUF9LZXlJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdA0KKyAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgQ1JZUCBLZXlzLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUllQX0tleUluaXQoQ1JZUF9LZXlJbml0VHlwZURlZiogQ1JZUF9LZXlJbml0U3RydWN0KQ0KK3sNCisgIC8qIEtleSBJbml0aWFsaXNhdGlvbiAqLw0KKyAgQ1JZUC0+SzBMUiA9IENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkwTGVmdDsNCisgIENSWVAtPkswUlIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MFJpZ2h0Ow0KKyAgQ1JZUC0+SzFMUiA9IENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkxTGVmdDsNCisgIENSWVAtPksxUlIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MVJpZ2h0Ow0KKyAgQ1JZUC0+SzJMUiA9IENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkyTGVmdDsNCisgIENSWVAtPksyUlIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MlJpZ2h0Ow0KKyAgQ1JZUC0+SzNMUiA9IENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkzTGVmdDsNCisgIENSWVAtPkszUlIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5M1JpZ2h0Ow0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIENSWVBfS2V5SW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBDUllQX0tleUluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBDUllQX0tleUluaXRUeXBlRGVmIHN0cnVjdHVyZSANCisgICogICAgICAgICB3aGljaCB3aWxsIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUllQX0tleVN0cnVjdEluaXQoQ1JZUF9LZXlJbml0VHlwZURlZiogQ1JZUF9LZXlJbml0U3RydWN0KQ0KK3sNCisgIENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkwTGVmdCAgPSAwOw0KKyAgQ1JZUF9LZXlJbml0U3RydWN0LT5DUllQX0tleTBSaWdodCA9IDA7DQorICBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MUxlZnQgID0gMDsNCisgIENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkxUmlnaHQgPSAwOw0KKyAgQ1JZUF9LZXlJbml0U3RydWN0LT5DUllQX0tleTJMZWZ0ICA9IDA7DQorICBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MlJpZ2h0ID0gMDsNCisgIENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkzTGVmdCAgPSAwOw0KKyAgQ1JZUF9LZXlJbml0U3RydWN0LT5DUllQX0tleTNSaWdodCA9IDA7DQorfQ0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBDUllQIEluaXRpYWxpemF0aW9uIFZlY3RvcnMoSVYpIGFjY29yZGluZyB0byB0aGUNCisgICogICAgICAgICBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbiB0aGUgQ1JZUF9JVkluaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgQ1JZUF9JVkluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBDUllQX0lWSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMNCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIENSWVAgSW5pdGlhbGl6YXRpb24gVmVjdG9ycyhJVikuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENSWVBfSVZJbml0KENSWVBfSVZJbml0VHlwZURlZiogQ1JZUF9JVkluaXRTdHJ1Y3QpDQorew0KKyAgQ1JZUC0+SVYwTFIgPSBDUllQX0lWSW5pdFN0cnVjdC0+Q1JZUF9JVjBMZWZ0Ow0KKyAgQ1JZUC0+SVYwUlIgPSBDUllQX0lWSW5pdFN0cnVjdC0+Q1JZUF9JVjBSaWdodDsNCisgIENSWVAtPklWMUxSID0gQ1JZUF9JVkluaXRTdHJ1Y3QtPkNSWVBfSVYxTGVmdDsNCisgIENSWVAtPklWMVJSID0gQ1JZUF9JVkluaXRTdHJ1Y3QtPkNSWVBfSVYxUmlnaHQ7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggQ1JZUF9JVkluaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgQ1JZUF9JVkluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBDUllQX0lWSW5pdFR5cGVEZWYgSW5pdGlhbGl6YXRpb24gDQorICAqICAgICAgICAgVmVjdG9ycyhJVikgc3RydWN0dXJlIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENSWVBfSVZTdHJ1Y3RJbml0KENSWVBfSVZJbml0VHlwZURlZiogQ1JZUF9JVkluaXRTdHJ1Y3QpDQorew0KKyAgQ1JZUF9JVkluaXRTdHJ1Y3QtPkNSWVBfSVYwTGVmdCAgPSAwOw0KKyAgQ1JZUF9JVkluaXRTdHJ1Y3QtPkNSWVBfSVYwUmlnaHQgPSAwOw0KKyAgQ1JZUF9JVkluaXRTdHJ1Y3QtPkNSWVBfSVYxTGVmdCAgPSAwOw0KKyAgQ1JZUF9JVkluaXRTdHJ1Y3QtPkNSWVBfSVYxUmlnaHQgPSAwOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGbHVzaGVzIHRoZSBJTiBhbmQgT1VUIEZJRk9zICh0aGF0IGlzIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzIG9mIHRoZSANCisgICogICAgICAgICBGSUZPcyBhcmUgcmVzZXQpDQorICAqIEBub3RlICAgVGhlIEZJRk9zIG11c3QgYmUgZmx1c2hlZCBvbmx5IHdoZW4gQlVTWSBmbGFnIGlzIHJlc2V0LiAgDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUllQX0ZJRk9GbHVzaCh2b2lkKQ0KK3sNCisgIC8qIFJlc2V0IHRoZSByZWFkIGFuZCB3cml0ZSBwb2ludGVycyBvZiB0aGUgRklGT3MgKi8NCisgIENSWVAtPkNSIHw9IENSWVBfQ1JfRkZMVVNIOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBDUllQIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgQ1JZUCBwZXJpcGhlcmFsLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBDUllQX0NtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBDcnlwdG9ncmFwaGljIHByb2Nlc3NvciAqLw0KKyAgICBDUllQLT5DUiB8PSBDUllQX0NSX0NSWVBFTjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgQ3J5cHRvZ3JhcGhpYyBwcm9jZXNzb3IgKi8NCisgICAgQ1JZUC0+Q1IgJj0gfkNSWVBfQ1JfQ1JZUEVOOw0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorICANCisvKiogQGRlZmdyb3VwIENSWVBfR3JvdXAyIENSWVAgRGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICAgQ1JZUCBEYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgQ1JZUCBEYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0aGUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiANCisgIG9wZXJhdGlvbnM6IA0KKyAgLSBFbnRlciBkYXRhIHRvIGJlIHRyZWF0ZWQgaW4gdGhlIElOIEZJRk8gOiB1c2luZyBDUllQX0RhdGFJbigpIGZ1bmN0aW9uLg0KKyAgLSBHZXQgdGhlIGRhdGEgcmVzdWx0IGZyb20gdGhlIE9VVCBGSUZPIDogdXNpbmcgQ1JZUF9EYXRhT3V0KCkgZnVuY3Rpb24uDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFdyaXRlcyBkYXRhIGluIHRoZSBEYXRhIElucHV0IHJlZ2lzdGVyIChESU4pLg0KKyAgKiBAbm90ZSAgIEFmdGVyIHRoZSBESU4gcmVnaXN0ZXIgaGFzIGJlZW4gcmVhZCBvbmNlIG9yIHNldmVyYWwgdGltZXMsIA0KKyAgKiAgICAgICAgIHRoZSBGSUZPIG11c3QgYmUgZmx1c2hlZCAodXNpbmcgQ1JZUF9GSUZPRmx1c2goKSBmdW5jdGlvbikuICANCisgICogQHBhcmFtICBEYXRhOiBkYXRhIHRvIHdyaXRlIGluIERhdGEgSW5wdXQgcmVnaXN0ZXINCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQ1JZUF9EYXRhSW4odWludDMyX3QgRGF0YSkNCit7DQorICBDUllQLT5EUiA9IERhdGE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGxhc3QgZGF0YSBlbnRlcmVkIGludG8gdGhlIG91dHB1dCBGSUZPLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBMYXN0IGRhdGEgZW50ZXJlZCBpbnRvIHRoZSBvdXRwdXQgRklGTy4NCisgICovDQordWludDMyX3QgQ1JZUF9EYXRhT3V0KHZvaWQpDQorew0KKyAgcmV0dXJuIENSWVAtPkRPVVQ7DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisgIA0KKy8qKiBAZGVmZ3JvdXAgQ1JZUF9Hcm91cDMgQ29udGV4dCBzd2FwcGluZyBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgQ29udGV4dCBzd2FwcGluZyBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0IHN3YXBwaW5nIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gc2F2ZSBhbmQgc3RvcmUgQ1JZUCBDb250ZXh0DQorDQorICBJdCBpcyBwb3NzaWJsZSB0byBpbnRlcnJ1cHQgYW4gZW5jcnlwdGlvbi8gZGVjcnlwdGlvbi8ga2V5IGdlbmVyYXRpb24gcHJvY2VzcyANCisgIHRvIHBlcmZvcm0gYW5vdGhlciBwcm9jZXNzaW5nIHdpdGggYSBoaWdoZXIgcHJpb3JpdHksIGFuZCB0byBjb21wbGV0ZSB0aGUgDQorICBpbnRlcnJ1cHRlZCBwcm9jZXNzIGxhdGVyIG9uLCB3aGVuIHRoZSBoaWdoZXItcHJpb3JpdHkgdGFzayBpcyBjb21wbGV0ZS4gVG8gZG8gDQorICBzbywgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIHRhc2sgbXVzdCBiZSBzYXZlZCBmcm9tIHRoZSBDUllQIHJlZ2lzdGVycyANCisgIHRvIG1lbW9yeSwgYW5kIHRoZW4gYmUgcmVzdG9yZWQgZnJvbSBtZW1vcnkgdG8gdGhlIENSWVAgcmVnaXN0ZXJzLg0KKyAgIA0KKyAgMS4gVG8gc2F2ZSB0aGUgY3VycmVudCBjb250ZXh0LCB1c2UgQ1JZUF9TYXZlQ29udGV4dCgpIGZ1bmN0aW9uDQorICAyLiBUbyByZXN0b3JlIHRoZSBzYXZlZCBjb250ZXh0LCB1c2UgQ1JZUF9SZXN0b3JlQ29udGV4dCgpIGZ1bmN0aW9uIA0KKw0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIFNhdmVzIHRoZSBDUllQIHBlcmlwaGVyYWwgQ29udGV4dC4gDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBzdG9wcyBETUEgdHJhbnNmZXIgYmVmb3JlIHRvIHNhdmUgdGhlIGNvbnRleHQuIEFmdGVyIA0KKyAgKiAgICAgICAgIHJlc3RvcmluZyB0aGUgY29udGV4dCwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZSBETUEgYWdhaW4gKGlmIHRoZSBETUENCisgICogICAgICAgICB3YXMgcHJldmlvdXNseSB1c2VkKS4NCisgICogQHBhcmFtICBDUllQX0NvbnRleHRTYXZlOiBwb2ludGVyIHRvIGEgQ1JZUF9Db250ZXh0IHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIHJlcG9zaXRvcnkgZm9yIGN1cnJlbnQgY29udGV4dC4NCisgICogQHBhcmFtICBDUllQX0tleUluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBDUllQX0tleUluaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IA0KKyAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgQ1JZUCBLZXlzLiAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCitFcnJvclN0YXR1cyBDUllQX1NhdmVDb250ZXh0KENSWVBfQ29udGV4dCogQ1JZUF9Db250ZXh0U2F2ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBfS2V5SW5pdFR5cGVEZWYqIENSWVBfS2V5SW5pdFN0cnVjdCkNCit7DQorICBfX0lPIHVpbnQzMl90IHRpbWVvdXQgPSAwOw0KKyAgdWludDMyX3QgY2tlY2ttYXNrID0gMCwgYml0c3RhdHVzOyAgICANCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IEVSUk9SOw0KKw0KKyAgLyogU3RvcCBETUEgdHJhbnNmZXJzIG9uIHRoZSBJTiBGSUZPIGJ5IGNsZWFyaW5nIHRoZSBESUVOIGJpdCBpbiB0aGUgQ1JZUF9ETUFDUiAqLw0KKyAgQ1JZUC0+RE1BQ1IgJj0gfih1aW50MzJfdClDUllQX0RNQUNSX0RJRU47DQorICAgIA0KKyAgLyogV2FpdCB1bnRpbCBib3RoIHRoZSBJTiBhbmQgT1VUIEZJRk9zIGFyZSBlbXB0eSAgDQorICAgIChJRkVNPTEgYW5kIE9GTkU9MCBpbiB0aGUgQ1JZUF9TUiByZWdpc3RlcikgYW5kIHRoZSANCisgICAgIEJVU1kgYml0IGlzIGNsZWFyZWQuICovDQorDQorICBpZiAoKENSWVAtPkNSICYgKHVpbnQzMl90KShDUllQX0NSX0FMR09NT0RFX1RERVNfRUNCIHwgQ1JZUF9DUl9BTEdPTU9ERV9UREVTX0NCQykpICE9ICh1aW50MzJfdCkwICkvKiBUREVTICovDQorICB7IA0KKyAgICBja2Vja21hc2sgPSAgQ1JZUF9TUl9JRkVNIHwgQ1JZUF9TUl9CVVNZIDsNCisgIH0NCisgIGVsc2UgLyogQUVTIG9yIERFUyAqLw0KKyAgew0KKyAgICBja2Vja21hc2sgPSAgQ1JZUF9TUl9JRkVNIHwgQ1JZUF9TUl9CVVNZIHwgQ1JZUF9TUl9PRk5FOw0KKyAgfSAgICAgICAgICAgDQorICAgDQorICBkbyANCisgIHsNCisgICAgYml0c3RhdHVzID0gQ1JZUC0+U1IgJiBja2Vja21hc2s7DQorICAgIHRpbWVvdXQrKzsNCisgIH0NCisgIHdoaWxlICgodGltZW91dCAhPSBNQVhfVElNRU9VVCkgJiYgKGJpdHN0YXR1cyAhPSBDUllQX1NSX0lGRU0pKTsNCisgICAgIA0KKyAgaWYgKChDUllQLT5TUiAmIGNrZWNrbWFzaykgIT0gQ1JZUF9TUl9JRkVNKQ0KKyAgew0KKyAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0NCisgIGVsc2UNCisgIHsgICAgICANCisgICAgLyogU3RvcCBETUEgdHJhbnNmZXJzIG9uIHRoZSBPVVQgRklGTyBieSANCisgICAgICAgLSB3cml0aW5nIHRoZSBET0VOIGJpdCB0byAwIGluIHRoZSBDUllQX0RNQUNSIHJlZ2lzdGVyIA0KKyAgICAgICAtIGFuZCBjbGVhciB0aGUgQ1JZUEVOIGJpdC4gKi8NCisNCisgICAgQ1JZUC0+RE1BQ1IgJj0gfih1aW50MzJfdClDUllQX0RNQUNSX0RPRU47DQorICAgIENSWVAtPkNSICY9IH4odWludDMyX3QpQ1JZUF9DUl9DUllQRU47DQorDQorICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiAoYml0cyBbOToyXSBpbiB0aGUgQ1JZUF9DUiByZWdpc3RlcikgKi8NCisgICAgQ1JZUF9Db250ZXh0U2F2ZS0+Q1JfYml0czl0bzIgID0gQ1JZUC0+Q1IgJiAoQ1JZUF9DUl9LRVlTSVpFICB8IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQX0NSX0RBVEFUWVBFIHwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSWVBfQ1JfQUxHT01PREUgfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQX0NSX0FMR09ESVIpOyANCisNCisgICAgLyogYW5kLCBpZiBub3QgaW4gRUNCIG1vZGUsIHRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3JzLiAqLw0KKyAgICBDUllQX0NvbnRleHRTYXZlLT5DUllQX0lWMExSID0gQ1JZUC0+SVYwTFI7DQorICAgIENSWVBfQ29udGV4dFNhdmUtPkNSWVBfSVYwUlIgPSBDUllQLT5JVjBSUjsNCisgICAgQ1JZUF9Db250ZXh0U2F2ZS0+Q1JZUF9JVjFMUiA9IENSWVAtPklWMUxSOw0KKyAgICBDUllQX0NvbnRleHRTYXZlLT5DUllQX0lWMVJSID0gQ1JZUC0+SVYxUlI7DQorDQorICAgIC8qIHNhdmUgVGhlIGtleSB2YWx1ZSAqLw0KKyAgICBDUllQX0NvbnRleHRTYXZlLT5DUllQX0swTFIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MExlZnQ7IA0KKyAgICBDUllQX0NvbnRleHRTYXZlLT5DUllQX0swUlIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5MFJpZ2h0OyANCisgICAgQ1JZUF9Db250ZXh0U2F2ZS0+Q1JZUF9LMUxSID0gQ1JZUF9LZXlJbml0U3RydWN0LT5DUllQX0tleTFMZWZ0OyANCisgICAgQ1JZUF9Db250ZXh0U2F2ZS0+Q1JZUF9LMVJSID0gQ1JZUF9LZXlJbml0U3RydWN0LT5DUllQX0tleTFSaWdodDsgDQorICAgIENSWVBfQ29udGV4dFNhdmUtPkNSWVBfSzJMUiA9IENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkyTGVmdDsgDQorICAgIENSWVBfQ29udGV4dFNhdmUtPkNSWVBfSzJSUiA9IENSWVBfS2V5SW5pdFN0cnVjdC0+Q1JZUF9LZXkyUmlnaHQ7IA0KKyAgICBDUllQX0NvbnRleHRTYXZlLT5DUllQX0szTFIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5M0xlZnQ7IA0KKyAgICBDUllQX0NvbnRleHRTYXZlLT5DUllQX0szUlIgPSBDUllQX0tleUluaXRTdHJ1Y3QtPkNSWVBfS2V5M1JpZ2h0OyANCisNCisgICAvKiBXaGVuIG5lZWRlZCwgc2F2ZSB0aGUgRE1BIHN0YXR1cyAocG9pbnRlcnMgZm9yIElOIGFuZCBPVVQgbWVzc2FnZXMsIA0KKyAgICAgIG51bWJlciBvZiByZW1haW5pbmcgYnl0ZXMsIGV0Yy4pICovDQorICAgICANCisgICAgc3RhdHVzID0gU1VDQ0VTUzsNCisgIH0NCisNCisgICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXN0b3JlcyB0aGUgQ1JZUCBwZXJpcGhlcmFsIENvbnRleHQuDQorICAqIEBub3RlICAgU2luY2UgdGVoIERNQSB0cmFuc2ZlciBpcyBzdG9wcGVkIGluIENSWVBfU2F2ZUNvbnRleHQoKSBmdW5jdGlvbiwNCisgICogICAgICAgICBhZnRlciByZXN0b3JpbmcgdGhlIGNvbnRleHQsIHlvdSBoYXZlIHRvIGVuYWJsZSB0aGUgRE1BIGFnYWluIChpZiB0aGUNCisgICogICAgICAgICBETUEgd2FzIHByZXZpb3VzbHkgdXNlZCkuICANCisgICogQHBhcmFtICBDUllQX0NvbnRleHRSZXN0b3JlOiBwb2ludGVyIHRvIGEgQ1JZUF9Db250ZXh0IHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIHJlcG9zaXRvcnkgZm9yIHNhdmVkIGNvbnRleHQuDQorICAqIEBub3RlICAgVGhlIGRhdGEgdGhhdCB3ZXJlIHNhdmVkIGR1cmluZyBjb250ZXh0IHNhdmluZyBtdXN0IGJlIHJld3JpdGVkIGludG8NCisgICogICAgICAgICB0aGUgSU4gRklGTy4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgQ1JZUF9SZXN0b3JlQ29udGV4dChDUllQX0NvbnRleHQqIENSWVBfQ29udGV4dFJlc3RvcmUpICANCit7DQorDQorICAvKiBDb25maWd1cmUgdGhlIHByb2Nlc3NvciB3aXRoIHRoZSBzYXZlZCBjb25maWd1cmF0aW9uICovDQorICBDUllQLT5DUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSX2JpdHM5dG8yOw0KKw0KKyAgLyogcmVzdG9yZSBUaGUga2V5IHZhbHVlICovDQorICBDUllQLT5LMExSID0gQ1JZUF9Db250ZXh0UmVzdG9yZS0+Q1JZUF9LMExSOyANCisgIENSWVAtPkswUlIgPSBDUllQX0NvbnRleHRSZXN0b3JlLT5DUllQX0swUlI7DQorICBDUllQLT5LMUxSID0gQ1JZUF9Db250ZXh0UmVzdG9yZS0+Q1JZUF9LMUxSOw0KKyAgQ1JZUC0+SzFSUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSWVBfSzFSUjsNCisgIENSWVAtPksyTFIgPSBDUllQX0NvbnRleHRSZXN0b3JlLT5DUllQX0syTFI7DQorICBDUllQLT5LMlJSID0gQ1JZUF9Db250ZXh0UmVzdG9yZS0+Q1JZUF9LMlJSOw0KKyAgQ1JZUC0+SzNMUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSWVBfSzNMUjsNCisgIENSWVAtPkszUlIgPSBDUllQX0NvbnRleHRSZXN0b3JlLT5DUllQX0szUlI7DQorDQorICAvKiBhbmQgdGhlIGluaXRpYWxpemF0aW9uIHZlY3RvcnMuICovDQorICBDUllQLT5JVjBMUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSWVBfSVYwTFI7DQorICBDUllQLT5JVjBSUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSWVBfSVYwUlI7DQorICBDUllQLT5JVjFMUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSWVBfSVYxTFI7DQorICBDUllQLT5JVjFSUiA9IENSWVBfQ29udGV4dFJlc3RvcmUtPkNSWVBfSVYxUlI7DQorDQorICAvKiBFbmFibGUgdGhlIGNyeXB0b2dyYXBoaWMgcHJvY2Vzc29yICovDQorICBDUllQLT5DUiB8PSBDUllQX0NSX0NSWVBFTjsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgQ1JZUF9Hcm91cDQgQ1JZUCdzIERNQSBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBmdW5jdGlvbg0KKyAqICBAYnJpZWYgICBDUllQJ3MgRE1BIGludGVyZmFjZSBDb25maWd1cmF0aW9uIGZ1bmN0aW9uIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgQ1JZUCdzIERNQSBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBmdW5jdGlvbg0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBETUEgaW50ZXJmYWNlIGZvciANCisgIENSWVAgZGF0YSBpbnB1dCBhbmQgb3V0cHV0IHRyYW5zZmVyLg0KKyAgIA0KKyAgV2hlbiB0aGUgRE1BIG1vZGUgaXMgZW5hYmxlZCAodXNpbmcgdGhlIENSWVBfRE1BQ21kKCkgZnVuY3Rpb24pLCBkYXRhIGNhbiBiZSANCisgIHRyYW5zZmVycmVkOg0KKyAgLSBGcm9tIG1lbW9yeSB0byB0aGUgQ1JZUCBJTiBGSUZPIHVzaW5nIHRoZSBETUEgcGVyaXBoZXJhbCBieSBlbmFibGluZyANCisgICAgdGhlIENSWVBfRE1BUmVxX0RhdGFJTiByZXF1ZXN0Lg0KKyAgLSBGcm9tIHRoZSBDUllQIE9VVCBGSUZPIHRvIHRoZSBtZW1vcnkgdXNpbmcgdGhlIERNQSBwZXJpcGhlcmFsIGJ5IGVuYWJsaW5nIA0KKyAgICB0aGUgQ1JZUF9ETUFSZXFfRGF0YU9VVCByZXF1ZXN0Lg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBDUllQIERNQSBpbnRlcmZhY2UuDQorICAqIEBwYXJhbSAgQ1JZUF9ETUFSZXE6IHNwZWNpZmllcyB0aGUgQ1JZUCBETUEgdHJhbnNmZXIgcmVxdWVzdCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgKiAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIENSWVBfRE1BUmVxX0RhdGFPVVQ6IERNQSBmb3Igb3V0Z29pbmcoVHgpIGRhdGEgdHJhbnNmZXINCisgICogICAgICAgICAgICBAYXJnIENSWVBfRE1BUmVxX0RhdGFJTjogRE1BIGZvciBpbmNvbWluZyhSeCkgZGF0YSB0cmFuc2Zlcg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIENSWVAgRE1BIHRyYW5zZmVyIHJlcXVlc3QuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENSWVBfRE1BQ21kKHVpbnQ4X3QgQ1JZUF9ETUFSZXEsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0NSWVBfRE1BUkVRKENSWVBfRE1BUmVxKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQ1JZUCBETUEgcmVxdWVzdCAqLw0KKyAgICBDUllQLT5ETUFDUiB8PSBDUllQX0RNQVJlcTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQ1JZUCBETUEgcmVxdWVzdCAqLw0KKyAgICBDUllQLT5ETUFDUiAmPSAodWludDhfdCl+Q1JZUF9ETUFSZXE7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVBfR3JvdXA1IEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBDUllQIEludGVycnVwdHMgYW5kIA0KKyAgdG8gZ2V0IHRoZSBzdGF0dXMgYW5kIEludGVycnVwdHMgcGVuZGluZyBiaXRzLg0KKw0KKyAgVGhlIENSWVAgcHJvdmlkZXMgMiBJbnRlcnJ1cHRzIHNvdXJjZXMgYW5kIDcgRmxhZ3M6DQorDQorICBGbGFncyA6DQorICAtLS0tLS0tIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAxLiBDUllQX0ZMQUdfSUZFTSA6ICBTZXQgd2hlbiBJbnB1dCBGSUZPIGlzIGVtcHR5Lg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBGbGFnIGlzIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4NCisgICAgICANCisgICAgIDIuIENSWVBfRkxBR19JRk5GIDogIFNldCB3aGVuIElucHV0IEZJRk8gaXMgbm90IGZ1bGwuDQorICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKw0KKw0KKyAgICAgMy4gQ1JZUF9GTEFHX0lOUklTICA6IFNldCB3aGVuIElucHV0IEZJRk8gUmF3IGludGVycnVwdCBpcyBwZW5kaW5nIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGdpdmVzIHRoZSByYXcgaW50ZXJydXB0IHN0YXRlIHByaW9yIHRvIG1hc2tpbmcgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGlucHV0IEZJRk8gc2VydmljZSBpbnRlcnJ1cHQuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBGbGFnIGlzIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4NCisgICAgIA0KKyAgICAgNC4gQ1JZUF9GTEFHX09GTkUgICA6IFNldCB3aGVuIE91dHB1dCBGSUZPIG5vdCBlbXB0eS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgDQorICAgICA1LiBDUllQX0ZMQUdfT0ZGVSAgIDogU2V0IHdoZW4gT3V0cHV0IEZJRk8gaXMgZnVsbC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgNi4gQ1JZUF9GTEFHX09VVFJJUyA6IFNldCB3aGVuIE91dHB1dCBGSUZPIFJhdyBpbnRlcnJ1cHQgaXMgcGVuZGluZyANCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBnaXZlcyB0aGUgcmF3IGludGVycnVwdCBzdGF0ZSBwcmlvciB0byBtYXNraW5nIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBvdXRwdXQgRklGTyBzZXJ2aWNlIGludGVycnVwdC4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgIDcuIENSWVBfRkxBR19CVVNZICAgOiBTZXQgd2hlbiB0aGUgQ1JZUCBjb3JlIGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIGEgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgb2YgZGF0YSBvciBhIGtleSBwcmVwYXJhdGlvbiAoZm9yIEFFUyANCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNyeXB0aW9uKS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIEZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IGhhcmR3YXJlLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGNsZWFyIGl0LCB0aGUgQ1JZUCBjb3JlIG11c3QgYmUgZGlzYWJsZWQgYW5kIHRoZSANCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IHByb2Nlc3NpbmcgaGFzIGNvbXBsZXRlZC4gDQorDQorICBJbnRlcnJ1cHRzIDoNCisgIC0tLS0tLS0tLS0tLQ0KKw0KKyAgIDEuIENSWVBfSVRfSU5JICAgOiBUaGUgaW5wdXQgRklGTyBzZXJ2aWNlIGludGVycnVwdCBpcyBhc3NlcnRlZCB3aGVuIHRoZXJlIA0KKyAgICAgICAgICAgICAgICAgICAgICBhcmUgbGVzcyB0aGFuIDQgd29yZHMgaW4gdGhlIGlucHV0IEZJRk8uDQorICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaW50ZXJydXB0IGlzIGFzc29jaWF0ZWQgdG8gQ1JZUF9GTEFHX0lOUklTIGZsYWcuDQorDQorICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgaW50ZXJydXB0IGlzIGNsZWFyZWQgYnkgcGVyZm9ybWluZyB3cml0ZSBvcGVyYXRpb25zIA0KKyAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgaW5wdXQgRklGTyB1bnRpbCBpdCBob2xkcyA0IG9yIG1vcmUgd29yZHMuIFRoZSANCisgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgRklGTyBzZXJ2aWNlIGludGVycnVwdCBJTk1JUyBpcyBlbmFibGVkIHdpdGggdGhlIA0KKyAgICAgICAgICAgICAgICAgICAgICBDUllQIGVuYWJsZSBiaXQuIENvbnNlcXVlbnRseSwgd2hlbiBDUllQIGlzIGRpc2FibGVkLCB0aGUgDQorICAgICAgICAgICAgICAgICAgICAgIElOTUlTIHNpZ25hbCBpcyBsb3cgZXZlbiBpZiB0aGUgaW5wdXQgRklGTyBpcyBlbXB0eS4NCisNCisNCisNCisgICAyLiBDUllQX0lUX09VVEkgIDogVGhlIG91dHB1dCBGSUZPIHNlcnZpY2UgaW50ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gdGhlcmUgDQorICAgICAgICAgICAgICAgICAgICAgIGlzIG9uZSBvciBtb3JlICgzMi1iaXQgd29yZCkgZGF0YSBpdGVtcyBpbiB0aGUgb3V0cHV0IEZJRk8uDQorICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaW50ZXJydXB0IGlzIGFzc29jaWF0ZWQgdG8gQ1JZUF9GTEFHX09VVFJJUyBmbGFnLg0KKw0KKyAgICAgICAgICAgICAgICBAbm90ZSBUaGlzIGludGVycnVwdCBpcyBjbGVhcmVkIGJ5IHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgDQorICAgICAgICAgICAgICAgICAgICAgIEZJRk8gdW50aWwgdGhlcmUgaXMgbm8gdmFsaWQgKDMyLWJpdCkgd29yZCBsZWZ0ICh0aGF0IGlzLCANCisgICAgICAgICAgICAgICAgICAgICAgdGhlIGludGVycnVwdCBmb2xsb3dzIHRoZSBzdGF0ZSBvZiB0aGUgT0ZORSAob3V0cHV0IEZJRk8gDQorICAgICAgICAgICAgICAgICAgICAgIG5vdCBlbXB0eSkgZmxhZykuDQorDQorDQorICBNYW5hZ2luZyB0aGUgQ1JZUCBjb250cm9sbGVyIGV2ZW50cyA6DQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gDQorICBUaGUgdXNlciBzaG91bGQgaWRlbnRpZnkgd2hpY2ggbW9kZSB3aWxsIGJlIHVzZWQgaW4gaGlzIGFwcGxpY2F0aW9uIHRvIG1hbmFnZSANCisgIHRoZSBDUllQIGNvbnRyb2xsZXIgZXZlbnRzOiBQb2xsaW5nIG1vZGUgb3IgSW50ZXJydXB0IG1vZGUuDQorDQorICAxLiAgSW4gdGhlIFBvbGxpbmcgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAtIENSWVBfR2V0RmxhZ1N0YXR1cygpIDogdG8gY2hlY2sgaWYgZmxhZ3MgZXZlbnRzIG9jY3VyLiANCisNCisgIEBub3RlICBUaGUgQ1JZUFQgZmxhZ3MgZG8gbm90IG5lZWQgdG8gYmUgY2xlYXJlZCBzaW5jZSB0aGV5IGFyZSBjbGVhcmVkIGFzIA0KKyAgICAgICAgIHNvb24gYXMgdGhlIGFzc29jaWF0ZWQgZXZlbnQgYXJlIHJlc2V0LiAgIA0KKw0KKw0KKyAgMi4gIEluIHRoZSBJbnRlcnJ1cHQgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAtIENSWVBfSVRDb25maWcoKSAgICAgICA6IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgc291cmNlLg0KKyAgICAgIC0gQ1JZUF9HZXRJVFN0YXR1cygpICAgIDogdG8gY2hlY2sgaWYgSW50ZXJydXB0IG9jY3Vycy4NCisNCisgIEBub3RlICBUaGUgQ1JZUFQgaW50ZXJydXB0cyBoYXZlIG5vIHBlbmRpbmcgYml0cywgdGhlIGludGVycnVwdCBpcyBjbGVhcmVkIGFzIA0KKyAgICAgICAgIHNvb24gYXMgdGhlIGFzc29jaWF0ZWQgZXZlbnQgaXMgcmVzZXQuIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8gDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIENSWVAgaW50ZXJydXB0cy4NCisgICogQHBhcmFtICBDUllQX0lUOiBzcGVjaWZpZXMgdGhlIENSWVAgaW50ZXJydXB0IHNvdXJjZSB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQ1JZUF9JVF9JTkk6IElucHV0IEZJRk8gaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBDUllQX0lUX09VVEk6IE91dHB1dCBGSUZPIGludGVycnVwdA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBDUllQIGludGVycnVwdC4NCisgICogICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIENSWVBfSVRDb25maWcodWludDhfdCBDUllQX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DUllQX0NPTkZJR19JVChDUllQX0lUKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgQ1JZUCBpbnRlcnJ1cHQgKi8NCisgICAgQ1JZUC0+SU1TQ1IgfD0gQ1JZUF9JVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgQ1JZUCBpbnRlcnJ1cHQgKi8NCisgICAgQ1JZUC0+SU1TQ1IgJj0gKHVpbnQ4X3QpfkNSWVBfSVQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgQ1JZUCBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgc3RhdHVzIG9mIHRoZSBtYXNrZWQgaW50ZXJydXB0IChpLmUgdGhlIA0KKyAgKiAgICAgICAgIGludGVycnVwdCBzaG91bGQgYmUgcHJldmlvdXNseSBlbmFibGVkKS4gICAgIA0KKyAgKiBAcGFyYW0gIENSWVBfSVQ6IHNwZWNpZmllcyB0aGUgQ1JZUCAobWFza2VkKSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIENSWVBfSVRfSU5JOiBJbnB1dCBGSUZPIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgQ1JZUF9JVF9PVVRJOiBPdXRwdXQgRklGTyBpbnRlcnJ1cHQNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIENSWVBfSVQgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0lUU3RhdHVzIENSWVBfR2V0SVRTdGF0dXModWludDhfdCBDUllQX0lUKQ0KK3sNCisgIElUU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19DUllQX0dFVF9JVChDUllQX0lUKSk7DQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgQ1JZUCBpbnRlcnJ1cHQgKi8NCisgIGlmICgoQ1JZUC0+TUlTUiAmICBDUllQX0lUKSAhPSAodWludDhfdClSRVNFVCkNCisgIHsNCisgICAgLyogQ1JZUF9JVCBpcyBzZXQgKi8NCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBDUllQX0lUIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBDUllQX0lUIHN0YXR1cyAqLw0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBDUllQIGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBDUllQX0ZMQUc6IHNwZWNpZmllcyB0aGUgQ1JZUCBmbGFnIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgQ1JZUF9GTEFHX0lGRU06IElucHV0IEZJRk8gRW1wdHkgZmxhZy4NCisgICogICAgICAgICAgICBAYXJnIENSWVBfRkxBR19JRk5GOiBJbnB1dCBGSUZPIE5vdCBGdWxsIGZsYWcuDQorICAqICAgICAgICAgICAgQGFyZyBDUllQX0ZMQUdfT0ZORTogT3V0cHV0IEZJRk8gTm90IEVtcHR5IGZsYWcuDQorICAqICAgICAgICAgICAgQGFyZyBDUllQX0ZMQUdfT0ZGVTogT3V0cHV0IEZJRk8gRnVsbCBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgQ1JZUF9GTEFHX0JVU1k6IEJ1c3kgZmxhZy4NCisgICogICAgICAgICAgICBAYXJnIENSWVBfRkxBR19PVVRSSVM6IE91dHB1dCBGSUZPIHJhdyBpbnRlcnJ1cHQgZmxhZy4NCisgICogICAgICAgICAgICBAYXJnIENSWVBfRkxBR19JTlJJUzogSW5wdXQgRklGTyByYXcgaW50ZXJydXB0IGZsYWcuDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBDUllQX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgQ1JZUF9HZXRGbGFnU3RhdHVzKHVpbnQ4X3QgQ1JZUF9GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCB0ZW1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfQ1JZUF9HRVRfRkxBRyhDUllQX0ZMQUcpKTsNCisNCisgIC8qIGNoZWNrIGlmIHRoZSBGTEFHIGlzIGluIFJJU1IgcmVnaXN0ZXIgKi8NCisgIGlmICgoQ1JZUF9GTEFHICYgRkxBR19NQVNLKSAhPSAweDAwKSANCisgIHsNCisgICAgdGVtcHJlZyA9IENSWVAtPlJJU1I7DQorICB9DQorICBlbHNlICAvKiBUaGUgRkxBRyBpcyBpbiBTUiByZWdpc3RlciAqLw0KKyAgew0KKyAgICB0ZW1wcmVnID0gQ1JZUC0+U1I7DQorICB9DQorDQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgQ1JZUCBmbGFnICovDQorICBpZiAoKHRlbXByZWcgJiBDUllQX0ZMQUcgKSAhPSAodWludDhfdClSRVNFVCkNCisgIHsNCisgICAgLyogQ1JZUF9GTEFHIGlzIHNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIENSWVBfRkxBRyBpcyByZXNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisNCisgIC8qIFJldHVybiB0aGUgQ1JZUF9GTEFHIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfY3J5cF9hZXMuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfY3J5cF9hZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTUyMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwX2Flcy5jCkBAIC0wLDAgKzEsNjQ0IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfY3J5cF9hZXMuYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIHRvIGVuY3J5cHQgYW5kIGRlY3J5cHQgYW4gDQorICAqICAgICAgICAgIGlucHV0IG1lc3NhZ2UgdXNpbmcgQUVTIGluIEVDQi9DQkMvQ1RSIG1vZGVzLg0KKyAgKiAgICAgICAgICBJdCB1c2VzIHRoZSBzdG0zMmYyeHhfY3J5cC5jLy5oIGRyaXZlcnMgdG8gYWNjZXNzIHRoZSBTVE0zMkYyeHggQ1JZUA0KKyAgKiAgICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKg0KKyAgKiAgQHZlcmJhdGltDQorICAqDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAxLiBFbmFibGUgVGhlIENSWVAgY29udHJvbGxlciBjbG9jayB1c2luZyANCisgICogICAgICAgICAgICBSQ0NfQUhCMlBlcmlwaENsb2NrQ21kKFJDQ19BSEIyUGVyaXBoX0NSWVAsIEVOQUJMRSk7IGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgICAyLiBFbmNyeXB0IGFuZCBkZWNyeXB0IHVzaW5nIEFFUyBpbiBFQ0IgTW9kZSB1c2luZyBDUllQX0FFU19FQ0IoKQ0KKyAgKiAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgMy4gRW5jcnlwdCBhbmQgZGVjcnlwdCB1c2luZyBBRVMgaW4gQ0JDIE1vZGUgdXNpbmcgQ1JZUF9BRVNfQ0JDKCkNCisgICogICAgICAgICAgICAgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDQuIEVuY3J5cHQgYW5kIGRlY3J5cHQgdXNpbmcgQUVTIGluIENUUiBNb2RlIHVzaW5nIENSWVBfQUVTX0NUUigpDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfY3J5cC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVAgDQorICAqIEBicmllZiBDUllQIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLw0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZGVmaW5lIEFFU0JVU1lfVElNRU9VVCAgICAoKHVpbnQzMl90KSAweDAwMDEwMDAwKQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBDUllQX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIENSWVBfR3JvdXA2IEhpZ2ggTGV2ZWwgQUVTIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBIaWdoIExldmVsIEFFUyBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgSGlnaCBMZXZlbCBBRVMgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5jcnlwdCBhbmQgZGVjcnlwdCB1c2luZyBBRVMgaW4gRUNCIE1vZGUNCisgICogQHBhcmFtICBNb2RlOiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gTW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIE1PREVfRU5DUllQVDogRW5jcnlwdGlvbg0KKyAgKiAgICAgICAgICAgIEBhcmcgTU9ERV9ERUNSWVBUOiBEZWNyeXB0aW9uDQorICAqIEBwYXJhbSAgS2V5OiBLZXkgdXNlZCBmb3IgQUVTIGFsZ29yaXRobS4NCisgICogQHBhcmFtICBLZXlzaXplOiBsZW5ndGggb2YgdGhlIEtleSwgbXVzdCBiZSBhIDEyOCwgMTkyIG9yIDI1Ni4NCisgICogQHBhcmFtICBJbnB1dDogcG9pbnRlciB0byB0aGUgSW5wdXQgYnVmZmVyLg0KKyAgKiBAcGFyYW0gIElsZW5ndGg6IGxlbmd0aCBvZiB0aGUgSW5wdXQgYnVmZmVyLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuDQorICAqIEBwYXJhbSAgT3V0cHV0OiBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogT3BlcmF0aW9uIGRvbmUNCisgICogICAgICAgICAgLSBFUlJPUjogT3BlcmF0aW9uIGZhaWxlZA0KKyAgKi8NCitFcnJvclN0YXR1cyBDUllQX0FFU19FQ0IodWludDhfdCBNb2RlLCB1aW50OF90KiBLZXksIHVpbnQxNl90IEtleXNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIElucHV0LCB1aW50MzJfdCBJbGVuZ3RoLCB1aW50OF90KiBPdXRwdXQpDQorew0KKyAgQ1JZUF9Jbml0VHlwZURlZiBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlOw0KKyAgQ1JZUF9LZXlJbml0VHlwZURlZiBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlOw0KKyAgX19JTyB1aW50MzJfdCBjb3VudGVyID0gMDsNCisgIHVpbnQzMl90IGJ1c3lzdGF0dXMgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsNCisgIHVpbnQzMl90IGtleWFkZHIgICAgPSAodWludDMyX3QpS2V5Ow0KKyAgdWludDMyX3QgaW5wdXRhZGRyICA9ICh1aW50MzJfdClJbnB1dDsNCisgIHVpbnQzMl90IG91dHB1dGFkZHIgPSAodWludDMyX3QpT3V0cHV0Ow0KKyAgdWludDMyX3QgaSA9IDA7DQorDQorICAvKiBDcnlwdG8gc3RydWN0dXJlcyBpbml0aWFsaXNhdGlvbiovDQorICBDUllQX0tleVN0cnVjdEluaXQoJkFFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgc3dpdGNoKEtleXNpemUpDQorICB7DQorICAgIGNhc2UgMTI4Og0KKyAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfS2V5U2l6ZSA9IENSWVBfS2V5U2l6ZV8xMjhiOw0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBicmVhazsNCisgICAgY2FzZSAxOTI6DQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9LZXlTaXplICA9IENSWVBfS2V5U2l6ZV8xOTJiOw0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MUxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBicmVhazsNCisgICAgY2FzZSAyNTY6DQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9LZXlTaXplICA9IENSWVBfS2V5U2l6ZV8yNTZiOw0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MExlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MFJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MUxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgYnJlYWs7DQorICB9DQorDQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLSBBRVMgRGVjcnlwdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgaWYoTW9kZSA9PSBNT0RFX0RFQ1JZUFQpIC8qIEFFUyBkZWNyeXB0aW9uICovDQorICB7DQorICAgIC8qIEZsdXNoIElOL09VVCBGSUZPcyAqLw0KKyAgICBDUllQX0ZJRk9GbHVzaCgpOw0KKw0KKyAgICAvKiBDcnlwdG8gSW5pdCBmb3IgS2V5IHByZXBhcmF0aW9uIGZvciBkZWNyeXB0aW9uIHByb2Nlc3MgKi8NCisgICAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29EaXIgPSBDUllQX0FsZ29EaXJfRGVjcnlwdDsNCisgICAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29Nb2RlID0gQ1JZUF9BbGdvTW9kZV9BRVNfS2V5Ow0KKyAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfRGF0YVR5cGUgPSBDUllQX0RhdGFUeXBlXzMyYjsNCisgICAgQ1JZUF9Jbml0KCZBRVNfQ1JZUF9Jbml0U3RydWN0dXJlKTsNCisNCisgICAgLyogS2V5IEluaXRpYWxpc2F0aW9uICovDQorICAgIENSWVBfS2V5SW5pdCgmQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZSk7DQorDQorICAgIC8qIEVuYWJsZSBDcnlwdG8gcHJvY2Vzc29yICovDQorICAgIENSWVBfQ21kKEVOQUJMRSk7DQorDQorICAgIC8qIHdhaXQgdW50aWwgdGhlIEJ1c3kgZmxhZyBpcyBSRVNFVCAqLw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgYnVzeXN0YXR1cyA9IENSWVBfR2V0RmxhZ1N0YXR1cyhDUllQX0ZMQUdfQlVTWSk7DQorICAgICAgY291bnRlcisrOw0KKyAgICB9d2hpbGUgKChjb3VudGVyICE9IEFFU0JVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICAgew0KKyAgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAvKiBDcnlwdG8gSW5pdCBmb3IgZGVjcnlwdGlvbiBwcm9jZXNzICovICANCisgICAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb0RpciA9IENSWVBfQWxnb0Rpcl9EZWNyeXB0Ow0KKyAgICB9DQorICB9DQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLSBBRVMgRW5jcnlwdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgZWxzZSAvKiBBRVMgZW5jcnlwdGlvbiAqLw0KKyAgew0KKw0KKyAgICBDUllQX0tleUluaXQoJkFFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgICAvKiBDcnlwdG8gSW5pdCBmb3IgRW5jcnlwdGlvbiBwcm9jZXNzICovDQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyICA9IENSWVBfQWxnb0Rpcl9FbmNyeXB0Ow0KKyAgfQ0KKw0KKyAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29Nb2RlID0gQ1JZUF9BbGdvTW9kZV9BRVNfRUNCOw0KKyAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0RhdGFUeXBlID0gQ1JZUF9EYXRhVHlwZV84YjsNCisgIENSWVBfSW5pdCgmQUVTX0NSWVBfSW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBGbHVzaCBJTi9PVVQgRklGT3MgKi8NCisgIENSWVBfRklGT0ZsdXNoKCk7DQorDQorICAvKiBFbmFibGUgQ3J5cHRvIHByb2Nlc3NvciAqLw0KKyAgQ1JZUF9DbWQoRU5BQkxFKTsNCisNCisgIGZvcihpPTA7ICgoaTxJbGVuZ3RoKSAmJiAoc3RhdHVzICE9IEVSUk9SKSk7IGkrPTE2KQ0KKyAgew0KKw0KKyAgICAvKiBXcml0ZSB0aGUgSW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8NCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorICAgIENSWVBfRGF0YUluKCoodWludDMyX3QqKShpbnB1dGFkZHIpKTsNCisgICAgaW5wdXRhZGRyKz00Ow0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorDQorICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgaGFzIGJlZW4gcHJvY2Vzc2VkICovDQorICAgIGNvdW50ZXIgPSAwOw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgYnVzeXN0YXR1cyA9IENSWVBfR2V0RmxhZ1N0YXR1cyhDUllQX0ZMQUdfQlVTWSk7DQorICAgICAgY291bnRlcisrOw0KKyAgICB9d2hpbGUgKChjb3VudGVyICE9IEFFU0JVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICAgew0KKyAgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisNCisgICAgICAvKiBSZWFkIHRoZSBPdXRwdXQgYmxvY2sgZnJvbSB0aGUgT3V0cHV0IEZJRk8gKi8NCisgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgPSBDUllQX0RhdGFPdXQoKTsNCisgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSA9IENSWVBfRGF0YU91dCgpOw0KKyAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgPSBDUllQX0RhdGFPdXQoKTsgDQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBDcnlwdG8gKi8NCisgIENSWVBfQ21kKERJU0FCTEUpOw0KKw0KKyAgcmV0dXJuIHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuY3J5cHQgYW5kIGRlY3J5cHQgdXNpbmcgQUVTIGluIENCQyBNb2RlDQorICAqIEBwYXJhbSAgTW9kZTogZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIE1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBNT0RFX0VOQ1JZUFQ6IEVuY3J5cHRpb24NCisgICogICAgICAgICAgICBAYXJnIE1PREVfREVDUllQVDogRGVjcnlwdGlvbg0KKyAgKiBAcGFyYW0gIEluaXRWZWN0b3JzOiBJbml0aWFsaXNhdGlvbiBWZWN0b3JzIHVzZWQgZm9yIEFFUyBhbGdvcml0aG0uDQorICAqIEBwYXJhbSAgS2V5OiBLZXkgdXNlZCBmb3IgQUVTIGFsZ29yaXRobS4NCisgICogQHBhcmFtICBLZXlzaXplOiBsZW5ndGggb2YgdGhlIEtleSwgbXVzdCBiZSBhIDEyOCwgMTkyIG9yIDI1Ni4NCisgICogQHBhcmFtICBJbnB1dDogcG9pbnRlciB0byB0aGUgSW5wdXQgYnVmZmVyLg0KKyAgKiBAcGFyYW0gIElsZW5ndGg6IGxlbmd0aCBvZiB0aGUgSW5wdXQgYnVmZmVyLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuDQorICAqIEBwYXJhbSAgT3V0cHV0OiBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogT3BlcmF0aW9uIGRvbmUNCisgICogICAgICAgICAgLSBFUlJPUjogT3BlcmF0aW9uIGZhaWxlZA0KKyAgKi8NCitFcnJvclN0YXR1cyBDUllQX0FFU19DQkModWludDhfdCBNb2RlLCB1aW50OF90IEluaXRWZWN0b3JzWzE2XSwgdWludDhfdCAqS2V5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBLZXlzaXplLCB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqT3V0cHV0KQ0KK3sNCisgIENSWVBfSW5pdFR5cGVEZWYgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZTsNCisgIENSWVBfS2V5SW5pdFR5cGVEZWYgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZTsNCisgIENSWVBfSVZJbml0VHlwZURlZiBBRVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmU7DQorICBfX0lPIHVpbnQzMl90IGNvdW50ZXIgPSAwOw0KKyAgdWludDMyX3QgYnVzeXN0YXR1cyA9IDA7DQorICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOw0KKyAgdWludDMyX3Qga2V5YWRkciAgICA9ICh1aW50MzJfdClLZXk7DQorICB1aW50MzJfdCBpbnB1dGFkZHIgID0gKHVpbnQzMl90KUlucHV0Ow0KKyAgdWludDMyX3Qgb3V0cHV0YWRkciA9ICh1aW50MzJfdClPdXRwdXQ7DQorICB1aW50MzJfdCBpdmFkZHIgICAgID0gKHVpbnQzMl90KUluaXRWZWN0b3JzOw0KKyAgdWludDMyX3QgaSA9IDA7DQorDQorICAvKiBDcnlwdG8gc3RydWN0dXJlcyBpbml0aWFsaXNhdGlvbiovDQorICBDUllQX0tleVN0cnVjdEluaXQoJkFFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgc3dpdGNoKEtleXNpemUpDQorICB7DQorICAgIGNhc2UgMTI4Og0KKyAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfS2V5U2l6ZSA9IENSWVBfS2V5U2l6ZV8xMjhiOw0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBicmVhazsNCisgICAgY2FzZSAxOTI6DQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9LZXlTaXplICA9IENSWVBfS2V5U2l6ZV8xOTJiOw0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MUxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBicmVhazsNCisgICAgY2FzZSAyNTY6DQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9LZXlTaXplICA9IENSWVBfS2V5U2l6ZV8yNTZiOw0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MExlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MFJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MUxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgICBBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgYnJlYWs7DQorICB9DQorDQorICAvKiBDUllQIEluaXRpYWxpemF0aW9uIFZlY3RvcnMgKi8NCisgIEFFU19DUllQX0lWSW5pdFN0cnVjdHVyZS5DUllQX0lWMExlZnQgPSBfX1JFVigqKHVpbnQzMl90KikoaXZhZGRyKSk7DQorICBpdmFkZHIrPTQ7DQorICBBRVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUuQ1JZUF9JVjBSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGl2YWRkcikpOw0KKyAgaXZhZGRyKz00Ow0KKyAgQUVTX0NSWVBfSVZJbml0U3RydWN0dXJlLkNSWVBfSVYxTGVmdCA9IF9fUkVWKCoodWludDMyX3QqKShpdmFkZHIpKTsNCisgIGl2YWRkcis9NDsNCisgIEFFU19DUllQX0lWSW5pdFN0cnVjdHVyZS5DUllQX0lWMVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90KikoaXZhZGRyKSk7DQorDQorDQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLSBBRVMgRGVjcnlwdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgaWYoTW9kZSA9PSBNT0RFX0RFQ1JZUFQpIC8qIEFFUyBkZWNyeXB0aW9uICovDQorICB7DQorICAgIC8qIEZsdXNoIElOL09VVCBGSUZPcyAqLw0KKyAgICBDUllQX0ZJRk9GbHVzaCgpOw0KKw0KKyAgICAvKiBDcnlwdG8gSW5pdCBmb3IgS2V5IHByZXBhcmF0aW9uIGZvciBkZWNyeXB0aW9uIHByb2Nlc3MgKi8NCisgICAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29EaXIgPSBDUllQX0FsZ29EaXJfRGVjcnlwdDsNCisgICAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29Nb2RlID0gQ1JZUF9BbGdvTW9kZV9BRVNfS2V5Ow0KKyAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfRGF0YVR5cGUgPSBDUllQX0RhdGFUeXBlXzMyYjsNCisNCisgICAgQ1JZUF9Jbml0KCZBRVNfQ1JZUF9Jbml0U3RydWN0dXJlKTsNCisNCisgICAgLyogS2V5IEluaXRpYWxpc2F0aW9uICovDQorICAgIENSWVBfS2V5SW5pdCgmQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZSk7DQorDQorICAgIC8qIEVuYWJsZSBDcnlwdG8gcHJvY2Vzc29yICovDQorICAgIENSWVBfQ21kKEVOQUJMRSk7DQorDQorICAgIC8qIHdhaXQgdW50aWwgdGhlIEJ1c3kgZmxhZyBpcyBSRVNFVCAqLw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgYnVzeXN0YXR1cyA9IENSWVBfR2V0RmxhZ1N0YXR1cyhDUllQX0ZMQUdfQlVTWSk7DQorICAgICAgY291bnRlcisrOw0KKyAgICB9d2hpbGUgKChjb3VudGVyICE9IEFFU0JVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICAgew0KKyAgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAvKiBDcnlwdG8gSW5pdCBmb3IgZGVjcnlwdGlvbiBwcm9jZXNzICovICANCisgICAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb0RpciA9IENSWVBfQWxnb0Rpcl9EZWNyeXB0Ow0KKyAgICB9DQorICB9DQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLSBBRVMgRW5jcnlwdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgZWxzZSAvKiBBRVMgZW5jcnlwdGlvbiAqLw0KKyAgew0KKyAgICBDUllQX0tleUluaXQoJkFFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgICAvKiBDcnlwdG8gSW5pdCBmb3IgRW5jcnlwdGlvbiBwcm9jZXNzICovDQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyICA9IENSWVBfQWxnb0Rpcl9FbmNyeXB0Ow0KKyAgfQ0KKyAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29Nb2RlID0gQ1JZUF9BbGdvTW9kZV9BRVNfQ0JDOw0KKyAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0RhdGFUeXBlID0gQ1JZUF9EYXRhVHlwZV84YjsNCisgIENSWVBfSW5pdCgmQUVTX0NSWVBfSW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBDUllQIEluaXRpYWxpemF0aW9uIFZlY3RvcnMgKi8NCisgIENSWVBfSVZJbml0KCZBRVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogRmx1c2ggSU4vT1VUIEZJRk9zICovDQorICBDUllQX0ZJRk9GbHVzaCgpOw0KKw0KKyAgLyogRW5hYmxlIENyeXB0byBwcm9jZXNzb3IgKi8NCisgIENSWVBfQ21kKEVOQUJMRSk7DQorDQorDQorICBmb3IoaT0wOyAoKGk8SWxlbmd0aCkgJiYgKHN0YXR1cyAhPSBFUlJPUikpOyBpKz0xNikNCisgIHsNCisNCisgICAgLyogV3JpdGUgdGhlIElucHV0IGJsb2NrIGluIHRoZSBJTiBGSUZPICovDQorICAgIENSWVBfRGF0YUluKCoodWludDMyX3QqKShpbnB1dGFkZHIpKTsNCisgICAgaW5wdXRhZGRyKz00Ow0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorICAgIENSWVBfRGF0YUluKCoodWludDMyX3QqKShpbnB1dGFkZHIpKTsNCisgICAgaW5wdXRhZGRyKz00Ow0KKyAgICAvKiBXYWl0IHVudGlsIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGhhcyBiZWVuIHByb2Nlc3NlZCAqLw0KKyAgICBjb3VudGVyID0gMDsNCisgICAgZG8NCisgICAgew0KKyAgICAgIGJ1c3lzdGF0dXMgPSBDUllQX0dldEZsYWdTdGF0dXMoQ1JZUF9GTEFHX0JVU1kpOw0KKyAgICAgIGNvdW50ZXIrKzsNCisgICAgfXdoaWxlICgoY291bnRlciAhPSBBRVNCVVNZX1RJTUVPVVQpICYmIChidXN5c3RhdHVzICE9IFJFU0VUKSk7DQorDQorICAgIGlmIChidXN5c3RhdHVzICE9IFJFU0VUKQ0KKyAgIHsNCisgICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorDQorICAgICAgLyogUmVhZCB0aGUgT3V0cHV0IGJsb2NrIGZyb20gdGhlIE91dHB1dCBGSUZPICovDQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgPSBDUllQX0RhdGFPdXQoKTsNCisgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSA9IENSWVBfRGF0YU91dCgpOw0KKyAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBDcnlwdG8gKi8NCisgIENSWVBfQ21kKERJU0FCTEUpOw0KKw0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5jcnlwdCBhbmQgZGVjcnlwdCB1c2luZyBBRVMgaW4gQ1RSIE1vZGUNCisgICogQHBhcmFtICBNb2RlOiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gTW9kZS4NCisgICogICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBNT0RFX0VOQ1JZUFQ6IEVuY3J5cHRpb24NCisgICogICAgICAgICAgICBAYXJnIE1PREVfREVDUllQVDogRGVjcnlwdGlvbg0KKyAgKiBAcGFyYW0gIEluaXRWZWN0b3JzOiBJbml0aWFsaXNhdGlvbiBWZWN0b3JzIHVzZWQgZm9yIEFFUyBhbGdvcml0aG0uDQorICAqIEBwYXJhbSAgS2V5OiBLZXkgdXNlZCBmb3IgQUVTIGFsZ29yaXRobS4NCisgICogQHBhcmFtICBLZXlzaXplOiBsZW5ndGggb2YgdGhlIEtleSwgbXVzdCBiZSBhIDEyOCwgMTkyIG9yIDI1Ni4NCisgICogQHBhcmFtICBJbnB1dDogcG9pbnRlciB0byB0aGUgSW5wdXQgYnVmZmVyLg0KKyAgKiBAcGFyYW0gIElsZW5ndGg6IGxlbmd0aCBvZiB0aGUgSW5wdXQgYnVmZmVyLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuDQorICAqIEBwYXJhbSAgT3V0cHV0OiBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogT3BlcmF0aW9uIGRvbmUNCisgICogICAgICAgICAgLSBFUlJPUjogT3BlcmF0aW9uIGZhaWxlZA0KKyAgKi8NCitFcnJvclN0YXR1cyBDUllQX0FFU19DVFIodWludDhfdCBNb2RlLCB1aW50OF90IEluaXRWZWN0b3JzWzE2XSwgdWludDhfdCAqS2V5LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgS2V5c2l6ZSwgdWludDhfdCAqSW5wdXQsIHVpbnQzMl90IElsZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKk91dHB1dCkNCit7DQorICBDUllQX0luaXRUeXBlRGVmIEFFU19DUllQX0luaXRTdHJ1Y3R1cmU7DQorICBDUllQX0tleUluaXRUeXBlRGVmIEFFU19DUllQX0tleUluaXRTdHJ1Y3R1cmU7DQorICBDUllQX0lWSW5pdFR5cGVEZWYgQUVTX0NSWVBfSVZJbml0U3RydWN0dXJlOw0KKyAgX19JTyB1aW50MzJfdCBjb3VudGVyID0gMDsNCisgIHVpbnQzMl90IGJ1c3lzdGF0dXMgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsNCisgIHVpbnQzMl90IGtleWFkZHIgICAgPSAodWludDMyX3QpS2V5Ow0KKyAgdWludDMyX3QgaW5wdXRhZGRyICA9ICh1aW50MzJfdClJbnB1dDsNCisgIHVpbnQzMl90IG91dHB1dGFkZHIgPSAodWludDMyX3QpT3V0cHV0Ow0KKyAgdWludDMyX3QgaXZhZGRyICAgICA9ICh1aW50MzJfdClJbml0VmVjdG9yczsNCisgIHVpbnQzMl90IGkgPSAwOw0KKw0KKyAgLyogQ3J5cHRvIHN0cnVjdHVyZXMgaW5pdGlhbGlzYXRpb24qLw0KKyAgQ1JZUF9LZXlTdHJ1Y3RJbml0KCZBRVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlKTsNCisNCisgIHN3aXRjaChLZXlzaXplKQ0KKyAgew0KKyAgICBjYXNlIDEyODoNCisgICAgQUVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0tleVNpemUgPSBDUllQX0tleVNpemVfMTI4YjsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTJMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTJSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTNMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTNSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAgYnJlYWs7DQorICAgIGNhc2UgMTkyOg0KKyAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfS2V5U2l6ZSAgPSBDUllQX0tleVNpemVfMTkyYjsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTFMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTFSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTJMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTJSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTNMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTNSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAgYnJlYWs7DQorICAgIGNhc2UgMjU2Og0KKyAgICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfS2V5U2l6ZSAgPSBDUllQX0tleVNpemVfMjU2YjsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTBMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTBSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTFMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTFSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTJMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTJSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTNMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAga2V5YWRkcis9NDsNCisgICAgQUVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTNSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQorICAgIGJyZWFrOw0KKyAgfQ0KKyAgLyogQ1JZUCBJbml0aWFsaXphdGlvbiBWZWN0b3JzICovDQorICBBRVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUuQ1JZUF9JVjBMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGl2YWRkcikpOw0KKyAgaXZhZGRyKz00Ow0KKyAgQUVTX0NSWVBfSVZJbml0U3RydWN0dXJlLkNSWVBfSVYwUmlnaHQ9IF9fUkVWKCoodWludDMyX3QqKShpdmFkZHIpKTsNCisgIGl2YWRkcis9NDsNCisgIEFFU19DUllQX0lWSW5pdFN0cnVjdHVyZS5DUllQX0lWMUxlZnQgPSBfX1JFVigqKHVpbnQzMl90KikoaXZhZGRyKSk7DQorICBpdmFkZHIrPTQ7DQorICBBRVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUuQ1JZUF9JVjFSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGl2YWRkcikpOw0KKw0KKyAgLyogS2V5IEluaXRpYWxpc2F0aW9uICovDQorICBDUllQX0tleUluaXQoJkFFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0gQUVTIERlY3J5cHRpb24gLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIGlmKE1vZGUgPT0gTU9ERV9ERUNSWVBUKSAvKiBBRVMgZGVjcnlwdGlvbiAqLw0KKyAgew0KKyAgICAvKiBDcnlwdG8gSW5pdCBmb3IgZGVjcnlwdGlvbiBwcm9jZXNzICovDQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyID0gQ1JZUF9BbGdvRGlyX0RlY3J5cHQ7DQorICB9DQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLSBBRVMgRW5jcnlwdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgZWxzZSAvKiBBRVMgZW5jcnlwdGlvbiAqLw0KKyAgew0KKyAgICAvKiBDcnlwdG8gSW5pdCBmb3IgRW5jcnlwdGlvbiBwcm9jZXNzICovDQorICAgIEFFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyID0gQ1JZUF9BbGdvRGlyX0VuY3J5cHQ7DQorICB9DQorICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb01vZGUgPSBDUllQX0FsZ29Nb2RlX0FFU19DVFI7DQorICBBRVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfRGF0YVR5cGUgPSBDUllQX0RhdGFUeXBlXzhiOw0KKyAgQ1JZUF9Jbml0KCZBRVNfQ1JZUF9Jbml0U3RydWN0dXJlKTsNCisNCisgIC8qIENSWVAgSW5pdGlhbGl6YXRpb24gVmVjdG9ycyAqLw0KKyAgQ1JZUF9JVkluaXQoJkFFU19DUllQX0lWSW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBGbHVzaCBJTi9PVVQgRklGT3MgKi8NCisgIENSWVBfRklGT0ZsdXNoKCk7DQorDQorICAvKiBFbmFibGUgQ3J5cHRvIHByb2Nlc3NvciAqLw0KKyAgQ1JZUF9DbWQoRU5BQkxFKTsNCisNCisgIGZvcihpPTA7ICgoaTxJbGVuZ3RoKSAmJiAoc3RhdHVzICE9IEVSUk9SKSk7IGkrPTE2KQ0KKyAgew0KKw0KKyAgICAvKiBXcml0ZSB0aGUgSW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8NCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorICAgIENSWVBfRGF0YUluKCoodWludDMyX3QqKShpbnB1dGFkZHIpKTsNCisgICAgaW5wdXRhZGRyKz00Ow0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgaGFzIGJlZW4gcHJvY2Vzc2VkICovDQorICAgIGNvdW50ZXIgPSAwOw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgYnVzeXN0YXR1cyA9IENSWVBfR2V0RmxhZ1N0YXR1cyhDUllQX0ZMQUdfQlVTWSk7DQorICAgICAgY291bnRlcisrOw0KKyAgICB9d2hpbGUgKChjb3VudGVyICE9IEFFU0JVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICAgew0KKyAgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisNCisgICAgICAvKiBSZWFkIHRoZSBPdXRwdXQgYmxvY2sgZnJvbSB0aGUgT3V0cHV0IEZJRk8gKi8NCisgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgPSBDUllQX0RhdGFPdXQoKTsNCisgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSA9IENSWVBfRGF0YU91dCgpOw0KKyAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgPSBDUllQX0RhdGFPdXQoKTsNCisgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICB9DQorICB9DQorICAvKiBEaXNhYmxlIENyeXB0byAqLw0KKyAgQ1JZUF9DbWQoRElTQUJMRSk7DQorDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQorDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwX2Rlcy5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwX2Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTM3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2NyeXBfZGVzLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9jcnlwX2Rlcy5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgaGlnaCBsZXZlbCBmdW5jdGlvbnMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdCBhbiANCisgICogICAgICAgICAgaW5wdXQgbWVzc2FnZSB1c2luZyBERVMgaW4gRUNCL0NCQyBtb2Rlcy4NCisgICogICAgICAgICAgSXQgdXNlcyB0aGUgc3RtMzJmMnh4X2NyeXAuYy8uaCBkcml2ZXJzIHRvIGFjY2VzcyB0aGUgU1RNMzJGMnh4IENSWVANCisgICogICAgICAgICAgcGVyaXBoZXJhbC4NCisgICoNCisgICogIEB2ZXJiYXRpbQ0KKyAgKg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgMS4gRW5hYmxlIFRoZSBDUllQIGNvbnRyb2xsZXIgY2xvY2sgdXNpbmcgDQorICAqICAgICAgICAgICAgUkNDX0FIQjJQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMlBlcmlwaF9DUllQLCBFTkFCTEUpOyBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgMi4gRW5jcnlwdCBhbmQgZGVjcnlwdCB1c2luZyBERVMgaW4gRUNCIE1vZGUgdXNpbmcgQ1JZUF9ERVNfRUNCKCkNCisgICogICAgICAgICAgICAgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDMuIEVuY3J5cHQgYW5kIGRlY3J5cHQgdXNpbmcgREVTIGluIENCQyBNb2RlIHVzaW5nIENSWVBfREVTX0NCQygpDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfY3J5cC5oIg0KKw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIENSWVAgDQorICAqIEBicmllZiBDUllQIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLw0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZGVmaW5lIERFU0JVU1lfVElNRU9VVCAgICAoKHVpbnQzMl90KSAweDAwMDEwMDAwKQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoqIEBkZWZncm91cCBDUllQX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIENSWVBfR3JvdXA4IEhpZ2ggTGV2ZWwgREVTIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBIaWdoIExldmVsIERFUyBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgSGlnaCBMZXZlbCBERVMgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5jcnlwdCBhbmQgZGVjcnlwdCB1c2luZyBERVMgaW4gRUNCIE1vZGUNCisgICogQHBhcmFtICBNb2RlOiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gTW9kZS4NCisgICogICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBNT0RFX0VOQ1JZUFQ6IEVuY3J5cHRpb24NCisgICogICAgICAgICAgICBAYXJnIE1PREVfREVDUllQVDogRGVjcnlwdGlvbg0KKyAgKiBAcGFyYW0gIEtleTogS2V5IHVzZWQgZm9yIERFUyBhbGdvcml0aG0uDQorICAqIEBwYXJhbSAgSWxlbmd0aDogbGVuZ3RoIG9mIHRoZSBJbnB1dCBidWZmZXIsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4Lg0KKyAgKiBAcGFyYW0gIElucHV0OiBwb2ludGVyIHRvIHRoZSBJbnB1dCBidWZmZXIuDQorICAqIEBwYXJhbSAgT3V0cHV0OiBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogT3BlcmF0aW9uIGRvbmUNCisgICogICAgICAgICAgLSBFUlJPUjogT3BlcmF0aW9uIGZhaWxlZA0KKyAgKi8NCitFcnJvclN0YXR1cyBDUllQX0RFU19FQ0IodWludDhfdCBNb2RlLCB1aW50OF90IEtleVs4XSwgdWludDhfdCAqSW5wdXQsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBJbGVuZ3RoLCB1aW50OF90ICpPdXRwdXQpDQorew0KKyAgQ1JZUF9Jbml0VHlwZURlZiBERVNfQ1JZUF9Jbml0U3RydWN0dXJlOw0KKyAgQ1JZUF9LZXlJbml0VHlwZURlZiBERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlOw0KKyAgX19JTyB1aW50MzJfdCBjb3VudGVyID0gMDsNCisgIHVpbnQzMl90IGJ1c3lzdGF0dXMgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsNCisgIHVpbnQzMl90IGtleWFkZHIgICAgPSAodWludDMyX3QpS2V5Ow0KKyAgdWludDMyX3QgaW5wdXRhZGRyICA9ICh1aW50MzJfdClJbnB1dDsNCisgIHVpbnQzMl90IG91dHB1dGFkZHIgPSAodWludDMyX3QpT3V0cHV0Ow0KKyAgdWludDMyX3QgaSA9IDA7DQorDQorICAvKiBDcnlwdG8gc3RydWN0dXJlcyBpbml0aWFsaXNhdGlvbiovDQorICBDUllQX0tleVN0cnVjdEluaXQoJkRFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogQ3J5cHRvIEluaXQgZm9yIEVuY3J5cHRpb24gcHJvY2VzcyAqLw0KKyAgaWYoIE1vZGUgPT0gTU9ERV9FTkNSWVBUICkgLyogREVTIGVuY3J5cHRpb24gKi8NCisgIHsNCisgICAgIERFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyICA9IENSWVBfQWxnb0Rpcl9FbmNyeXB0Ow0KKyAgfQ0KKyAgZWxzZS8qIGlmKCBNb2RlID09IE1PREVfREVDUllQVCApKi8gLyogREVTIGRlY3J5cHRpb24gKi8NCisgIHsgICAgICANCisgICAgIERFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyICA9IENSWVBfQWxnb0Rpcl9EZWNyeXB0Ow0KKyAgfQ0KKw0KKyAgREVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29Nb2RlID0gQ1JZUF9BbGdvTW9kZV9ERVNfRUNCOw0KKyAgREVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0RhdGFUeXBlID0gQ1JZUF9EYXRhVHlwZV84YjsNCisgIENSWVBfSW5pdCgmREVTX0NSWVBfSW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBLZXkgSW5pdGlhbGlzYXRpb24gKi8NCisgIERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkxTGVmdCA9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBrZXlhZGRyKz00Ow0KKyAgREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTFSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgIENSWVBfS2V5SW5pdCgmIERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogRmx1c2ggSU4vT1VUIEZJRk8gKi8NCisgIENSWVBfRklGT0ZsdXNoKCk7DQorDQorICAvKiBFbmFibGUgQ3J5cHRvIHByb2Nlc3NvciAqLw0KKyAgQ1JZUF9DbWQoRU5BQkxFKTsNCisNCisgIGZvcihpPTA7ICgoaTxJbGVuZ3RoKSAmJiAoc3RhdHVzICE9IEVSUk9SKSk7IGkrPTgpDQorICB7DQorDQorICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgSW5wdXQgRklGTyAqLw0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorDQorLyogV2FpdCB1bnRpbCB0aGUgY29tcGxldGUgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQgKi8NCisgICAgY291bnRlciA9IDA7DQorICAgIGRvDQorICAgIHsNCisgICAgICBidXN5c3RhdHVzID0gQ1JZUF9HZXRGbGFnU3RhdHVzKENSWVBfRkxBR19CVVNZKTsNCisgICAgICBjb3VudGVyKys7DQorICAgIH13aGlsZSAoKGNvdW50ZXIgIT0gREVTQlVTWV9USU1FT1VUKSAmJiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkpOw0KKw0KKyAgICBpZiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkNCisgICB7DQorICAgICAgIHN0YXR1cyA9IEVSUk9SOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKw0KKyAgICAgIC8qIFJlYWQgdGhlIE91dHB1dCBibG9jayBmcm9tIHRoZSBPdXRwdXQgRklGTyAqLw0KKyAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSA9IENSWVBfRGF0YU91dCgpOw0KKyAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBDcnlwdG8gKi8NCisgIENSWVBfQ21kKERJU0FCTEUpOw0KKw0KKyAgcmV0dXJuIHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuY3J5cHQgYW5kIGRlY3J5cHQgdXNpbmcgREVTIGluIENCQyBNb2RlDQorICAqIEBwYXJhbSAgTW9kZTogZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uIE1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBNT0RFX0VOQ1JZUFQ6IEVuY3J5cHRpb24NCisgICogICAgICAgICAgICBAYXJnIE1PREVfREVDUllQVDogRGVjcnlwdGlvbg0KKyAgKiBAcGFyYW0gIEtleTogS2V5IHVzZWQgZm9yIERFUyBhbGdvcml0aG0uDQorICAqIEBwYXJhbSAgSW5pdFZlY3RvcnM6IEluaXRpYWxpc2F0aW9uIFZlY3RvcnMgdXNlZCBmb3IgREVTIGFsZ29yaXRobS4NCisgICogQHBhcmFtICBJbGVuZ3RoOiBsZW5ndGggb2YgdGhlIElucHV0IGJ1ZmZlciwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguDQorICAqIEBwYXJhbSAgSW5wdXQ6IHBvaW50ZXIgdG8gdGhlIElucHV0IGJ1ZmZlci4NCisgICogQHBhcmFtICBPdXRwdXQ6IHBvaW50ZXIgdG8gdGhlIHJldHVybmVkIGJ1ZmZlci4NCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBPcGVyYXRpb24gZG9uZQ0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBPcGVyYXRpb24gZmFpbGVkDQorICAqLw0KK0Vycm9yU3RhdHVzIENSWVBfREVTX0NCQyh1aW50OF90IE1vZGUsIHVpbnQ4X3QgS2V5WzhdLCB1aW50OF90IEluaXRWZWN0b3JzWzhdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbmd0aCwgdWludDhfdCAqT3V0cHV0KQ0KK3sNCisgIENSWVBfSW5pdFR5cGVEZWYgREVTX0NSWVBfSW5pdFN0cnVjdHVyZTsNCisgIENSWVBfS2V5SW5pdFR5cGVEZWYgREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZTsNCisgIENSWVBfSVZJbml0VHlwZURlZiBERVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmU7DQorICBfX0lPIHVpbnQzMl90IGNvdW50ZXIgPSAwOw0KKyAgdWludDMyX3QgYnVzeXN0YXR1cyA9IDA7DQorICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOw0KKyAgdWludDMyX3Qga2V5YWRkciAgICA9ICh1aW50MzJfdClLZXk7DQorICB1aW50MzJfdCBpbnB1dGFkZHIgID0gKHVpbnQzMl90KUlucHV0Ow0KKyAgdWludDMyX3Qgb3V0cHV0YWRkciA9ICh1aW50MzJfdClPdXRwdXQ7DQorICB1aW50MzJfdCBpdmFkZHIgICAgID0gKHVpbnQzMl90KUluaXRWZWN0b3JzOw0KKyAgdWludDMyX3QgaSA9IDA7DQorDQorICAvKiBDcnlwdG8gc3RydWN0dXJlcyBpbml0aWFsaXNhdGlvbiovDQorICBDUllQX0tleVN0cnVjdEluaXQoJkRFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogQ3J5cHRvIEluaXQgZm9yIEVuY3J5cHRpb24gcHJvY2VzcyAqLw0KKyAgaWYoTW9kZSA9PSBNT0RFX0VOQ1JZUFQpIC8qIERFUyBlbmNyeXB0aW9uICovDQorICB7DQorICAgICBERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb0RpciAgPSBDUllQX0FsZ29EaXJfRW5jcnlwdDsNCisgIH0NCisgIGVsc2UgLyppZihNb2RlID09IE1PREVfREVDUllQVCkqLyAvKiBERVMgZGVjcnlwdGlvbiAqLw0KKyAgew0KKyAgICAgREVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29EaXIgID0gQ1JZUF9BbGdvRGlyX0RlY3J5cHQ7DQorICB9DQorDQorICBERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb01vZGUgPSBDUllQX0FsZ29Nb2RlX0RFU19DQkM7DQorICBERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfRGF0YVR5cGUgPSBDUllQX0RhdGFUeXBlXzhiOw0KKyAgQ1JZUF9Jbml0KCZERVNfQ1JZUF9Jbml0U3RydWN0dXJlKTsNCisNCisgIC8qIEtleSBJbml0aWFsaXNhdGlvbiAqLw0KKyAgREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZS5DUllQX0tleTFMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGtleWFkZHIpKTsNCisgIGtleWFkZHIrPTQ7DQorICBERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgQ1JZUF9LZXlJbml0KCYgREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBJbml0aWFsaXphdGlvbiBWZWN0b3JzICovDQorICBERVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUuQ1JZUF9JVjBMZWZ0ID0gX19SRVYoKih1aW50MzJfdCopKGl2YWRkcikpOw0KKyAgaXZhZGRyKz00Ow0KKyAgREVTX0NSWVBfSVZJbml0U3RydWN0dXJlLkNSWVBfSVYwUmlnaHQ9IF9fUkVWKCoodWludDMyX3QqKShpdmFkZHIpKTsNCisgIENSWVBfSVZJbml0KCZERVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogRmx1c2ggSU4vT1VUIEZJRk8gKi8NCisgIENSWVBfRklGT0ZsdXNoKCk7DQorICANCisgIC8qIEVuYWJsZSBDcnlwdG8gcHJvY2Vzc29yICovDQorICBDUllQX0NtZChFTkFCTEUpOw0KKw0KKyAgZm9yKGk9MDsgKChpPElsZW5ndGgpICYmIChzdGF0dXMgIT0gRVJST1IpKTsgaSs9OCkNCisgIHsNCisgICAgLyogV3JpdGUgdGhlIElucHV0IGJsb2NrIGluIHRoZSBJbnB1dCBGSUZPICovDQorICAgIENSWVBfRGF0YUluKCoodWludDMyX3QqKShpbnB1dGFkZHIpKTsNCisgICAgaW5wdXRhZGRyKz00Ow0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisNCisgICAgLyogV2FpdCB1bnRpbCB0aGUgY29tcGxldGUgbWVzc2FnZSBoYXMgYmVlbiBwcm9jZXNzZWQgKi8NCisgICAgY291bnRlciA9IDA7DQorICAgIGRvDQorICAgIHsNCisgICAgICBidXN5c3RhdHVzID0gQ1JZUF9HZXRGbGFnU3RhdHVzKENSWVBfRkxBR19CVVNZKTsNCisgICAgICBjb3VudGVyKys7DQorICAgIH13aGlsZSAoKGNvdW50ZXIgIT0gREVTQlVTWV9USU1FT1VUKSAmJiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkpOw0KKw0KKyAgICBpZiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkNCisgICB7DQorICAgICAgIHN0YXR1cyA9IEVSUk9SOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIC8qIFJlYWQgdGhlIE91dHB1dCBibG9jayBmcm9tIHRoZSBPdXRwdXQgRklGTyAqLw0KKyAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSA9IENSWVBfRGF0YU91dCgpOw0KKyAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBDcnlwdG8gKi8NCisgIENSWVBfQ21kKERJU0FCTEUpOw0KKw0KKyAgcmV0dXJuIHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2NyeXBfdGRlcy5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwX3RkZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGJiZTQyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9jcnlwX3RkZXMuYwpAQCAtMCwwICsxLDMxNCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2NyeXBfdGRlcy5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgaGlnaCBsZXZlbCBmdW5jdGlvbnMgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdCBhbiANCisgICogICAgICAgICAgaW5wdXQgbWVzc2FnZSB1c2luZyBUREVTIGluIEVDQi9DQkMgbW9kZXMgLg0KKyAgKiAgICAgICAgICBJdCB1c2VzIHRoZSBzdG0zMmYyeHhfY3J5cC5jLy5oIGRyaXZlcnMgdG8gYWNjZXNzIHRoZSBTVE0zMkYyeHggQ1JZUA0KKyAgKiAgICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKg0KKyAgKiAgQHZlcmJhdGltDQorICAqDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAxLiBFbmFibGUgVGhlIENSWVAgY29udHJvbGxlciBjbG9jayB1c2luZyANCisgICogICAgICAgICAgICBSQ0NfQUhCMlBlcmlwaENsb2NrQ21kKFJDQ19BSEIyUGVyaXBoX0NSWVAsIEVOQUJMRSk7IGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgICAyLiBFbmNyeXB0IGFuZCBkZWNyeXB0IHVzaW5nIFRERVMgaW4gRUNCIE1vZGUgdXNpbmcgQ1JZUF9UREVTX0VDQigpDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgICAzLiBFbmNyeXB0IGFuZCBkZWNyeXB0IHVzaW5nIFRERVMgaW4gQ0JDIE1vZGUgdXNpbmcgQ1JZUF9UREVTX0NCQygpDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8gDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2NyeXAuaCINCisNCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBDUllQIA0KKyAgKiBAYnJpZWYgQ1JZUCBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2RlZmluZSBUREVTQlVTWV9USU1FT1VUICAgICgodWludDMyX3QpIDB4MDAwMTAwMDApDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisvKiogQGRlZmdyb3VwIENSWVBfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgQ1JZUF9Hcm91cDcgSGlnaCBMZXZlbCBUREVTIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBIaWdoIExldmVsIFRERVMgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhpZ2ggTGV2ZWwgVERFUyBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmNyeXB0IGFuZCBkZWNyeXB0IHVzaW5nIFRERVMgaW4gRUNCIE1vZGUNCisgICogQHBhcmFtICBNb2RlOiBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24gTW9kZS4NCisgICogICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBNT0RFX0VOQ1JZUFQ6IEVuY3J5cHRpb24NCisgICogICAgICAgICAgICBAYXJnIE1PREVfREVDUllQVDogRGVjcnlwdGlvbg0KKyAgKiBAcGFyYW0gIEtleTogS2V5IHVzZWQgZm9yIFRERVMgYWxnb3JpdGhtLg0KKyAgKiBAcGFyYW0gIElsZW5ndGg6IGxlbmd0aCBvZiB0aGUgSW5wdXQgYnVmZmVyLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4NCisgICogQHBhcmFtICBJbnB1dDogcG9pbnRlciB0byB0aGUgSW5wdXQgYnVmZmVyLg0KKyAgKiBAcGFyYW0gIE91dHB1dDogcG9pbnRlciB0byB0aGUgcmV0dXJuZWQgYnVmZmVyLg0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IE9wZXJhdGlvbiBkb25lDQorICAqICAgICAgICAgIC0gRVJST1I6IE9wZXJhdGlvbiBmYWlsZWQNCisgICovDQorRXJyb3JTdGF0dXMgQ1JZUF9UREVTX0VDQih1aW50OF90IE1vZGUsIHVpbnQ4X3QgS2V5WzI0XSwgdWludDhfdCAqSW5wdXQsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSWxlbmd0aCwgdWludDhfdCAqT3V0cHV0KQ0KK3sNCisgIENSWVBfSW5pdFR5cGVEZWYgVERFU19DUllQX0luaXRTdHJ1Y3R1cmU7DQorICBDUllQX0tleUluaXRUeXBlRGVmIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlOw0KKyAgX19JTyB1aW50MzJfdCBjb3VudGVyID0gMDsNCisgIHVpbnQzMl90IGJ1c3lzdGF0dXMgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsNCisgIHVpbnQzMl90IGtleWFkZHIgICAgPSAodWludDMyX3QpS2V5Ow0KKyAgdWludDMyX3QgaW5wdXRhZGRyICA9ICh1aW50MzJfdClJbnB1dDsNCisgIHVpbnQzMl90IG91dHB1dGFkZHIgPSAodWludDMyX3QpT3V0cHV0Ow0KKyAgdWludDMyX3QgaSA9IDA7DQorDQorICAvKiBDcnlwdG8gc3RydWN0dXJlcyBpbml0aWFsaXNhdGlvbiovDQorICBDUllQX0tleVN0cnVjdEluaXQoJlRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlKTsNCisNCisgIC8qIENyeXB0byBJbml0IGZvciBFbmNyeXB0aW9uIHByb2Nlc3MgKi8NCisgIGlmKE1vZGUgPT0gTU9ERV9FTkNSWVBUKSAvKiBUREVTIGVuY3J5cHRpb24gKi8NCisgIHsNCisgICAgIFRERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb0RpciA9IENSWVBfQWxnb0Rpcl9FbmNyeXB0Ow0KKyAgfQ0KKyAgZWxzZSAvKmlmKE1vZGUgPT0gTU9ERV9ERUNSWVBUKSovIC8qIFRERVMgZGVjcnlwdGlvbiAqLw0KKyAgew0KKyAgICAgVERFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9BbGdvRGlyID0gQ1JZUF9BbGdvRGlyX0RlY3J5cHQ7DQorICB9DQorDQorICBUREVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29Nb2RlID0gQ1JZUF9BbGdvTW9kZV9UREVTX0VDQjsNCisgIFRERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfRGF0YVR5cGUgPSBDUllQX0RhdGFUeXBlXzhiOw0KKyAgQ1JZUF9Jbml0KCZUREVTX0NSWVBfSW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBLZXkgSW5pdGlhbGlzYXRpb24gKi8NCisgIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MUxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAga2V5YWRkcis9NDsNCisgIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MVJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAga2V5YWRkcis9NDsNCisgIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MkxlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAga2V5YWRkcis9NDsNCisgIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5MlJpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAga2V5YWRkcis9NDsNCisgIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M0xlZnQgPSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAga2V5YWRkcis9NDsNCisgIFRERVNfQ1JZUF9LZXlJbml0U3RydWN0dXJlLkNSWVBfS2V5M1JpZ2h0PSBfX1JFVigqKHVpbnQzMl90Kikoa2V5YWRkcikpOw0KKyAgQ1JZUF9LZXlJbml0KCYgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogRmx1c2ggSU4vT1VUIEZJRk8gKi8NCisgIENSWVBfRklGT0ZsdXNoKCk7DQorDQorICAvKiBFbmFibGUgQ3J5cHRvIHByb2Nlc3NvciAqLw0KKyAgQ1JZUF9DbWQoRU5BQkxFKTsNCisNCisgIGZvcihpPTA7ICgoaTxJbGVuZ3RoKSAmJiAoc3RhdHVzICE9IEVSUk9SKSk7IGkrPTgpDQorICB7DQorICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgSW5wdXQgRklGTyAqLw0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorDQorICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgaGFzIGJlZW4gcHJvY2Vzc2VkICovDQorICAgIGNvdW50ZXIgPSAwOw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgYnVzeXN0YXR1cyA9IENSWVBfR2V0RmxhZ1N0YXR1cyhDUllQX0ZMQUdfQlVTWSk7DQorICAgICAgY291bnRlcisrOw0KKyAgICB9d2hpbGUgKChjb3VudGVyICE9IFRERVNCVVNZX1RJTUVPVVQpICYmIChidXN5c3RhdHVzICE9IFJFU0VUKSk7DQorDQorICAgIGlmIChidXN5c3RhdHVzICE9IFJFU0VUKQ0KKyAgICB7DQorICAgICAgIHN0YXR1cyA9IEVSUk9SOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKw0KKyAgICAgIC8qIFJlYWQgdGhlIE91dHB1dCBibG9jayBmcm9tIHRoZSBPdXRwdXQgRklGTyAqLw0KKyAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSA9IENSWVBfRGF0YU91dCgpOw0KKyAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBDcnlwdG8gKi8NCisgIENSWVBfQ21kKERJU0FCTEUpOw0KKw0KKyAgcmV0dXJuIHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuY3J5cHQgYW5kIGRlY3J5cHQgdXNpbmcgVERFUyBpbiBDQkMgTW9kZQ0KKyAgKiBAcGFyYW0gIE1vZGU6IGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiBNb2RlLg0KKyAgKiAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIE1PREVfRU5DUllQVDogRW5jcnlwdGlvbg0KKyAgKiAgICAgICAgICAgIEBhcmcgTU9ERV9ERUNSWVBUOiBEZWNyeXB0aW9uDQorICAqIEBwYXJhbSAgS2V5OiBLZXkgdXNlZCBmb3IgVERFUyBhbGdvcml0aG0uDQorICAqIEBwYXJhbSAgSW5pdFZlY3RvcnM6IEluaXRpYWxpc2F0aW9uIFZlY3RvcnMgdXNlZCBmb3IgVERFUyBhbGdvcml0aG0uDQorICAqIEBwYXJhbSAgSW5wdXQ6IHBvaW50ZXIgdG8gdGhlIElucHV0IGJ1ZmZlci4NCisgICogQHBhcmFtICBJbGVuZ3RoOiBsZW5ndGggb2YgdGhlIElucHV0IGJ1ZmZlciwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDguDQorICAqIEBwYXJhbSAgT3V0cHV0OiBwb2ludGVyIHRvIHRoZSByZXR1cm5lZCBidWZmZXIuDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogT3BlcmF0aW9uIGRvbmUNCisgICogICAgICAgICAgLSBFUlJPUjogT3BlcmF0aW9uIGZhaWxlZA0KKyAgKi8NCitFcnJvclN0YXR1cyBDUllQX1RERVNfQ0JDKHVpbnQ4X3QgTW9kZSwgdWludDhfdCBLZXlbMjRdLCB1aW50OF90IEluaXRWZWN0b3JzWzhdLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqSW5wdXQsIHVpbnQzMl90IElsZW5ndGgsIHVpbnQ4X3QgKk91dHB1dCkNCit7DQorICBDUllQX0luaXRUeXBlRGVmIFRERVNfQ1JZUF9Jbml0U3RydWN0dXJlOw0KKyAgQ1JZUF9LZXlJbml0VHlwZURlZiBUREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZTsNCisgIENSWVBfSVZJbml0VHlwZURlZiBUREVTX0NSWVBfSVZJbml0U3RydWN0dXJlOw0KKyAgX19JTyB1aW50MzJfdCBjb3VudGVyID0gMDsNCisgIHVpbnQzMl90IGJ1c3lzdGF0dXMgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsNCisgIHVpbnQzMl90IGtleWFkZHIgICAgPSAodWludDMyX3QpS2V5Ow0KKyAgdWludDMyX3QgaW5wdXRhZGRyICA9ICh1aW50MzJfdClJbnB1dDsNCisgIHVpbnQzMl90IG91dHB1dGFkZHIgPSAodWludDMyX3QpT3V0cHV0Ow0KKyAgdWludDMyX3QgaXZhZGRyICAgICA9ICh1aW50MzJfdClJbml0VmVjdG9yczsNCisgIHVpbnQzMl90IGkgPSAwOw0KKw0KKyAgLyogQ3J5cHRvIHN0cnVjdHVyZXMgaW5pdGlhbGlzYXRpb24qLw0KKyAgQ1JZUF9LZXlTdHJ1Y3RJbml0KCZUREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBDcnlwdG8gSW5pdCBmb3IgRW5jcnlwdGlvbiBwcm9jZXNzICovDQorICBpZihNb2RlID09IE1PREVfRU5DUllQVCkgLyogVERFUyBlbmNyeXB0aW9uICovDQorICB7DQorICAgIFRERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb0RpciA9IENSWVBfQWxnb0Rpcl9FbmNyeXB0Ow0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBUREVTX0NSWVBfSW5pdFN0cnVjdHVyZS5DUllQX0FsZ29EaXIgPSBDUllQX0FsZ29EaXJfRGVjcnlwdDsNCisgIH0NCisgIFRERVNfQ1JZUF9Jbml0U3RydWN0dXJlLkNSWVBfQWxnb01vZGUgPSBDUllQX0FsZ29Nb2RlX1RERVNfQ0JDOw0KKyAgVERFU19DUllQX0luaXRTdHJ1Y3R1cmUuQ1JZUF9EYXRhVHlwZSA9IENSWVBfRGF0YVR5cGVfOGI7DQorDQorICBDUllQX0luaXQoJlRERVNfQ1JZUF9Jbml0U3RydWN0dXJlKTsNCisNCisgIC8qIEtleSBJbml0aWFsaXNhdGlvbiAqLw0KKyAgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkxTGVmdCA9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBrZXlhZGRyKz00Ow0KKyAgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkxUmlnaHQ9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBrZXlhZGRyKz00Ow0KKyAgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkyTGVmdCA9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBrZXlhZGRyKz00Ow0KKyAgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkyUmlnaHQ9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBrZXlhZGRyKz00Ow0KKyAgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkzTGVmdCA9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBrZXlhZGRyKz00Ow0KKyAgVERFU19DUllQX0tleUluaXRTdHJ1Y3R1cmUuQ1JZUF9LZXkzUmlnaHQ9IF9fUkVWKCoodWludDMyX3QqKShrZXlhZGRyKSk7DQorICBDUllQX0tleUluaXQoJiBUREVTX0NSWVBfS2V5SW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBJbml0aWFsaXphdGlvbiBWZWN0b3JzICovDQorICBUREVTX0NSWVBfSVZJbml0U3RydWN0dXJlLkNSWVBfSVYwTGVmdCA9IF9fUkVWKCoodWludDMyX3QqKShpdmFkZHIpKTsNCisgIGl2YWRkcis9NDsNCisgIFRERVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUuQ1JZUF9JVjBSaWdodD0gX19SRVYoKih1aW50MzJfdCopKGl2YWRkcikpOw0KKyAgQ1JZUF9JVkluaXQoJlRERVNfQ1JZUF9JVkluaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogRmx1c2ggSU4vT1VUIEZJRk8gKi8NCisgIENSWVBfRklGT0ZsdXNoKCk7DQorDQorICAvKiBFbmFibGUgQ3J5cHRvIHByb2Nlc3NvciAqLw0KKyAgQ1JZUF9DbWQoRU5BQkxFKTsNCisNCisgIGZvcihpPTA7ICgoaTxJbGVuZ3RoKSAmJiAoc3RhdHVzICE9IEVSUk9SKSk7IGkrPTgpDQorICB7DQorICAgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgSW5wdXQgRklGTyAqLw0KKyAgICBDUllQX0RhdGFJbigqKHVpbnQzMl90KikoaW5wdXRhZGRyKSk7DQorICAgIGlucHV0YWRkcis9NDsNCisgICAgQ1JZUF9EYXRhSW4oKih1aW50MzJfdCopKGlucHV0YWRkcikpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorDQorICAgIC8qIFdhaXQgdW50aWwgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgaGFzIGJlZW4gcHJvY2Vzc2VkICovDQorICAgIGNvdW50ZXIgPSAwOw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgYnVzeXN0YXR1cyA9IENSWVBfR2V0RmxhZ1N0YXR1cyhDUllQX0ZMQUdfQlVTWSk7DQorICAgICAgY291bnRlcisrOw0KKyAgICB9d2hpbGUgKChjb3VudGVyICE9IFRERVNCVVNZX1RJTUVPVVQpICYmIChidXN5c3RhdHVzICE9IFJFU0VUKSk7DQorDQorICAgIGlmIChidXN5c3RhdHVzICE9IFJFU0VUKQ0KKyAgIHsNCisgICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorDQorICAgICAgLyogUmVhZCB0aGUgT3V0cHV0IGJsb2NrIGZyb20gdGhlIE91dHB1dCBGSUZPICovDQorICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpID0gQ1JZUF9EYXRhT3V0KCk7DQorICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgPSBDUllQX0RhdGFPdXQoKTsNCisgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICB9DQorICB9DQorDQorICAvKiBEaXNhYmxlIENyeXB0byAqLw0KKyAgQ1JZUF9DbWQoRElTQUJMRSk7DQorDQorICByZXR1cm4gc3RhdHVzOyANCit9DQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZGFjLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2RhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNDY2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2RhYy5jCkBAIC0wLDAgKzEsNzA3IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfZGFjLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIERpZ2l0YWwtdG8tQW5hbG9nIENvbnZlcnRlciAoREFDKSBwZXJpcGhlcmFsOiANCisgICogICAgICAgICAgIC0gREFDIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb246IHRyaWdnZXIsIG91dHB1dCBidWZmZXIsIGRhdGEgZm9ybWF0DQorICAqICAgICAgICAgICAtIERNQSBtYW5hZ2VtZW50ICAgICAgDQorICAqICAgICAgICAgICAtIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQNCisgICoNCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFDIFBlcmlwaGVyYWwgZmVhdHVyZXMNCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICANCisgICogICAgICAgICAgREFDIENoYW5uZWxzDQorICAqICAgICAgICAgID09PT09PT09PT09PT0gIA0KKyAgKiAgICAgICAgICBUaGUgZGV2aWNlIGludGVncmF0ZXMgdHdvIDEyLWJpdCBEaWdpdGFsIEFuYWxvZyBDb252ZXJ0ZXJzIHRoYXQgY2FuIA0KKyAgKiAgICAgICAgICBiZSB1c2VkIGluZGVwZW5kZW50bHkgb3Igc2ltdWx0YW5lb3VzbHkgKGR1YWwgbW9kZSk6DQorICAqICAgICAgICAgICAgMS0gREFDIGNoYW5uZWwxIHdpdGggREFDX09VVDEgKFBBNCkgYXMgb3V0cHV0DQorICAqICAgICAgICAgICAgMS0gREFDIGNoYW5uZWwyIHdpdGggREFDX09VVDIgKFBBNSkgYXMgb3V0cHV0DQorICAqDQorICAqICAgICAgICAgIERBQyBUcmlnZ2Vycw0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09DQorICAqICAgICAgICAgIERpZ2l0YWwgdG8gQW5hbG9nIGNvbnZlcnNpb24gY2FuIGJlIG5vbi10cmlnZ2VyZWQgdXNpbmcgREFDX1RyaWdnZXJfTm9uZQ0KKyAgKiAgICAgICAgICBhbmQgREFDX09VVDEvREFDX09VVDIgaXMgYXZhaWxhYmxlIG9uY2Ugd3JpdGluZyB0byBESFJ4IHJlZ2lzdGVyIA0KKyAgKiAgICAgICAgICB1c2luZyBEQUNfU2V0Q2hhbm5lbDFEYXRhKCkgLyBEQUNfU2V0Q2hhbm5lbDJEYXRhKCkgZnVuY3Rpb25zLg0KKyAgKiAgIA0KKyAgKiAgICAgICAgIERpZ2l0YWwgdG8gQW5hbG9nIGNvbnZlcnNpb24gY2FuIGJlIHRyaWdnZXJlZCBieToNCisgICogICAgICAgICAgICAgMS0gRXh0ZXJuYWwgZXZlbnQ6IEVYVEkgTGluZSA5IChhbnkgR1BJT3hfUGluOSkgdXNpbmcgREFDX1RyaWdnZXJfRXh0X0lUOS4NCisgICogICAgICAgICAgICAgICAgVGhlIHVzZWQgcGluIChHUElPeF9QaW45KSBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gaW5wdXQgbW9kZS4NCisgICoNCisgICogICAgICAgICAgICAgMi0gVGltZXJzIFRSR086IFRJTTIsIFRJTTQsIFRJTTUsIFRJTTYsIFRJTTcgYW5kIFRJTTggDQorICAqICAgICAgICAgICAgICAgIChEQUNfVHJpZ2dlcl9UMl9UUkdPLCBEQUNfVHJpZ2dlcl9UNF9UUkdPLi4uKQ0KKyAgKiAgICAgICAgICAgICAgICBUaGUgdGltZXIgVFJHTyBldmVudCBzaG91bGQgYmUgc2VsZWN0ZWQgdXNpbmcgVElNX1NlbGVjdE91dHB1dFRyaWdnZXIoKQ0KKyAgKg0KKyAgKiAgICAgICAgICAgICAzLSBTb2Z0d2FyZSB1c2luZyBEQUNfVHJpZ2dlcl9Tb2Z0d2FyZQ0KKyAgKg0KKyAgKiAgICAgICAgICBEQUMgQnVmZmVyIG1vZGUgZmVhdHVyZQ0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgKiAgICAgICAgICBFYWNoIERBQyBjaGFubmVsIGludGVncmF0ZXMgYW4gb3V0cHV0IGJ1ZmZlciB0aGF0IGNhbiBiZSB1c2VkIHRvIA0KKyAgKiAgICAgICAgICByZWR1Y2UgdGhlIG91dHB1dCBpbXBlZGFuY2UsIGFuZCB0byBkcml2ZSBleHRlcm5hbCBsb2FkcyBkaXJlY3RseQ0KKyAgKiAgICAgICAgICB3aXRob3V0IGhhdmluZyB0byBhZGQgYW4gZXh0ZXJuYWwgb3BlcmF0aW9uYWwgYW1wbGlmaWVyLg0KKyAgKiAgICAgICAgICBUbyBlbmFibGUsIHRoZSBvdXRwdXQgYnVmZmVyIHVzZSAgDQorICAqICAgICAgICAgICAgICBEQUNfSW5pdFN0cnVjdHVyZS5EQUNfT3V0cHV0QnVmZmVyID0gREFDX091dHB1dEJ1ZmZlcl9FbmFibGU7DQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICBSZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IG91dHB1dCANCisgICogICAgICAgICAgaW1wZWRhbmNlIHZhbHVlIHdpdGggYW5kIHdpdGhvdXQgb3V0cHV0IGJ1ZmZlci4NCisgICogICAgICAgICAgDQorICAqICAgICAgICAgIERBQyB3YXZlIGdlbmVyYXRpb24gZmVhdHVyZQ0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgIA0KKyAgKiAgICAgICAgICBCb3RoIERBQyBjaGFubmVscyBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZQ0KKyAgKiAgICAgICAgICAgICAxLSBOb2lzZSB3YXZlIHVzaW5nIERBQ19XYXZlR2VuZXJhdGlvbl9Ob2lzZQ0KKyAgKiAgICAgICAgICAgICAyLSBUcmlhbmdsZSB3YXZlIHVzaW5nIERBQ19XYXZlR2VuZXJhdGlvbl9UcmlhbmdsZQ0KKyAgKiAgICAgICAgDQorICAqICAgICAgICAgIFdhdmUgZ2VuZXJhdGlvbiBjYW4gYmUgZGlzYWJsZWQgdXNpbmcgREFDX1dhdmVHZW5lcmF0aW9uX05vbmUNCisgICoNCisgICogICAgICAgICAgREFDIGRhdGEgZm9ybWF0DQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT0gICANCisgICogICAgICAgICAgVGhlIERBQyBkYXRhIGZvcm1hdCBjYW4gYmU6DQorICAqICAgICAgICAgICAgIDEtIDgtYml0IHJpZ2h0IGFsaWdubWVudCB1c2luZyBEQUNfQWxpZ25fOGJfUg0KKyAgKiAgICAgICAgICAgICAyLSAxMi1iaXQgbGVmdCBhbGlnbm1lbnQgdXNpbmcgREFDX0FsaWduXzEyYl9MDQorICAqICAgICAgICAgICAgIDMtIDEyLWJpdCByaWdodCBhbGlnbm1lbnQgdXNpbmcgREFDX0FsaWduXzEyYl9SDQorICAqDQorICAqICAgICAgICAgIERBQyBkYXRhIHZhbHVlIHRvIHZvbHRhZ2UgY29ycmVzcG9uZGVuY2UgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgICogICAgICAgICAgVGhlIGFuYWxvZyBvdXRwdXQgdm9sdGFnZSBvbiBlYWNoIERBQyBjaGFubmVsIHBpbiBpcyBkZXRlcm1pbmVkDQorICAqICAgICAgICAgIGJ5IHRoZSBmb2xsb3dpbmcgZXF1YXRpb246IA0KKyAgKiAgICAgICAgICBEQUNfT1VUeCA9IFZSRUYrICogRE9SIC8gNDA5NQ0KKyAgKiAgICAgICAgICB3aXRoICBET1IgaXMgdGhlIERhdGEgT3V0cHV0IFJlZ2lzdGVyDQorICAqICAgICAgICAgICAgICAgIFZFRisgaXMgdGhlIGlucHV0IHZvbHRhZ2UgcmVmZXJlbmNlIChyZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldCkNCisgICogICAgICAgICAgZS5nLiBUbyBzZXQgREFDX09VVDEgdG8gMC43ViwgdXNlDQorICAqICAgICAgICAgICAgREFDX1NldENoYW5uZWwxRGF0YShEQUNfQWxpZ25fMTJiX1IsIDg2OCk7DQorICAqICAgICAgICAgIEFzc3VtaW5nIHRoYXQgVlJFRisgPSAzLjNWLCBEQUNfT1VUMSA9ICgzLjMgKiA4NjgpIC8gNDA5NSA9IDAuN1YNCisgICoNCisgICogICAgICAgICAgRE1BIHJlcXVlc3RzIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09ICAgIA0KKyAgKiAgICAgICAgICBBIERNQTEgcmVxdWVzdCBjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gYW4gZXh0ZXJuYWwgdHJpZ2dlciAoYnV0IG5vdA0KKyAgKiAgICAgICAgICBhIHNvZnR3YXJlIHRyaWdnZXIpIG9jY3VycyBpZiBETUExIHJlcXVlc3RzIGFyZSBlbmFibGVkIHVzaW5nDQorICAqICAgICAgICAgIERBQ19ETUFDbWQoKQ0KKyAgKiAgICAgICAgICBETUExIHJlcXVlc3RzIGFyZSBtYXBwZWQgYXMgZm9sbG93aW5nOg0KKyAgKiAgICAgICAgICAgICAxLSBEQUMgY2hhbm5lbDEgOiBtYXBwZWQgb24gRE1BMSBTdHJlYW01IGNoYW5uZWw3IHdoaWNoIG11c3QgYmUgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY29uZmlndXJlZA0KKyAgKiAgICAgICAgICAgICAyLSBEQUMgY2hhbm5lbDIgOiBtYXBwZWQgb24gRE1BMSBTdHJlYW02IGNoYW5uZWw3IHdoaWNoIG11c3QgYmUgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY29uZmlndXJlZA0KKyAgKg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlciANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICANCisgICogICAgICAgICAgICAtIERBQyBBUEIgY2xvY2sgbXVzdCBiZSBlbmFibGVkIHRvIGdldCB3cml0ZSBhY2Nlc3MgdG8gREFDDQorICAqICAgICAgICAgICAgICByZWdpc3RlcnMgdXNpbmcNCisgICogICAgICAgICAgICAgIFJDQ19BUEIxUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjFQZXJpcGhfREFDLCBFTkFCTEUpDQorICAqICAgICAgICAgICAgLSBDb25maWd1cmUgREFDX09VVHggKERBQ19PVVQxOiBQQTQsIERBQ19PVVQyOiBQQTUpIGluIGFuYWxvZyBtb2RlLg0KKyAgKiAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBEQUMgY2hhbm5lbCB1c2luZyBEQUNfSW5pdCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgLSBFbmFibGUgdGhlIERBQyBjaGFubmVsIHVzaW5nIERBQ19DbWQoKSBmdW5jdGlvbg0KKyAgKiANCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKiAgICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9kYWMuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERBQyANCisgICogQGJyaWVmIERBQyBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIENSIHJlZ2lzdGVyIE1hc2sgKi8NCisjZGVmaW5lIENSX0NMRUFSX01BU0sgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMEZGRSkNCisNCisvKiBEQUMgRHVhbCBDaGFubmVscyBTV1RSSUcgbWFza3MgKi8NCisjZGVmaW5lIERVQUxfU1dUUklHX1NFVCAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMykNCisjZGVmaW5lIERVQUxfU1dUUklHX1JFU0VUICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGQykNCisNCisvKiBESFIgcmVnaXN0ZXJzIG9mZnNldHMgKi8NCisjZGVmaW5lIERIUjEyUjFfT0ZGU0VUICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOCkNCisjZGVmaW5lIERIUjEyUjJfT0ZGU0VUICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxNCkNCisjZGVmaW5lIERIUjEyUkRfT0ZGU0VUICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAyMCkNCisNCisvKiBET1IgcmVnaXN0ZXIgb2Zmc2V0ICovDQorI2RlZmluZSBET1JfT0ZGU0VUICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMkMpDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIERBQ19Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERBQ19Hcm91cDEgREFDIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb24NCisgKiAgQGJyaWVmICAgREFDIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb246IHRyaWdnZXIsIG91dHB1dCBidWZmZXIsIGRhdGEgZm9ybWF0IA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgREFDIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb246IHRyaWdnZXIsIG91dHB1dCBidWZmZXIsIGRhdGEgZm9ybWF0DQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBEQUMgcGVyaXBoZXJhbCByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQUNfRGVJbml0KHZvaWQpDQorew0KKyAgLyogRW5hYmxlIERBQyByZXNldCBzdGF0ZSAqLw0KKyAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9EQUMsIEVOQUJMRSk7DQorICAvKiBSZWxlYXNlIERBQyBmcm9tIHJlc2V0IHN0YXRlICovDQorICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX0RBQywgRElTQUJMRSk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBEQUMgcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzDQorICAqICAgICAgICAgaW4gdGhlIERBQ19Jbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIERBQ19DaGFubmVsOiB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMTogREFDIENoYW5uZWwxIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ2hhbm5lbF8yOiBEQUMgQ2hhbm5lbDIgc2VsZWN0ZWQNCisgICogQHBhcmFtICBEQUNfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIERBQ19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucw0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgIHNwZWNpZmllZCBEQUMgY2hhbm5lbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgREFDX0luaXQodWludDMyX3QgREFDX0NoYW5uZWwsIERBQ19Jbml0VHlwZURlZiogREFDX0luaXRTdHJ1Y3QpDQorew0KKyAgdWludDMyX3QgdG1wcmVnMSA9IDAsIHRtcHJlZzIgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIERBQyBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfREFDX1RSSUdHRVIoREFDX0luaXRTdHJ1Y3QtPkRBQ19UcmlnZ2VyKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0dFTkVSQVRFX1dBVkUoREFDX0luaXRTdHJ1Y3QtPkRBQ19XYXZlR2VuZXJhdGlvbikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19MRlNSX1VOTUFTS19UUklBTkdMRV9BTVBMSVRVREUoREFDX0luaXRTdHJ1Y3QtPkRBQ19MRlNSVW5tYXNrX1RyaWFuZ2xlQW1wbGl0dWRlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX09VVFBVVF9CVUZGRVJfU1RBVEUoREFDX0luaXRTdHJ1Y3QtPkRBQ19PdXRwdXRCdWZmZXIpKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gREFDIENSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogR2V0IHRoZSBEQUMgQ1IgdmFsdWUgKi8NCisgIHRtcHJlZzEgPSBEQUMtPkNSOw0KKyAgLyogQ2xlYXIgQk9GRngsIFRFTngsIFRTRUx4LCBXQVZFeCBhbmQgTUFNUHggYml0cyAqLw0KKyAgdG1wcmVnMSAmPSB+KENSX0NMRUFSX01BU0sgPDwgREFDX0NoYW5uZWwpOw0KKyAgLyogQ29uZmlndXJlIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWw6IGJ1ZmZlciBvdXRwdXQsIHRyaWdnZXIsIA0KKyAgICAgd2F2ZSBnZW5lcmF0aW9uLCBtYXNrL2FtcGxpdHVkZSBmb3Igd2F2ZSBnZW5lcmF0aW9uICovDQorICAvKiBTZXQgVFNFTHggYW5kIFRFTnggYml0cyBhY2NvcmRpbmcgdG8gREFDX1RyaWdnZXIgdmFsdWUgKi8NCisgIC8qIFNldCBXQVZFeCBiaXRzIGFjY29yZGluZyB0byBEQUNfV2F2ZUdlbmVyYXRpb24gdmFsdWUgKi8NCisgIC8qIFNldCBNQU1QeCBiaXRzIGFjY29yZGluZyB0byBEQUNfTEZTUlVubWFza19UcmlhbmdsZUFtcGxpdHVkZSB2YWx1ZSAqLyANCisgIC8qIFNldCBCT0ZGeCBiaXQgYWNjb3JkaW5nIHRvIERBQ19PdXRwdXRCdWZmZXIgdmFsdWUgKi8gICANCisgIHRtcHJlZzIgPSAoREFDX0luaXRTdHJ1Y3QtPkRBQ19UcmlnZ2VyIHwgREFDX0luaXRTdHJ1Y3QtPkRBQ19XYXZlR2VuZXJhdGlvbiB8DQorICAgICAgICAgICAgIERBQ19Jbml0U3RydWN0LT5EQUNfTEZTUlVubWFza19UcmlhbmdsZUFtcGxpdHVkZSB8IFwNCisgICAgICAgICAgICAgREFDX0luaXRTdHJ1Y3QtPkRBQ19PdXRwdXRCdWZmZXIpOw0KKyAgLyogQ2FsY3VsYXRlIENSIHJlZ2lzdGVyIHZhbHVlIGRlcGVuZGluZyBvbiBEQUNfQ2hhbm5lbCAqLw0KKyAgdG1wcmVnMSB8PSB0bXByZWcyIDw8IERBQ19DaGFubmVsOw0KKyAgLyogV3JpdGUgdG8gREFDIENSICovDQorICBEQUMtPkNSID0gdG1wcmVnMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBEQUNfSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBEQUNfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIERBQ19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggd2lsbCANCisgICogICAgICAgICBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgREFDX1N0cnVjdEluaXQoREFDX0luaXRUeXBlRGVmKiBEQUNfSW5pdFN0cnVjdCkNCit7DQorLyotLS0tLS0tLS0tLS0tLS0gUmVzZXQgREFDIGluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIC8qIEluaXRpYWxpemUgdGhlIERBQ19UcmlnZ2VyIG1lbWJlciAqLw0KKyAgREFDX0luaXRTdHJ1Y3QtPkRBQ19UcmlnZ2VyID0gREFDX1RyaWdnZXJfTm9uZTsNCisgIC8qIEluaXRpYWxpemUgdGhlIERBQ19XYXZlR2VuZXJhdGlvbiBtZW1iZXIgKi8NCisgIERBQ19Jbml0U3RydWN0LT5EQUNfV2F2ZUdlbmVyYXRpb24gPSBEQUNfV2F2ZUdlbmVyYXRpb25fTm9uZTsNCisgIC8qIEluaXRpYWxpemUgdGhlIERBQ19MRlNSVW5tYXNrX1RyaWFuZ2xlQW1wbGl0dWRlIG1lbWJlciAqLw0KKyAgREFDX0luaXRTdHJ1Y3QtPkRBQ19MRlNSVW5tYXNrX1RyaWFuZ2xlQW1wbGl0dWRlID0gREFDX0xGU1JVbm1hc2tfQml0MDsNCisgIC8qIEluaXRpYWxpemUgdGhlIERBQ19PdXRwdXRCdWZmZXIgbWVtYmVyICovDQorICBEQUNfSW5pdFN0cnVjdC0+REFDX091dHB1dEJ1ZmZlciA9IERBQ19PdXRwdXRCdWZmZXJfRW5hYmxlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgREFDIGNoYW5uZWwuDQorICAqIEBwYXJhbSAgREFDX0NoYW5uZWw6IFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ2hhbm5lbF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQG5vdGUgICBXaGVuIHRoZSBEQUMgY2hhbm5lbCBpcyBlbmFibGVkIHRoZSB0cmlnZ2VyIHNvdXJjZSBjYW4gbm8gbW9yZSBiZSBtb2RpZmllZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgREFDX0NtZCh1aW50MzJfdCBEQUNfQ2hhbm5lbCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoREFDX0NoYW5uZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCAqLw0KKyAgICBEQUMtPkNSIHw9IChEQUNfQ1JfRU4xIDw8IERBQ19DaGFubmVsKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8NCisgICAgREFDLT5DUiAmPSAofihEQUNfQ1JfRU4xIDw8IERBQ19DaGFubmVsKSk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIHNvZnR3YXJlIHRyaWdnZXIuDQorICAqIEBwYXJhbSAgREFDX0NoYW5uZWw6IFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ2hhbm5lbF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIHNvZnR3YXJlIHRyaWdnZXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERBQ19Tb2Z0d2FyZVRyaWdnZXJDbWQodWludDMyX3QgREFDX0NoYW5uZWwsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKERBQ19DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSBzb2Z0d2FyZSB0cmlnZ2VyIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8NCisgICAgREFDLT5TV1RSSUdSIHw9ICh1aW50MzJfdClEQUNfU1dUUklHUl9TV1RSSUcxIDw8IChEQUNfQ2hhbm5lbCA+PiA0KTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSBzb2Z0d2FyZSB0cmlnZ2VyIGZvciB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgKi8NCisgICAgREFDLT5TV1RSSUdSICY9IH4oKHVpbnQzMl90KURBQ19TV1RSSUdSX1NXVFJJRzEgPDwgKERBQ19DaGFubmVsID4+IDQpKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyBzaW11bHRhbmVvdXNseSB0aGUgdHdvIERBQyBjaGFubmVscyBzb2Z0d2FyZSB0cmlnZ2Vycy4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBEQUMgY2hhbm5lbHMgc29mdHdhcmUgdHJpZ2dlcnMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERBQ19EdWFsU29mdHdhcmVUcmlnZ2VyQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgc29mdHdhcmUgdHJpZ2dlciBmb3IgYm90aCBEQUMgY2hhbm5lbHMgKi8NCisgICAgREFDLT5TV1RSSUdSIHw9IERVQUxfU1dUUklHX1NFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSBzb2Z0d2FyZSB0cmlnZ2VyIGZvciBib3RoIERBQyBjaGFubmVscyAqLw0KKyAgICBEQUMtPlNXVFJJR1IgJj0gRFVBTF9TV1RSSUdfUkVTRVQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIHdhdmUgZ2VuZXJhdGlvbi4NCisgICogQHBhcmFtICBEQUNfQ2hhbm5lbDogVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqIEBwYXJhbSAgREFDX1dhdmU6IHNwZWNpZmllcyB0aGUgd2F2ZSB0eXBlIHRvIGVuYWJsZSBvciBkaXNhYmxlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX1dhdmVfTm9pc2U6IG5vaXNlIHdhdmUgZ2VuZXJhdGlvbg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX1dhdmVfVHJpYW5nbGU6IHRyaWFuZ2xlIHdhdmUgZ2VuZXJhdGlvbg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIHdhdmUgZ2VuZXJhdGlvbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4gIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQUNfV2F2ZUdlbmVyYXRpb25DbWQodWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19XYXZlLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChEQUNfQ2hhbm5lbCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19XQVZFKERBQ19XYXZlKSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIHdhdmUgZ2VuZXJhdGlvbiBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsICovDQorICAgIERBQy0+Q1IgfD0gREFDX1dhdmUgPDwgREFDX0NoYW5uZWw7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIHdhdmUgZ2VuZXJhdGlvbiBmb3IgdGhlIHNlbGVjdGVkIERBQyBjaGFubmVsICovDQorICAgIERBQy0+Q1IgJj0gfihEQUNfV2F2ZSA8PCBEQUNfQ2hhbm5lbCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldCB0aGUgc3BlY2lmaWVkIGRhdGEgaG9sZGluZyByZWdpc3RlciB2YWx1ZSBmb3IgREFDIGNoYW5uZWwxLg0KKyAgKiBAcGFyYW0gIERBQ19BbGlnbjogU3BlY2lmaWVzIHRoZSBkYXRhIGFsaWdubWVudCBmb3IgREFDIGNoYW5uZWwxLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0FsaWduXzhiX1I6IDhiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIERBQ19BbGlnbl8xMmJfTDogMTJiaXQgbGVmdCBkYXRhIGFsaWdubWVudCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0FsaWduXzEyYl9SOiAxMmJpdCByaWdodCBkYXRhIGFsaWdubWVudCBzZWxlY3RlZA0KKyAgKiBAcGFyYW0gIERhdGE6IERhdGEgdG8gYmUgbG9hZGVkIGluIHRoZSBzZWxlY3RlZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERBQ19TZXRDaGFubmVsMURhdGEodWludDMyX3QgREFDX0FsaWduLCB1aW50MTZfdCBEYXRhKQ0KK3sgIA0KKyAgX19JTyB1aW50MzJfdCB0bXAgPSAwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19BTElHTihEQUNfQWxpZ24pKTsNCisgIGFzc2VydF9wYXJhbShJU19EQUNfREFUQShEYXRhKSk7DQorICANCisgIHRtcCA9ICh1aW50MzJfdClEQUNfQkFTRTsgDQorICB0bXAgKz0gREhSMTJSMV9PRkZTRVQgKyBEQUNfQWxpZ247DQorDQorICAvKiBTZXQgdGhlIERBQyBjaGFubmVsMSBzZWxlY3RlZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgKi8NCisgICooX19JTyB1aW50MzJfdCAqKSB0bXAgPSBEYXRhOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXQgdGhlIHNwZWNpZmllZCBkYXRhIGhvbGRpbmcgcmVnaXN0ZXIgdmFsdWUgZm9yIERBQyBjaGFubmVsMi4NCisgICogQHBhcmFtICBEQUNfQWxpZ246IFNwZWNpZmllcyB0aGUgZGF0YSBhbGlnbm1lbnQgZm9yIERBQyBjaGFubmVsMi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19BbGlnbl84Yl9SOiA4Yml0IHJpZ2h0IGRhdGEgYWxpZ25tZW50IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQWxpZ25fMTJiX0w6IDEyYml0IGxlZnQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIERBQ19BbGlnbl8xMmJfUjogMTJiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQNCisgICogQHBhcmFtICBEYXRhOiBEYXRhIHRvIGJlIGxvYWRlZCBpbiB0aGUgc2VsZWN0ZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQUNfU2V0Q2hhbm5lbDJEYXRhKHVpbnQzMl90IERBQ19BbGlnbiwgdWludDE2X3QgRGF0YSkNCit7DQorICBfX0lPIHVpbnQzMl90IHRtcCA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19BTElHTihEQUNfQWxpZ24pKTsNCisgIGFzc2VydF9wYXJhbShJU19EQUNfREFUQShEYXRhKSk7DQorICANCisgIHRtcCA9ICh1aW50MzJfdClEQUNfQkFTRTsNCisgIHRtcCArPSBESFIxMlIyX09GRlNFVCArIERBQ19BbGlnbjsNCisNCisgIC8qIFNldCB0aGUgREFDIGNoYW5uZWwyIHNlbGVjdGVkIGRhdGEgaG9sZGluZyByZWdpc3RlciAqLw0KKyAgKihfX0lPIHVpbnQzMl90ICopdG1wID0gRGF0YTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0IHRoZSBzcGVjaWZpZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyIHZhbHVlIGZvciBkdWFsIGNoYW5uZWwgREFDLg0KKyAgKiBAcGFyYW0gIERBQ19BbGlnbjogU3BlY2lmaWVzIHRoZSBkYXRhIGFsaWdubWVudCBmb3IgZHVhbCBjaGFubmVsIERBQy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19BbGlnbl84Yl9SOiA4Yml0IHJpZ2h0IGRhdGEgYWxpZ25tZW50IHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQWxpZ25fMTJiX0w6IDEyYml0IGxlZnQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIERBQ19BbGlnbl8xMmJfUjogMTJiaXQgcmlnaHQgZGF0YSBhbGlnbm1lbnQgc2VsZWN0ZWQNCisgICogQHBhcmFtICBEYXRhMjogRGF0YSBmb3IgREFDIENoYW5uZWwyIHRvIGJlIGxvYWRlZCBpbiB0aGUgc2VsZWN0ZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyLg0KKyAgKiBAcGFyYW0gIERhdGExOiBEYXRhIGZvciBEQUMgQ2hhbm5lbDEgdG8gYmUgbG9hZGVkIGluIHRoZSBzZWxlY3RlZCBkYXRhICBob2xkaW5nIHJlZ2lzdGVyLg0KKyAgKiBAbm90ZSAgIEluIGR1YWwgbW9kZSwgYSB1bmlxdWUgcmVnaXN0ZXIgYWNjZXNzIGlzIHJlcXVpcmVkIHRvIHdyaXRlIGluIGJvdGgNCisgICogICAgICAgICAgREFDIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERBQ19TZXREdWFsQ2hhbm5lbERhdGEodWludDMyX3QgREFDX0FsaWduLCB1aW50MTZfdCBEYXRhMiwgdWludDE2X3QgRGF0YTEpDQorew0KKyAgdWludDMyX3QgZGF0YSA9IDAsIHRtcCA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0FMSUdOKERBQ19BbGlnbikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19EQVRBKERhdGExKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0RBVEEoRGF0YTIpKTsNCisgIA0KKyAgLyogQ2FsY3VsYXRlIGFuZCBzZXQgZHVhbCBEQUMgZGF0YSBob2xkaW5nIHJlZ2lzdGVyIHZhbHVlICovDQorICBpZiAoREFDX0FsaWduID09IERBQ19BbGlnbl84Yl9SKQ0KKyAgew0KKyAgICBkYXRhID0gKCh1aW50MzJfdClEYXRhMiA8PCA4KSB8IERhdGExOyANCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgZGF0YSA9ICgodWludDMyX3QpRGF0YTIgPDwgMTYpIHwgRGF0YTE7DQorICB9DQorICANCisgIHRtcCA9ICh1aW50MzJfdClEQUNfQkFTRTsNCisgIHRtcCArPSBESFIxMlJEX09GRlNFVCArIERBQ19BbGlnbjsNCisNCisgIC8qIFNldCB0aGUgZHVhbCBEQUMgc2VsZWN0ZWQgZGF0YSBob2xkaW5nIHJlZ2lzdGVyICovDQorICAqKF9fSU8gdWludDMyX3QgKil0bXAgPSBkYXRhOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBsYXN0IGRhdGEgb3V0cHV0IHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4NCisgICogQHBhcmFtICBEQUNfQ2hhbm5lbDogVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqIEByZXR2YWwgVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsIGRhdGEgb3V0cHV0IHZhbHVlLg0KKyAgKi8NCit1aW50MTZfdCBEQUNfR2V0RGF0YU91dHB1dFZhbHVlKHVpbnQzMl90IERBQ19DaGFubmVsKQ0KK3sNCisgIF9fSU8gdWludDMyX3QgdG1wID0gMDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19EQUNfQ0hBTk5FTChEQUNfQ2hhbm5lbCkpOw0KKyAgDQorICB0bXAgPSAodWludDMyX3QpIERBQ19CQVNFIDsNCisgIHRtcCArPSBET1JfT0ZGU0VUICsgKCh1aW50MzJfdClEQUNfQ2hhbm5lbCA+PiAyKTsNCisgIA0KKyAgLyogUmV0dXJucyB0aGUgREFDIGNoYW5uZWwgZGF0YSBvdXRwdXQgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHJldHVybiAodWludDE2X3QpICgqKF9fSU8gdWludDMyX3QqKSB0bXApOw0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBEQUNfR3JvdXAyIERNQSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBETUEgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICBETUEgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBEQUMgY2hhbm5lbCBETUEgcmVxdWVzdC4NCisgICogQG5vdGUgICBXaGVuIGVuYWJsZWQgRE1BMSBpcyBnZW5lcmF0ZWQgd2hlbiBhbiBleHRlcm5hbCB0cmlnZ2VyIChFWFRJIExpbmU5LA0KKyAgKiAgICAgICAgIFRJTTIsIFRJTTQsIFRJTTUsIFRJTTYsIFRJTTcgb3IgVElNOCAgYnV0IG5vdCBhIHNvZnR3YXJlIHRyaWdnZXIpIG9jY3Vycy4NCisgICogQHBhcmFtICBEQUNfQ2hhbm5lbDogVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgRE1BIHJlcXVlc3QuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEBub3RlICAgVGhlIERBQyBjaGFubmVsMSBpcyBtYXBwZWQgb24gRE1BMSBTdHJlYW0gNSBjaGFubmVsNyB3aGljaCBtdXN0IGJlDQorICAqICAgICAgICAgIGFscmVhZHkgY29uZmlndXJlZC4NCisgICogQG5vdGUgICBUaGUgREFDIGNoYW5uZWwyIGlzIG1hcHBlZCBvbiBETUExIFN0cmVhbSA2IGNoYW5uZWw3IHdoaWNoIG11c3QgYmUNCisgICogICAgICAgICAgYWxyZWFkeSBjb25maWd1cmVkLiAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgREFDX0RNQUNtZCh1aW50MzJfdCBEQUNfQ2hhbm5lbCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoREFDX0NoYW5uZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbCBETUEgcmVxdWVzdCAqLw0KKyAgICBEQUMtPkNSIHw9IChEQUNfQ1JfRE1BRU4xIDw8IERBQ19DaGFubmVsKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwgRE1BIHJlcXVlc3QgKi8NCisgICAgREFDLT5DUiAmPSAofihEQUNfQ1JfRE1BRU4xIDw8IERBQ19DaGFubmVsKSk7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERBQ19Hcm91cDMgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgREFDIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgREFDX0NoYW5uZWw6IFRoZSBzZWxlY3RlZCBEQUMgY2hhbm5lbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ2hhbm5lbF8xOiBEQUMgQ2hhbm5lbDEgc2VsZWN0ZWQNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzI6IERBQyBDaGFubmVsMiBzZWxlY3RlZA0KKyAgKiBAcGFyYW0gIERBQ19JVDogc3BlY2lmaWVzIHRoZSBEQUMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19JVF9ETUFVRFI6IERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzaw0KKyAgKiBAbm90ZSAgIFRoZSBETUEgdW5kZXJydW4gb2NjdXJzIHdoZW4gYSBzZWNvbmQgZXh0ZXJuYWwgdHJpZ2dlciBhcnJpdmVzIGJlZm9yZSB0aGUgDQorICAqICAgICAgICAgYWNrbm93bGVkZ2VtZW50IGZvciB0aGUgZmlyc3QgZXh0ZXJuYWwgdHJpZ2dlciBpcyByZWNlaXZlZCAoZmlyc3QgcmVxdWVzdCkuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIERBQyBpbnRlcnJ1cHRzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovIA0KK3ZvaWQgREFDX0lUQ29uZmlnKHVpbnQzMl90IERBQ19DaGFubmVsLCB1aW50MzJfdCBEQUNfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkgIA0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0NIQU5ORUwoREFDX0NoYW5uZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0lUKERBQ19JVCkpOyANCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIERBQyBpbnRlcnJ1cHRzICovDQorICAgIERBQy0+Q1IgfD0gIChEQUNfSVQgPDwgREFDX0NoYW5uZWwpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBEQUMgaW50ZXJydXB0cyAqLw0KKyAgICBEQUMtPkNSICY9ICh+KHVpbnQzMl90KShEQUNfSVQgPDwgREFDX0NoYW5uZWwpKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBEQUMgZmxhZyBpcyBzZXQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIERBQ19DaGFubmVsOiBUaGUgc2VsZWN0ZWQgREFDIGNoYW5uZWwuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMTogREFDIENoYW5uZWwxIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBEQUNfQ2hhbm5lbF8yOiBEQUMgQ2hhbm5lbDIgc2VsZWN0ZWQNCisgICogQHBhcmFtICBEQUNfRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9ubHkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZToNCisgICogICAgICAgICAgICBAYXJnIERBQ19GTEFHX0RNQVVEUjogRE1BIHVuZGVycnVuIGZsYWcNCisgICogQG5vdGUgICBUaGUgRE1BIHVuZGVycnVuIG9jY3VycyB3aGVuIGEgc2Vjb25kIGV4dGVybmFsIHRyaWdnZXIgYXJyaXZlcyBiZWZvcmUgdGhlIA0KKyAgKiAgICAgICAgIGFja25vd2xlZGdlbWVudCBmb3IgdGhlIGZpcnN0IGV4dGVybmFsIHRyaWdnZXIgaXMgcmVjZWl2ZWQgKGZpcnN0IHJlcXVlc3QpLg0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgREFDX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgREFDX0dldEZsYWdTdGF0dXModWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKERBQ19DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0ZMQUcoREFDX0ZMQUcpKTsNCisNCisgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBEQUMgZmxhZyAqLw0KKyAgaWYgKChEQUMtPlNSICYgKERBQ19GTEFHIDw8IERBQ19DaGFubmVsKSkgIT0gKHVpbnQ4X3QpUkVTRVQpDQorICB7DQorICAgIC8qIERBQ19GTEFHIGlzIHNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERBQ19GTEFHIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBEQUNfRkxBRyBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIERBQyBjaGFubmVsJ3MgcGVuZGluZyBmbGFncy4NCisgICogQHBhcmFtICBEQUNfQ2hhbm5lbDogVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqIEBwYXJhbSAgREFDX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlOg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0ZMQUdfRE1BVURSOiBETUEgdW5kZXJydW4gZmxhZyANCisgICogQG5vdGUgICBUaGUgRE1BIHVuZGVycnVuIG9jY3VycyB3aGVuIGEgc2Vjb25kIGV4dGVybmFsIHRyaWdnZXIgYXJyaXZlcyBiZWZvcmUgdGhlIA0KKyAgKiAgICAgICAgIGFja25vd2xlZGdlbWVudCBmb3IgdGhlIGZpcnN0IGV4dGVybmFsIHRyaWdnZXIgaXMgcmVjZWl2ZWQgKGZpcnN0IHJlcXVlc3QpLiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQUNfQ2xlYXJGbGFnKHVpbnQzMl90IERBQ19DaGFubmVsLCB1aW50MzJfdCBEQUNfRkxBRykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKERBQ19DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0ZMQUcoREFDX0ZMQUcpKTsNCisNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBEQUMgZmxhZ3MgKi8NCisgIERBQy0+U1IgPSAoREFDX0ZMQUcgPDwgREFDX0NoYW5uZWwpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIERBQyBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4NCisgICogQHBhcmFtICBEQUNfQ2hhbm5lbDogVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqIEBwYXJhbSAgREFDX0lUOiBzcGVjaWZpZXMgdGhlIERBQyBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0lUX0RNQVVEUjogRE1BIHVuZGVycnVuIGludGVycnVwdCBtYXNrDQorICAqIEBub3RlICAgVGhlIERNQSB1bmRlcnJ1biBvY2N1cnMgd2hlbiBhIHNlY29uZCBleHRlcm5hbCB0cmlnZ2VyIGFycml2ZXMgYmVmb3JlIHRoZSANCisgICogICAgICAgICBhY2tub3dsZWRnZW1lbnQgZm9yIHRoZSBmaXJzdCBleHRlcm5hbCB0cmlnZ2VyIGlzIHJlY2VpdmVkIChmaXJzdCByZXF1ZXN0KS4NCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIERBQ19JVCAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorSVRTdGF0dXMgREFDX0dldElUU3RhdHVzKHVpbnQzMl90IERBQ19DaGFubmVsLCB1aW50MzJfdCBEQUNfSVQpDQorew0KKyAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCBlbmFibGVzdGF0dXMgPSAwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKERBQ19DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0lUKERBQ19JVCkpOw0KKw0KKyAgLyogR2V0IHRoZSBEQUNfSVQgZW5hYmxlIGJpdCBzdGF0dXMgKi8NCisgIGVuYWJsZXN0YXR1cyA9IChEQUMtPkNSICYgKERBQ19JVCA8PCBEQUNfQ2hhbm5lbCkpIDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIERBQyBpbnRlcnJ1cHQgKi8NCisgIGlmICgoKERBQy0+U1IgJiAoREFDX0lUIDw8IERBQ19DaGFubmVsKSkgIT0gKHVpbnQzMl90KVJFU0VUKSAmJiBlbmFibGVzdGF0dXMpDQorICB7DQorICAgIC8qIERBQ19JVCBpcyBzZXQgKi8NCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEQUNfSVQgaXMgcmVzZXQgKi8NCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIERBQ19JVCBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIERBQyBjaGFubmVsJ3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4NCisgICogQHBhcmFtICBEQUNfQ2hhbm5lbDogVGhlIHNlbGVjdGVkIERBQyBjaGFubmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19DaGFubmVsXzE6IERBQyBDaGFubmVsMSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgREFDX0NoYW5uZWxfMjogREFDIENoYW5uZWwyIHNlbGVjdGVkDQorICAqIEBwYXJhbSAgREFDX0lUOiBzcGVjaWZpZXMgdGhlIERBQyBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERBQ19JVF9ETUFVRFI6IERNQSB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogQG5vdGUgICBUaGUgRE1BIHVuZGVycnVuIG9jY3VycyB3aGVuIGEgc2Vjb25kIGV4dGVybmFsIHRyaWdnZXIgYXJyaXZlcyBiZWZvcmUgdGhlIA0KKyAgKiAgICAgICAgIGFja25vd2xlZGdlbWVudCBmb3IgdGhlIGZpcnN0IGV4dGVybmFsIHRyaWdnZXIgaXMgcmVjZWl2ZWQgKGZpcnN0IHJlcXVlc3QpLiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQUNfQ2xlYXJJVFBlbmRpbmdCaXQodWludDMyX3QgREFDX0NoYW5uZWwsIHVpbnQzMl90IERBQ19JVCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RBQ19DSEFOTkVMKERBQ19DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfREFDX0lUKERBQ19JVCkpOyANCisNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBEQUMgaW50ZXJydXB0IHBlbmRpbmcgYml0cyAqLw0KKyAgREFDLT5TUiA9IChEQUNfSVQgPDwgREFDX0NoYW5uZWwpOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2RiZ21jdS5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9kYmdtY3UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODAwMGNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9kYmdtY3UuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2RiZ21jdS5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgYWxsIHRoZSBEQkdNQ1UgZmlybXdhcmUgZnVuY3Rpb25zLg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2RiZ21jdS5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERCR01DVSANCisgICogQGJyaWVmIERCR01DVSBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNkZWZpbmUgSURDT0RFX0RFVklEX01BU0sgICAgKCh1aW50MzJfdCkweDAwMDAwRkZGKQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBEQkdNQ1VfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGRldmljZSByZXZpc2lvbiBpZGVudGlmaWVyLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBEZXZpY2UgcmV2aXNpb24gaWRlbnRpZmllcg0KKyAgKi8NCit1aW50MzJfdCBEQkdNQ1VfR2V0UkVWSUQodm9pZCkNCit7DQorICAgcmV0dXJuKERCR01DVS0+SURDT0RFID4+IDE2KTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgZGV2aWNlIGlkZW50aWZpZXIuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIERldmljZSBpZGVudGlmaWVyDQorICAqLw0KK3VpbnQzMl90IERCR01DVV9HZXRERVZJRCh2b2lkKQ0KK3sNCisgICByZXR1cm4oREJHTUNVLT5JRENPREUgJiBJRENPREVfREVWSURfTUFTSyk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgbG93IHBvd2VyIG1vZGUgYmVoYXZpb3Igd2hlbiB0aGUgTUNVIGlzIGluIERlYnVnIG1vZGUuDQorICAqIEBwYXJhbSAgREJHTUNVX1BlcmlwaDogc3BlY2lmaWVzIHRoZSBsb3cgcG93ZXIgbW9kZS4NCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfU0xFRVA6IEtlZXAgZGVidWdnZXIgY29ubmVjdGlvbiBkdXJpbmcgU0xFRVAgbW9kZSAgICAgICAgICAgICAgDQorICAqICAgICBAYXJnIERCR01DVV9TVE9QOiBLZWVwIGRlYnVnZ2VyIGNvbm5lY3Rpb24gZHVyaW5nIFNUT1AgbW9kZSAgICAgICAgICAgICAgIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfU1RBTkRCWTogS2VlcCBkZWJ1Z2dlciBjb25uZWN0aW9uIGR1cmluZyBTVEFOREJZIG1vZGUgICAgICAgIA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBsb3cgcG93ZXIgbW9kZSBpbiBEZWJ1ZyBtb2RlLg0KKyAgKiAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERCR01DVV9Db25maWcodWludDMyX3QgREJHTUNVX1BlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfREJHTUNVX1BFUklQSChEQkdNQ1VfUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIERCR01DVS0+Q1IgfD0gREJHTUNVX1BlcmlwaDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgREJHTUNVLT5DUiAmPSB+REJHTUNVX1BlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyBBUEIxIHBlcmlwaGVyYWwgYmVoYXZpb3Igd2hlbiB0aGUgTUNVIGlzIGluIERlYnVnIG1vZGUuDQorICAqIEBwYXJhbSAgREJHTUNVX1BlcmlwaDogc3BlY2lmaWVzIHRoZSBBUEIxIHBlcmlwaGVyYWwuDQorICAqICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogICAgICAgIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfVElNMl9TVE9QOiBUSU0yIGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICAgICAgICAgIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfVElNM19TVE9QOiBUSU0zIGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICAgICAgICAgIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfVElNNF9TVE9QOiBUSU00IGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkDQorICAqICAgICBAYXJnIERCR01DVV9USU01X1NUT1A6IFRJTTUgY291bnRlciBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQgICAgICAgICAgDQorICAqICAgICBAYXJnIERCR01DVV9USU02X1NUT1A6IFRJTTYgY291bnRlciBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQgICAgICAgICAgDQorICAqICAgICBAYXJnIERCR01DVV9USU03X1NUT1A6IFRJTTcgY291bnRlciBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQNCisgICogICAgIEBhcmcgREJHTUNVX1RJTTEyX1NUT1A6IFRJTTEyIGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICANCisgICogICAgIEBhcmcgREJHTUNVX1RJTTEzX1NUT1A6IFRJTTEzIGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICANCisgICogICAgIEBhcmcgREJHTUNVX1RJTTE0X1NUT1A6IFRJTTE0IGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfUlRDX1NUT1A6IFJUQyBXYWtldXAgY291bnRlciBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgIEBhcmcgREJHTUNVX1dXREdfU1RPUDogRGVidWcgV1dERyBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQNCisgICogICAgIEBhcmcgREJHTUNVX0lXREdfU1RPUDogRGVidWcgSVdERyBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQgICAgICAgIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfSTJDMV9TTUJVU19USU1FT1VUOiBJMkMxIFNNQlVTIHRpbWVvdXQgbW9kZSBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQNCisgICogICAgIEBhcmcgREJHTUNVX0kyQzJfU01CVVNfVElNRU9VVDogSTJDMiBTTUJVUyB0aW1lb3V0IG1vZGUgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkDQorICAqICAgICBAYXJnIERCR01DVV9JMkMzX1NNQlVTX1RJTUVPVVQ6IEkyQzMgU01CVVMgdGltZW91dCBtb2RlIHN0b3BwZWQgd2hlbiBDb3JlIGlzIGhhbHRlZA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfQ0FOMl9TVE9QOiBEZWJ1ZyBDQU4xIHN0b3BwZWQgd2hlbiBDb3JlIGlzIGhhbHRlZCAgICAgICAgICAgDQorICAqICAgICBAYXJnIERCR01DVV9DQU4xX1NUT1A6IERlYnVnIENBTjIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICAgICAgICANCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQkdNQ1VfQVBCMVBlcmlwaENvbmZpZyh1aW50MzJfdCBEQkdNQ1VfUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19EQkdNQ1VfQVBCMVBFUklQSChEQkdNQ1VfUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIERCR01DVS0+QVBCMUZaIHw9IERCR01DVV9QZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIERCR01DVS0+QVBCMUZaICY9IH5EQkdNQ1VfUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIEFQQjIgcGVyaXBoZXJhbCBiZWhhdmlvciB3aGVuIHRoZSBNQ1UgaXMgaW4gRGVidWcgbW9kZS4NCisgICogQHBhcmFtICBEQkdNQ1VfUGVyaXBoOiBzcGVjaWZpZXMgdGhlIEFQQjIgcGVyaXBoZXJhbC4NCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAgICAgICANCisgICogICAgIEBhcmcgREJHTUNVX1RJTTFfU1RPUDogVElNMSBjb3VudGVyIHN0b3BwZWQgd2hlbiBDb3JlIGlzIGhhbHRlZCAgICAgICAgICAgICAgICANCisgICogICAgIEBhcmcgREJHTUNVX1RJTThfU1RPUDogVElNOCBjb3VudGVyIHN0b3BwZWQgd2hlbiBDb3JlIGlzIGhhbHRlZA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfVElNOV9TVE9QOiBUSU05IGNvdW50ZXIgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICAgDQorICAqICAgICBAYXJnIERCR01DVV9USU0xMF9TVE9QOiBUSU0xMCBjb3VudGVyIHN0b3BwZWQgd2hlbiBDb3JlIGlzIGhhbHRlZCAgIA0KKyAgKiAgICAgQGFyZyBEQkdNQ1VfVElNMTFfU1RPUDogVElNMTEgY291bnRlciBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgaW4gRGVidWcgbW9kZS4NCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQkdNQ1VfQVBCMlBlcmlwaENvbmZpZyh1aW50MzJfdCBEQkdNQ1VfUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19EQkdNQ1VfQVBCMlBFUklQSChEQkdNQ1VfUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIERCR01DVS0+QVBCMkZaIHw9IERCR01DVV9QZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIERCR01DVS0+QVBCMkZaICY9IH5EQkdNQ1VfUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZGNtaS5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9kY21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ODVhNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZGNtaS5jCkBAIC0wLDAgKzEsNTQwIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfZGNtaS5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIERDTUkgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBJbWFnZSBjYXB0dXJlIGZ1bmN0aW9ucyAgDQorICAqICAgICAgICAgICAtIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQNCisgICoNCisgICogIEB2ZXJiYXRpbSAgDQorICAqICANCisgICogICAgICAgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgICogICAgICAgICANCisgICogICAgICAgICBUaGUgc2VxdWVuY2UgYmVsb3cgZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhpcyBkcml2ZXIgdG8gY2FwdHVyZSBpbWFnZQ0KKyAgKiAgICAgICAgIGZyb20gYSBjYW1lcmEgbW9kdWxlIGNvbm5lY3RlZCB0byB0aGUgRENNSSBJbnRlcmZhY2UuDQorICAqICAgICAgICAgVGhpcyBzZXF1ZW5jZSBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgIA0KKyAgKiAgICAgICAgIGNhbWVyYSBtb2R1bGUsIHdoaWNoIHNob3VsZCBiZSBtYWRlIGJlZm9yZSB0byBjb25maWd1cmUgYW5kIGVuYWJsZQ0KKyAgKiAgICAgICAgIHRoZSBEQ01JIHRvIGNhcHR1cmUgaW1hZ2VzLg0KKyAgKiAgICAgICAgICAgDQorICAqICAgICAgICAgIDEuIEVuYWJsZSB0aGUgY2xvY2sgZm9yIHRoZSBEQ01JIGFuZCBhc3NvY2lhdGVkIEdQSU9zIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgKiAgICAgICAgICAgICAgICAgUkNDX0FIQjJQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMlBlcmlwaF9EQ01JLCBFTkFCTEUpOw0KKyAgKiAgICAgICAgICAgICAgICAgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMVBlcmlwaF9HUElPeCwgRU5BQkxFKTsNCisgICoNCisgICogICAgICAgICAgMi4gRENNSSBwaW5zIGNvbmZpZ3VyYXRpb24gDQorICAqICAgICAgICAgICAgIC0gQ29ubmVjdCB0aGUgaW52b2x2ZWQgRENNSSBwaW5zIHRvIEFGMTMgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiANCisgICogICAgICAgICAgICAgICAgIEdQSU9fUGluQUZDb25maWcoR1BJT3gsIEdQSU9fUGluU291cmNleCwgR1BJT19BRl9EQ01JKTsgDQorICAqICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZXNlIERDTUkgcGlucyBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgICAgR1BJT19Jbml0KCk7DQorICAqICAgIA0KKyAgKiAgICAgICAgICAzLiBEZWNsYXJlIGEgRENNSV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUsIGZvciBleGFtcGxlOg0KKyAgKiAgICAgICAgICAgICAgICAgRENNSV9Jbml0VHlwZURlZiAgRENNSV9Jbml0U3RydWN0dXJlOw0KKyAgKiAgICAgICAgICAgICBhbmQgZmlsbCB0aGUgRENNSV9Jbml0U3RydWN0dXJlIHZhcmlhYmxlIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzDQorICAqICAgICAgICAgICAgIG9mIHRoZSBzdHJ1Y3R1cmUgbWVtYmVyLg0KKyAgKiAgDQorICAqICAgICAgICAgIDQuIEluaXRpYWxpemUgdGhlIERDTUkgaW50ZXJmYWNlIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgICBEQ01JX0luaXQoJkRDTUlfSW5pdFN0cnVjdHVyZSk7IA0KKyAgKiAgDQorICAqICAgICAgICAgIDUuIENvbmZpZ3VyZSB0aGUgRE1BMl9TdHJlYW0xIGNoYW5uZWwxIHRvIHRyYW5zZmVyIERhdGEgZnJvbSBEQ01JIERSDQorICAqICAgICAgICAgICAgIHJlZ2lzdGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBtZW1vcnkgYnVmZmVyLg0KKyAgKiAgDQorICAqICAgICAgICAgIDYuIEVuYWJsZSBEQ01JIGludGVyZmFjZSB1c2luZyB0aGUgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgIERDTUlfQ21kKEVOQUJMRSk7DQorICAqICAgICAgICAgICAgICAgICANCisgICogICAgICAgICA3LiBTdGFydCB0aGUgaW1hZ2UgY2FwdHVyZSB1c2luZyB0aGUgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgIERDTUlfQ2FwdHVyZUNtZChFTkFCTEUpOw0KKyAgKiAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgOC4gQXQgdGhpcyBzdGFnZSB0aGUgRENNSSBpbnRlcmZhY2Ugd2FpdHMgZm9yIHRoZSBmaXJzdCBzdGFydCBvZiBmcmFtZSwNCisgICogICAgICAgICAgICB0aGVuIGEgRE1BIHJlcXVlc3QgaXMgZ2VuZXJhdGVkIGNvbnRpbnVvdXNseS9vbmNlIChkZXBlbmRpbmcgb24gdGhlDQorICAqICAgICAgICAgICAgbW9kZSB1c2VkLCBDb250aW51b3VzL1NuYXBzaG90KSB0byB0cmFuc2ZlciB0aGUgcmVjZWl2ZWQgZGF0YSBpbnRvDQorICAqICAgICAgICAgICAgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeS4gDQorICAqICAgDQorICAqICBAbm90ZSAgSWYgeW91IG5lZWQgdG8gY2FwdHVyZSBvbmx5IGEgcmVjdGFuZ3VsYXIgd2luZG93IGZyb20gdGhlIHJlY2VpdmVkDQorICAqICAgICAgICAgaW1hZ2UsIHlvdSBoYXZlIHRvIHVzZSB0aGUgRENNSV9DUk9QQ29uZmlnKCkgZnVuY3Rpb24gdG8gY29uZmlndXJlIA0KKyAgKiAgICAgICAgIHRoZSBjb29yZGluYXRlcyBhbmQgc2l6ZSBvZiB0aGUgd2luZG93IHRvIGJlIGNhcHR1cmVkLCB0aGVuIGVuYWJsZSANCisgICogICAgICAgICB0aGUgQ3JvcCBmZWF0dXJlIHVzaW5nIERDTUlfQ1JPUENtZChFTkFCTEUpOyAgDQorICAqICAgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgQ3JvcCBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBtYWRlIGJlZm9yZSB0byBlbmFibGUNCisgICogICAgICAgICBhbmQgc3RhcnQgdGhlIERDTUkgaW50ZXJmYWNlLiANCisgICogICAgICAgIA0KKyAgKiAgQGVuZHZlcmJhdGltICAgDQorICAqICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9kY21pLmgiDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBEQ01JIA0KKyAgKiBAYnJpZWYgRENNSSBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBEQ01JX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIERDTUlfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRGVpbml0aWFsaXplcyB0aGUgRENNSSByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQ01JX0RlSW5pdCh2b2lkKQ0KK3sNCisgIERDTUktPkNSID0gMHgwOw0KKyAgRENNSS0+SUVSID0gMHgwOw0KKyAgRENNSS0+SUNSID0gMHgxRjsNCisgIERDTUktPkVTQ1IgPSAweDA7DQorICBEQ01JLT5FU1VSID0gMHgwOw0KKyAgRENNSS0+Q1dTVFJUUiA9IDB4MDsNCisgIERDTUktPkNXU0laRVIgPSAweDA7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBEQ01JIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgaW4gdGhlIERDTUlfSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBEQ01JX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBEQ01JX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIA0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgRENNSS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRENNSV9Jbml0KERDTUlfSW5pdFR5cGVEZWYqIERDTUlfSW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0ZW1wID0gMHgwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RDTUlfQ0FQVFVSRV9NT0RFKERDTUlfSW5pdFN0cnVjdC0+RENNSV9DYXB0dXJlTW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RDTUlfU1lOQ0hSTyhEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfU3luY2hyb01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19EQ01JX1BDS1BPTEFSSVRZKERDTUlfSW5pdFN0cnVjdC0+RENNSV9QQ0tQb2xhcml0eSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RDTUlfVlNQT0xBUklUWShEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfVlNQb2xhcml0eSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RDTUlfSFNQT0xBUklUWShEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfSFNQb2xhcml0eSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RDTUlfQ0FQVFVSRV9SQVRFKERDTUlfSW5pdFN0cnVjdC0+RENNSV9DYXB0dXJlUmF0ZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RDTUlfRVhURU5ERURfREFUQShEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfRXh0ZW5kZWREYXRhTW9kZSkpOw0KKw0KKyAgLyogVGhlIERDTUkgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgc2hvdWxkIGJlIHByb2dyYW1tZWQgY29ycmVjdGx5IGJlZm9yZSANCisgIGVuYWJsaW5nIHRoZSBDUl9FTkFCTEUgQml0IGFuZCB0aGUgQ1JfQ0FQVFVSRSBCaXQgKi8NCisgIERDTUktPkNSICY9IH4oRENNSV9DUl9FTkFCTEUgfCBEQ01JX0NSX0NBUFRVUkUpOw0KKyAgIA0KKyAgLyogUmVzZXQgdGhlIG9sZCBEQ01JIGNvbmZpZ3VyYXRpb24gKi8NCisgIHRlbXAgPSBEQ01JLT5DUjsNCisgIA0KKyAgdGVtcCAmPSB+KCh1aW50MzJfdClEQ01JX0NSX0NNICAgICB8IERDTUlfQ1JfRVNTICAgfCBEQ01JX0NSX1BDS1BPTCB8DQorICAgICAgICAgICAgICAgICAgICAgIERDTUlfQ1JfSFNQT0wgIHwgRENNSV9DUl9WU1BPTCB8IERDTUlfQ1JfRkNSQ18wIHwgDQorICAgICAgICAgICAgICAgICAgICAgIERDTUlfQ1JfRkNSQ18xIHwgRENNSV9DUl9FRE1fMCB8IERDTUlfQ1JfRURNXzEpOyANCisgICAgICAgICAgICAgICAgICANCisgIC8qIFNldHMgdGhlIG5ldyBjb25maWd1cmF0aW9uIG9mIHRoZSBEQ01JIHBlcmlwaGVyYWwgKi8NCisgIHRlbXAgfD0gKCh1aW50MzJfdClEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfQ2FwdHVyZU1vZGUgfA0KKyAgICAgICAgICAgICAgICAgICAgIERDTUlfSW5pdFN0cnVjdC0+RENNSV9TeW5jaHJvTW9kZSB8DQorICAgICAgICAgICAgICAgICAgICAgRENNSV9Jbml0U3RydWN0LT5EQ01JX1BDS1BvbGFyaXR5IHwNCisgICAgICAgICAgICAgICAgICAgICBEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfVlNQb2xhcml0eSB8DQorICAgICAgICAgICAgICAgICAgICAgRENNSV9Jbml0U3RydWN0LT5EQ01JX0hTUG9sYXJpdHkgfA0KKyAgICAgICAgICAgICAgICAgICAgIERDTUlfSW5pdFN0cnVjdC0+RENNSV9DYXB0dXJlUmF0ZSB8DQorICAgICAgICAgICAgICAgICAgICAgRENNSV9Jbml0U3RydWN0LT5EQ01JX0V4dGVuZGVkRGF0YU1vZGUpOw0KKw0KKyAgRENNSS0+Q1IgPSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIERDTUlfSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBEQ01JX0luaXRTdHJ1Y3QgOiBwb2ludGVyIHRvIGEgRENNSV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggd2lsbA0KKyAgKiAgICAgICAgIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQ01JX1N0cnVjdEluaXQoRENNSV9Jbml0VHlwZURlZiogRENNSV9Jbml0U3RydWN0KQ0KK3sNCisgIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovDQorICBEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfQ2FwdHVyZU1vZGUgPSBEQ01JX0NhcHR1cmVNb2RlX0NvbnRpbnVvdXM7DQorICBEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfU3luY2hyb01vZGUgPSBEQ01JX1N5bmNocm9Nb2RlX0hhcmR3YXJlOw0KKyAgRENNSV9Jbml0U3RydWN0LT5EQ01JX1BDS1BvbGFyaXR5ID0gRENNSV9QQ0tQb2xhcml0eV9GYWxsaW5nOw0KKyAgRENNSV9Jbml0U3RydWN0LT5EQ01JX1ZTUG9sYXJpdHkgPSBEQ01JX1ZTUG9sYXJpdHlfTG93Ow0KKyAgRENNSV9Jbml0U3RydWN0LT5EQ01JX0hTUG9sYXJpdHkgPSBEQ01JX0hTUG9sYXJpdHlfTG93Ow0KKyAgRENNSV9Jbml0U3RydWN0LT5EQ01JX0NhcHR1cmVSYXRlID0gRENNSV9DYXB0dXJlUmF0ZV9BbGxfRnJhbWU7DQorICBEQ01JX0luaXRTdHJ1Y3QtPkRDTUlfRXh0ZW5kZWREYXRhTW9kZSA9IERDTUlfRXh0ZW5kZWREYXRhTW9kZV84YjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIERDTUkgcGVyaXBoZXJhbCBDUk9QIG1vZGUgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQNCisgICogICAgICAgICBwYXJhbWV0ZXJzIGluIHRoZSBEQ01JX0NST1BJbml0U3RydWN0Lg0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdG8gZW5hYmxlIGFuZCBzdGFydCB0aGUgRENNSSBpbnRlcmZhY2UuICAgDQorICAqIEBwYXJhbSAgRENNSV9DUk9QSW5pdFN0cnVjdDogIHBvaW50ZXIgdG8gYSBEQ01JX0NST1BJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCANCisgICogICAgICAgICBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIERDTUkgcGVyaXBoZXJhbCBDUk9QIG1vZGUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERDTUlfQ1JPUENvbmZpZyhEQ01JX0NST1BJbml0VHlwZURlZiogRENNSV9DUk9QSW5pdFN0cnVjdCkNCit7ICANCisgIC8qIFNldHMgdGhlIENST1Agd2luZG93IGNvb3JkaW5hdGVzICovDQorICBEQ01JLT5DV1NUUlRSID0gKHVpbnQzMl90KSgodWludDMyX3QpRENNSV9DUk9QSW5pdFN0cnVjdC0+RENNSV9Ib3Jpem9udGFsT2Zmc2V0Q291bnQgfA0KKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpRENNSV9DUk9QSW5pdFN0cnVjdC0+RENNSV9WZXJ0aWNhbFN0YXJ0TGluZSA8PCAxNikpOw0KKw0KKyAgLyogU2V0cyB0aGUgQ1JPUCB3aW5kb3cgc2l6ZSAqLw0KKyAgRENNSS0+Q1dTSVpFUiA9ICh1aW50MzJfdCkoRENNSV9DUk9QSW5pdFN0cnVjdC0+RENNSV9DYXB0dXJlQ291bnQgfA0KKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpRENNSV9DUk9QSW5pdFN0cnVjdC0+RENNSV9WZXJ0aWNhbExpbmVDb3VudCA8PCAxNikpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBEQ01JIENyb3AgZmVhdHVyZS4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRvIGVuYWJsZSBhbmQgc3RhcnQgdGhlIERDTUkgaW50ZXJmYWNlLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIERDTUkgQ3JvcCBmZWF0dXJlLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRENNSV9DUk9QQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgICAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBEQ01JIENyb3AgZmVhdHVyZSAqLw0KKyAgICBEQ01JLT5DUiB8PSAodWludDMyX3QpRENNSV9DUl9DUk9QOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBEQ01JIENyb3AgZmVhdHVyZSAqLw0KKyAgICBEQ01JLT5DUiAmPSB+KHVpbnQzMl90KURDTUlfQ1JfQ1JPUDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyB0aGUgZW1iZWRkZWQgc3luY2hyb25pemF0aW9uIGNvZGVzDQorICAqIEBwYXJhbSAgRENNSV9Db2Rlc0luaXRUeXBlRGVmOiBwb2ludGVyIHRvIGEgRENNSV9Db2Rlc0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0DQorICAqICAgICAgICAgY29udGFpbnMgdGhlIGVtYmVkZGVkIHN5bmNocm9uaXphdGlvbiBjb2RlcyBmb3IgdGhlIERDTUkgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRENNSV9TZXRFbWJlZGRlZFN5bmNocm9Db2RlcyhEQ01JX0NvZGVzSW5pdFR5cGVEZWYqIERDTUlfQ29kZXNJbml0U3RydWN0KQ0KK3sNCisgIERDTUktPkVTQ1IgPSAodWludDMyX3QpKERDTUlfQ29kZXNJbml0U3RydWN0LT5EQ01JX0ZyYW1lU3RhcnRDb2RlIHwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpRENNSV9Db2Rlc0luaXRTdHJ1Y3QtPkRDTUlfTGluZVN0YXJ0Q29kZSA8PCA4KXwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpRENNSV9Db2Rlc0luaXRTdHJ1Y3QtPkRDTUlfTGluZUVuZENvZGUgPDwgMTYpfA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClEQ01JX0NvZGVzSW5pdFN0cnVjdC0+RENNSV9GcmFtZUVuZENvZGUgPDwgMjQpKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRENNSSBKUEVHIGZvcm1hdC4NCisgICogQG5vdGUgICBUaGUgQ3JvcCBhbmQgRW1iZWRkZWQgU3luY2hyb25pemF0aW9uIGZlYXR1cmVzIGNhbm5vdCBiZSB1c2VkIGluIHRoaXMgbW9kZS4gIA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIERDTUkgSlBFRyBmb3JtYXQuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQ01JX0pQRUdDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIERDTUkgSlBFRyBmb3JtYXQgKi8NCisgICAgRENNSS0+Q1IgfD0gKHVpbnQzMl90KURDTUlfQ1JfSlBFRzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgRENNSSBKUEVHIGZvcm1hdCAqLw0KKyAgICBEQ01JLT5DUiAmPSB+KHVpbnQzMl90KURDTUlfQ1JfSlBFRzsNCisgIH0NCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRENNSV9Hcm91cDIgSW1hZ2UgY2FwdHVyZSBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW1hZ2UgY2FwdHVyZSBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UgY2FwdHVyZSBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKyAgDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRENNSSBpbnRlcmZhY2UuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgRENNSSBpbnRlcmZhY2UuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQ01JX0NtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIERDTUkgYnkgc2V0dGluZyBFTkFCTEUgYml0ICovDQorICAgIERDTUktPkNSIHw9ICh1aW50MzJfdClEQ01JX0NSX0VOQUJMRTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgRENNSSBieSBjbGVhcmluZyBFTkFCTEUgYml0ICovDQorICAgIERDTUktPkNSICY9IH4odWludDMyX3QpRENNSV9DUl9FTkFCTEU7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIERDTUkgQ2FwdHVyZS4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBEQ01JIGNhcHR1cmUuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQ01JX0NhcHR1cmVDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIERDTUkgQ2FwdHVyZSAqLw0KKyAgICBEQ01JLT5DUiB8PSAodWludDMyX3QpRENNSV9DUl9DQVBUVVJFOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBEQ01JIENhcHR1cmUgKi8NCisgICAgRENNSS0+Q1IgJj0gfih1aW50MzJfdClEQ01JX0NSX0NBUFRVUkU7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlYWRzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgRFIgcmVnaXN0ZXIuDQorICAqIEBwYXJhbSAgTm9uZSANCisgICogQHJldHZhbCBEYXRhIHJlZ2lzdGVyIHZhbHVlDQorICAqLw0KK3VpbnQzMl90IERDTUlfUmVhZERhdGEodm9pZCkNCit7DQorICByZXR1cm4gRENNSS0+RFI7DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERDTUlfR3JvdXAzIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBEQ01JIGludGVyZmFjZSBpbnRlcnJ1cHRzLg0KKyAgKiBAcGFyYW0gIERDTUlfSVQ6IHNwZWNpZmllcyB0aGUgRENNSSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERDTUlfSVRfRlJBTUU6IEZyYW1lIGNhcHR1cmUgY29tcGxldGUgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfSVRfT1ZGOiBPdmVyZmxvdyBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9FUlI6IFN5bmNocm9uaXphdGlvbiBlcnJvciBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9WU1lOQzogVlNZTkMgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfSVRfTElORTogTGluZSBpbnRlcnJ1cHQgbWFzaw0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBEQ01JIGludGVycnVwdHMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERDTUlfSVRDb25maWcodWludDE2X3QgRENNSV9JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRENNSV9DT05GSUdfSVQoRENNSV9JVCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgSW50ZXJydXB0IHNvdXJjZXMgKi8NCisgICAgRENNSS0+SUVSIHw9IERDTUlfSVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIEludGVycnVwdCBzb3VyY2VzICovDQorICAgIERDTUktPklFUiAmPSAodWludDE2X3QpKH5EQ01JX0lUKTsNCisgIH0gIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgIERDTUkgaW50ZXJmYWNlIGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBEQ01JX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERDTUlfRkxBR19GUkFNRVJJOiBGcmFtZSBjYXB0dXJlIGNvbXBsZXRlIFJhdyBmbGFnIG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfRkxBR19PVkZSSTogT3ZlcmZsb3cgUmF3IGZsYWcgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9GTEFHX0VSUlJJOiBTeW5jaHJvbml6YXRpb24gZXJyb3IgUmF3IGZsYWcgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9GTEFHX1ZTWU5DUkk6IFZTWU5DIFJhdyBmbGFnIG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfRkxBR19MSU5FUkk6IExpbmUgUmF3IGZsYWcgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9GTEFHX0ZSQU1FTUk6IEZyYW1lIGNhcHR1cmUgY29tcGxldGUgTWFza2VkIGZsYWcgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9GTEFHX09WRk1JOiBPdmVyZmxvdyBNYXNrZWQgZmxhZyBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0ZMQUdfRVJSTUk6IFN5bmNocm9uaXphdGlvbiBlcnJvciBNYXNrZWQgZmxhZyBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0ZMQUdfVlNZTkNNSTogVlNZTkMgTWFza2VkIGZsYWcgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9GTEFHX0xJTkVNSTogTGluZSBNYXNrZWQgZmxhZyBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0ZMQUdfSFNZTkM6IEhTWU5DIGZsYWcgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9GTEFHX1ZTWU5DOiBWU1lOQyBmbGFnIG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfRkxBR19GTkU6IEZpZm8gbm90IGVtcHR5IGZsYWcgbWFzaw0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgRENNSV9GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIERDTUlfR2V0RmxhZ1N0YXR1cyh1aW50MTZfdCBEQ01JX0ZMQUcpDQorew0KKyAgRmxhZ1N0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIHVpbnQzMl90IGRjbWlyZWcsIHRlbXByZWcgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19EQ01JX0dFVF9GTEFHKERDTUlfRkxBRykpOw0KKyAgDQorICAvKiBHZXQgdGhlIERDTUkgcmVnaXN0ZXIgaW5kZXggKi8NCisgIGRjbWlyZWcgPSAoKCh1aW50MTZfdClEQ01JX0ZMQUcpID4+IDEyKTsNCisgIA0KKyAgaWYgKGRjbWlyZWcgPT0gMHgwMCkgLyogVGhlIEZMQUcgaXMgaW4gUklTUiByZWdpc3RlciAqLw0KKyAgew0KKyAgICB0ZW1wcmVnPSBEQ01JLT5SSVNSOw0KKyAgfQ0KKyAgZWxzZSBpZiAoZGNtaXJlZyA9PSAweDAyKSAvKiBUaGUgRkxBRyBpcyBpbiBTUiByZWdpc3RlciAqLw0KKyAgew0KKyAgICB0ZW1wcmVnID0gRENNSS0+U1I7DQorICB9DQorICBlbHNlIC8qIFRoZSBGTEFHIGlzIGluIE1JU1IgcmVnaXN0ZXIgKi8NCisgIHsNCisgICAgdGVtcHJlZyA9IERDTUktPk1JU1I7DQorICB9DQorICANCisgIGlmICgodGVtcHJlZyAmIERDTUlfRkxBRykgIT0gKHVpbnQxNl90KVJFU0VUICkNCisgIHsNCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIC8qIFJldHVybiB0aGUgRENNSV9GTEFHIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgRENNSSdzIHBlbmRpbmcgZmxhZ3MuDQorICAqIEBwYXJhbSAgRENNSV9GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0ZMQUdfRlJBTUVSSTogRnJhbWUgY2FwdHVyZSBjb21wbGV0ZSBSYXcgZmxhZyBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0ZMQUdfT1ZGUkk6IE92ZXJmbG93IFJhdyBmbGFnIG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfRkxBR19FUlJSSTogU3luY2hyb25pemF0aW9uIGVycm9yIFJhdyBmbGFnIG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfRkxBR19WU1lOQ1JJOiBWU1lOQyBSYXcgZmxhZyBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0ZMQUdfTElORVJJOiBMaW5lIFJhdyBmbGFnIG1hc2sNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRENNSV9DbGVhckZsYWcodWludDE2X3QgRENNSV9GTEFHKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRENNSV9DTEVBUl9GTEFHKERDTUlfRkxBRykpOw0KKyAgDQorICAvKiBDbGVhciB0aGUgZmxhZyBieSB3cml0aW5nIGluIHRoZSBJQ1IgcmVnaXN0ZXIgMSBpbiB0aGUgY29ycmVzcG9uZGluZyANCisgIEZsYWcgcG9zaXRpb24qLw0KKyAgDQorICBEQ01JLT5JQ1IgPSBEQ01JX0ZMQUc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBEQ01JIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIERDTUlfSVQ6IHNwZWNpZmllcyB0aGUgRENNSSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9GUkFNRTogRnJhbWUgY2FwdHVyZSBjb21wbGV0ZSBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9PVkY6IE92ZXJmbG93IGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0lUX0VSUjogU3luY2hyb25pemF0aW9uIGVycm9yIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBEQ01JX0lUX1ZTWU5DOiBWU1lOQyBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9MSU5FOiBMaW5lIGludGVycnVwdCBtYXNrDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBEQ01JX0lUIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBEQ01JX0dldElUU3RhdHVzKHVpbnQxNl90IERDTUlfSVQpDQorew0KKyAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCBpdHN0YXR1cyA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRENNSV9HRVRfSVQoRENNSV9JVCkpOw0KKyAgDQorICBpdHN0YXR1cyA9IERDTUktPk1JU1IgJiBEQ01JX0lUOyAvKiBPbmx5IG1hc2tlZCBpbnRlcnJ1cHRzIGFyZSBjaGVja2VkICovDQorICANCisgIGlmICgoaXRzdGF0dXMgIT0gKHVpbnQxNl90KVJFU0VUKSkNCisgIHsNCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgRENNSSdzIGludGVycnVwdCBwZW5kaW5nIGJpdHMuDQorICAqIEBwYXJhbSAgRENNSV9JVDogc3BlY2lmaWVzIHRoZSBEQ01JIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERDTUlfSVRfRlJBTUU6IEZyYW1lIGNhcHR1cmUgY29tcGxldGUgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfSVRfT1ZGOiBPdmVyZmxvdyBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9FUlI6IFN5bmNocm9uaXphdGlvbiBlcnJvciBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRENNSV9JVF9WU1lOQzogVlNZTkMgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIERDTUlfSVRfTElORTogTGluZSBpbnRlcnJ1cHQgbWFzaw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBEQ01JX0NsZWFySVRQZW5kaW5nQml0KHVpbnQxNl90IERDTUlfSVQpDQorew0KKyAgLyogQ2xlYXIgdGhlIGludGVycnVwdCBwZW5kaW5nIEJpdCBieSB3cml0aW5nIGluIHRoZSBJQ1IgcmVnaXN0ZXIgMSBpbiB0aGUgDQorICBjb3JyZXNwb25kaW5nIHBlbmRpbmcgQml0IHBvc2l0aW9uKi8NCisgIA0KKyAgRENNSS0+SUNSID0gRENNSV9JVDsNCit9DQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZG1hLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOGVjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2RtYS5jCkBAIC0wLDAgKzEsMTI4OSBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2RtYS5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIERpcmVjdCBNZW1vcnkgQWNjZXNzIGNvbnRyb2xsZXIgKERNQSk6ICAgICAgICAgICANCisgICogICAgICAgICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gRGF0YSBDb3VudGVyDQorICAqICAgICAgICAgICAtIERvdWJsZSBCdWZmZXIgbW9kZSBjb25maWd1cmF0aW9uIGFuZCBjb21tYW5kICANCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgDQorICAqICBAdmVyYmF0aW0NCisgICogICAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICogICAgICAgICAgMS4gRW5hYmxlIFRoZSBETUEgY29udHJvbGxlciBjbG9jayB1c2luZyBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0RNQTEsIEVOQUJMRSkNCisgICogICAgICAgICAgICAgZnVuY3Rpb24gZm9yIERNQTEgb3IgdXNpbmcgUkNDX0FIQjFQZXJpcGhSZXNldENtZChSQ0NfQUhCMVBlcmlwaF9ETUEyLCBFTkFCTEUpDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBETUEyLg0KKyAgKg0KKyAgKiAgICAgICAgICAyLiBFbmFibGUgYW5kIGNvbmZpZ3VyZSB0aGUgcGVyaXBoZXJhbCB0byBiZSBjb25uZWN0ZWQgdG8gdGhlIERNQSBTdHJlYW0NCisgICogICAgICAgICAgICAgKGV4Y2VwdCBmb3IgaW50ZXJuYWwgU1JBTSAvIEZMQVNIIG1lbW9yaWVzOiBubyBpbml0aWFsaXphdGlvbiBpcyANCisgICogICAgICAgICAgICAgbmVjZXNzYXJ5KS4gDQorICAqICAgICAgICANCisgICogICAgICAgICAgMy4gRm9yIGEgZ2l2ZW4gU3RyZWFtLCBwcm9ncmFtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHRocm91Z2ggZm9sbG93aW5nIHBhcmFtZXRlcnM6ICAgDQorICAqICAgICAgICAgICAgIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gYWRkcmVzc2VzLCBUcmFuc2ZlciBEaXJlY3Rpb24sIFRyYW5zZmVyIHNpemUsIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gDQorICAqICAgICAgICAgICAgIGRhdGEgZm9ybWF0cywgQ2lyY3VsYXIgb3IgTm9ybWFsIG1vZGUsIFN0cmVhbSBQcmlvcml0eSBsZXZlbCwgU291cmNlIGFuZCBEZXN0aW5hdGlvbiANCisgICogICAgICAgICAgICAgSW5jcmVtZW50YXRpb24gbW9kZSwgRklGTyBtb2RlIGFuZCBpdHMgVGhyZXNob2xkIChpZiBuZWVkZWQpLCBCdXJzdCBtb2RlIGZvciBTb3VyY2UgYW5kL29yIA0KKyAgKiAgICAgICAgICAgICBEZXN0aW5hdGlvbiAoaWYgbmVlZGVkKSB1c2luZyB0aGUgRE1BX0luaXQoKSBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgVG8gYXZvaWQgZmlsbGluZyB1bi1uZXNlY2Vzc2FyeSBmaWVsZHMsIHlvdSBjYW4gY2FsbCBETUFfU3RydWN0SW5pdCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgIHRvIGluaXRpYWxpemUgYSBnaXZlbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyAocmVzZXQgdmFsdWVzKSwgdGhlIG1vZGlmeQ0KKyAgKiAgICAgICAgICAgICBvbmx5IG5lY2Vzc2FyeSBmaWVsZHMgKGllLiBTb3VyY2UgYW5kIERlc3RpbmF0aW9uIGFkZHJlc3NlcywgVHJhbnNmZXIgc2l6ZSBhbmQgRGF0YSBGb3JtYXRzKS4NCisgICoNCisgICogICAgICAgICAgNC4gRW5hYmxlIHRoZSBOVklDIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQocykgdXNpbmcgdGhlIGZ1bmN0aW9uIA0KKyAgKiAgICAgICAgICAgICBETUFfSVRDb25maWcoKSBpZiB5b3UgbmVlZCB0byB1c2UgRE1BIGludGVycnVwdHMuIA0KKyAgKg0KKyAgKiAgICAgICAgICA1LiBPcHRpb25hbGx5LCBpZiB0aGUgQ2lyY3VsYXIgbW9kZSBpcyBlbmFibGVkLCB5b3UgY2FuIHVzZSB0aGUgRG91YmxlIGJ1ZmZlciBtb2RlIGJ5IGNvbmZpZ3VyaW5nIA0KKyAgKiAgICAgICAgICAgICB0aGUgc2Vjb25kIE1lbW9yeSBhZGRyZXNzIGFuZCB0aGUgZmlyc3QgTWVtb3J5IHRvIGJlIHVzZWQgdGhyb3VnaCB0aGUgZnVuY3Rpb24gDQorICAqICAgICAgICAgICAgIERNQV9Eb3VibGVCdWZmZXJNb2RlQ29uZmlnKCkuIFRoZW4gZW5hYmxlIHRoZSBEb3VibGUgYnVmZmVyIG1vZGUgdGhyb3VnaCB0aGUgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgRE1BX0RvdWJsZUJ1ZmZlck1vZGVDbWQoKS4gVGhlc2Ugb3BlcmF0aW9ucyBtdXN0IGJlIGRvbmUgYmVmb3JlIHN0ZXAgNi4NCisgICogICAgDQorICAqICAgICAgICAgIDYuIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSB1c2luZyB0aGUgRE1BX0NtZCgpIGZ1bmN0aW9uLiANCisgICogICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDcuIEFjdGl2YXRlIHRoZSBuZWVkZWQgU3RyZWFtIFJlcXVlc3QgdXNpbmcgUFBQX0RNQUNtZCgpIGZ1bmN0aW9uIGZvcg0KKyAgKiAgICAgICAgICAgICBhbnkgUFBQIHBlcmlwaGVyYWwgZXhjZXB0IGludGVybmFsIFNSQU0gYW5kIEZMQVNIIChpZS4gU1BJLCBVU0FSVCAuLi4pDQorICAqICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBhbGxvd2luZyB0aGlzIG9wZXJhdGlvbiBpcyBwcm92aWRlZCBpbiBlYWNoIFBQUCBwZXJpcGhlcmFsDQorICAqICAgICAgICAgICAgIGRyaXZlciAoaWUuIFNQSV9ETUFDbWQgZm9yIFNQSSBwZXJpcGhlcmFsKS4NCisgICogICAgICAgICAgICAgT25jZSB0aGUgU3RyZWFtIGlzIGVuYWJsZWQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBtb2RpZnkgaXRzIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgICAgdW5sZXNzIHRoZSBzdHJlYW0gaXMgc3RvcHBlZCBhbmQgZGlzYWJsZWQuDQorICAqICAgICAgICAgICAgIEFmdGVyIGVuYWJsaW5nIHRoZSBTdHJlYW0sIGl0IGlzIGFkdmlzZWQgdG8gbW9uaXRvciB0aGUgRU4gYml0IHN0YXR1cyB1c2luZw0KKyAgKiAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gRE1BX0dldENtZFN0YXR1cygpLiBJbiBjYXNlIG9mIGNvbmZpZ3VyYXRpb24gZXJyb3JzIG9yIGJ1cyBlcnJvcnMNCisgICogICAgICAgICAgICAgdGhpcyBiaXQgd2lsbCByZW1haW4gcmVzZXQgYW5kIGFsbCB0cmFuc2ZlcnMgb24gdGhpcyBTdHJlYW0gd2lsbCByZW1haW4gb24gaG9sZC4gICAgICANCisgICoNCisgICogICAgICAgICAgOC4gT3B0aW9uYWxseSwgeW91IGNhbiBjb25maWd1cmUgdGhlIG51bWJlciBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkDQorICAqICAgICAgICAgICAgIHdoZW4gdGhlIFN0cmVhbSBpcyBkaXNhYmxlZCAoaWUuIGFmdGVyIGVhY2ggVHJhbnNmZXIgQ29tcGxldGUgZXZlbnQNCisgICogICAgICAgICAgICAgb3Igd2hlbiBhIFRyYW5zZmVyIEVycm9yIG9jY3VycykgdXNpbmcgdGhlIGZ1bmN0aW9uIERNQV9TZXRDdXJyRGF0YUNvdW50ZXIoKS4NCisgICogICAgICAgICAgICAgQW5kIHlvdSBjYW4gZ2V0IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgdXNpbmcgDQorICAqICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBETUFfR2V0Q3VyckRhdGFDb3VudGVyKCkgYXQgcnVuIHRpbWUgKHdoZW4gdGhlIERNQSBTdHJlYW0gaXMNCisgICogICAgICAgICAgICAgZW5hYmxlZCBhbmQgcnVubmluZykuICANCisgICogICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDkuIFRvIGNvbnRyb2wgRE1BIGV2ZW50cyB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgICAgIHR3byBtZXRob2RzOg0KKyAgKiAgICAgICAgICAgICAgIGEtIENoZWNrIG9uIERNQSBTdHJlYW0gZmxhZ3MgdXNpbmcgdGhlIGZ1bmN0aW9uIERNQV9HZXRGbGFnU3RhdHVzKCkuICANCisgICogICAgICAgICAgICAgICBiLSBVc2UgRE1BIGludGVycnVwdHMgdGhyb3VnaCB0aGUgZnVuY3Rpb24gRE1BX0lUQ29uZmlnKCkgYXQgaW5pdGlhbGl6YXRpb24NCisgICogICAgICAgICAgICAgICAgICBwaGFzZSBhbmQgRE1BX0dldElUU3RhdHVzKCkgZnVuY3Rpb24gaW50byBpbnRlcnJ1cHQgcm91dGluZXMgaW4NCisgICogICAgICAgICAgICAgICAgICBjb21tdW5pY2F0aW9uIHBoYXNlLiAgDQorICAqICAgICAgICAgICAgICBBZnRlciBjaGVja2luZyBvbiBhIGZsYWcgeW91IHNob3VsZCBjbGVhciBpdCB1c2luZyBETUFfQ2xlYXJGbGFnKCkNCisgICogICAgICAgICAgICAgIGZ1bmN0aW9uLiBBbmQgYWZ0ZXIgY2hlY2tpbmcgb24gYW4gaW50ZXJydXB0IGV2ZW50IHlvdSBzaG91bGQgDQorICAqICAgICAgICAgICAgICBjbGVhciBpdCB1c2luZyBETUFfQ2xlYXJJVFBlbmRpbmdCaXQoKSBmdW5jdGlvbi4gICAgDQorICAqICAgICAgICAgICAgICANCisgICogICAgICAgICAgMTAuIE9wdGlvbmFsbHksIGlmIENpcmN1bGFyIG1vZGUgYW5kIERvdWJsZSBCdWZmZXIgbW9kZSBhcmUgZW5hYmxlZCwgeW91IGNhbiBtb2RpZnkNCisgICogICAgICAgICAgICAgIHRoZSBNZW1vcnkgQWRkcmVzc2VzIHVzaW5nIHRoZSBmdW5jdGlvbiBETUFfTWVtb3J5VGFyZ2V0Q29uZmlnKCkuIE1ha2Ugc3VyZSB0aGF0DQorICAqICAgICAgICAgICAgICB0aGUgTWVtb3J5IEFkZHJlc3MgdG8gYmUgbW9kaWZpZWQgaXMgbm90IHRoZSBvbmUgY3VycmVudGx5IGluIHVzZSBieSBETUEgU3RyZWFtLg0KKyAgKiAgICAgICAgICAgICAgVGhpcyBjb25kaXRpb24gY2FuIGJlIG1vbml0b3JlZCB1c2luZyB0aGUgZnVuY3Rpb24gRE1BX0dldEN1cnJlbnRNZW1vcnlUYXJnZXQoKS4NCisgICogICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAxMS4gT3B0aW9uYWxseSwgUGF1c2UtUmVzdW1lIG9wZXJhdGlvbnMgbWF5IGJlIHBlcmZvcm1lZDoNCisgICogICAgICAgICAgICAgIFRoZSBETUFfQ21kKCkgZnVuY3Rpb24gbWF5IGJlIHVzZWQgdG8gcGVyZm9ybSBQYXVzZS1SZXN1bWUgb3BlcmF0aW9uLiBXaGVuIGEgDQorICAqICAgICAgICAgICAgICB0cmFuc2ZlciBpcyBvbmdvaW5nLCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWJsZSB0aGUgU3RyZWFtIHdpbGwgY2F1c2UgdGhlIA0KKyAgKiAgICAgICAgICAgICAgdHJhbnNmZXIgdG8gYmUgcGF1c2VkLiBBbGwgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIA0KKyAgKiAgICAgICAgICAgICAgZGF0YSB3aWxsIGJlIHByZXNlcnZlZC4gV2hlbiBjYWxsaW5nIGFnYWluIHRoaXMgZnVuY3Rpb24gdG8gcmUtZW5hYmxlIHRoZSBTdHJlYW0sIA0KKyAgKiAgICAgICAgICAgICAgdGhlIHRyYW5zZmVyIHdpbGwgYmUgcmVzdW1lZCBmcm9tIHRoZSBwb2ludCB3aGVyZSBpdCB3YXMgcGF1c2VkLiAgICAgICAgICANCisgICogICAgICAgICAgICAgICAgIA0KKyAgKiBAbm90ZSAgIE1lbW9yeS10by1NZW1vcnkgdHJhbnNmZXIgaXMgcG9zc2libGUgYnkgc2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGludG8NCisgICogICAgICAgICB0aGUgUGVyaXBoZXJhbCByZWdpc3RlcnMuIEluIHRoaXMgbW9kZSwgQ2lyY3VsYXIgbW9kZSBhbmQgRG91YmxlIEJ1ZmZlciBtb2RlDQorICAqICAgICAgICAgYXJlIG5vdCBhbGxvd2VkLg0KKyAgKiAgDQorICAqIEBub3RlICAgVGhlIEZJRk8gaXMgdXNlZCBtYWlubHkgdG8gcmVkdWNlIGJ1cyB1c2FnZSBhbmQgdG8gYWxsb3cgZGF0YSBwYWNraW5nL3VucGFja2luZzogaXQgaXMNCisgICogICAgICAgICBwb3NzaWJsZSB0byBzZXQgZGlmZmVyZW50IERhdGEgU2l6ZXMgZm9yIHRoZSBQZXJpcGhlcmFsIGFuZCB0aGUgTWVtb3J5IChpZS4geW91IGNhbiBzZXQNCisgICogICAgICAgICBIYWxmLVdvcmQgZGF0YSBzaXplIGZvciB0aGUgcGVyaXBoZXJhbCB0byBhY2Nlc3MgaXRzIGRhdGEgcmVnaXN0ZXIgYW5kIHNldCBXb3JkIGRhdGEgc2l6ZQ0KKyAgKiAgICAgICAgIGZvciB0aGUgTWVtb3J5IHRvIGdhaW4gaW4gYWNjZXNzIHRpbWUuIEVhY2ggdHdvIEhhbGYtd29yZHMgd2lsbCBiZSBwYWNrZWQgYW5kIHdyaXR0ZW4gaW4NCisgICogICAgICAgICBhIHNpbmdsZSBhY2Nlc3MgdG8gYSBXb3JkIGluIHRoZSBNZW1vcnkpLg0KKyAgKiAgICANCisgICogQG5vdGUgIFdoZW4gRklGTyBpcyBkaXNhYmxlZCwgaXQgaXMgbm90IGFsbG93ZWQgdG8gY29uZmlndXJlIGRpZmZlcmVudCBEYXRhIFNpemVzIGZvciBTb3VyY2UNCisgICogICAgICAgIGFuZCBEZXN0aW5hdGlvbi4gSW4gdGhpcyBjYXNlIHRoZSBQZXJpcGhlcmFsIERhdGEgU2l6ZSB3aWxsIGJlIGFwcGxpZWQgdG8gYm90aCBTb3VyY2UNCisgICogICAgICAgIGFuZCBEZXN0aW5hdGlvbi4gICAgICAgICAgICAgICANCisgICoNCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9kbWEuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIERNQSANCisgICogQGJyaWVmIERNQSBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIE1hc2tzIERlZmluaXRpb24gKi8NCisjZGVmaW5lIFRSQU5TRkVSX0lUX0VOQUJMRV9NQVNLICh1aW50MzJfdCkoRE1BX1N4Q1JfVENJRSB8IERNQV9TeENSX0hUSUUgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9TeENSX1RFSUUgfCBETUFfU3hDUl9ETUVJRSkNCisNCisjZGVmaW5lIERNQV9TdHJlYW0wX0lUX01BU0sgICAgICh1aW50MzJfdCkoRE1BX0xJU1JfRkVJRjAgfCBETUFfTElTUl9ETUVJRjAgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9MSVNSX1RFSUYwIHwgRE1BX0xJU1JfSFRJRjAgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9MSVNSX1RDSUYwKQ0KKw0KKyNkZWZpbmUgRE1BX1N0cmVhbTFfSVRfTUFTSyAgICAgKHVpbnQzMl90KShETUFfU3RyZWFtMF9JVF9NQVNLIDw8IDYpDQorI2RlZmluZSBETUFfU3RyZWFtMl9JVF9NQVNLICAgICAodWludDMyX3QpKERNQV9TdHJlYW0wX0lUX01BU0sgPDwgMTYpDQorI2RlZmluZSBETUFfU3RyZWFtM19JVF9NQVNLICAgICAodWludDMyX3QpKERNQV9TdHJlYW0wX0lUX01BU0sgPDwgMjIpDQorI2RlZmluZSBETUFfU3RyZWFtNF9JVF9NQVNLICAgICAodWludDMyX3QpKERNQV9TdHJlYW0wX0lUX01BU0sgfCAodWludDMyX3QpMHgyMDAwMDAwMCkNCisjZGVmaW5lIERNQV9TdHJlYW01X0lUX01BU0sgICAgICh1aW50MzJfdCkoRE1BX1N0cmVhbTFfSVRfTUFTSyB8ICh1aW50MzJfdCkweDIwMDAwMDAwKQ0KKyNkZWZpbmUgRE1BX1N0cmVhbTZfSVRfTUFTSyAgICAgKHVpbnQzMl90KShETUFfU3RyZWFtMl9JVF9NQVNLIHwgKHVpbnQzMl90KTB4MjAwMDAwMDApDQorI2RlZmluZSBETUFfU3RyZWFtN19JVF9NQVNLICAgICAodWludDMyX3QpKERNQV9TdHJlYW0zX0lUX01BU0sgfCAodWludDMyX3QpMHgyMDAwMDAwMCkNCisjZGVmaW5lIFRSQU5TRkVSX0lUX01BU0sgICAgICAgICh1aW50MzJfdCkweDBGM0MwRjNDDQorI2RlZmluZSBISUdIX0lTUl9NQVNLICAgICAgICAgICAodWludDMyX3QpMHgyMDAwMDAwMA0KKyNkZWZpbmUgUkVTRVJWRURfTUFTSyAgICAgICAgICAgKHVpbnQzMl90KTB4MEY3RDBGN0QgIA0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorDQorLyoqIEBkZWZncm91cCBETUFfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBETUFfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGluaXRpYWxpemUgdGhlIERNQSBTdHJlYW0gc291cmNlDQorICBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzLCBpbmNyZW1lbnRhdGlvbiBhbmQgZGF0YSBzaXplcywgdHJhbnNmZXIgZGlyZWN0aW9uLCANCisgIGJ1ZmZlciBzaXplLCBjaXJjdWxhci9ub3JtYWwgbW9kZSBzZWxlY3Rpb24sIG1lbW9yeS10by1tZW1vcnkgbW9kZSBzZWxlY3Rpb24gDQorICBhbmQgU3RyZWFtIHByaW9yaXR5IHZhbHVlLg0KKyAgDQorICBUaGUgRE1BX0luaXQoKSBmdW5jdGlvbiBmb2xsb3dzIHRoZSBETUEgY29uZmlndXJhdGlvbiBwcm9jZWR1cmVzIGFzIGRlc2NyaWJlZCBpbg0KKyAgcmVmZXJlbmNlIG1hbnVhbCAoUk0wMDMzKSBleGNlcHQgdGhlIGZpcnN0IHBvaW50OiB3YWl0aW5nIG9uIEVOIGJpdCB0byBiZSByZXNldC4NCisgIFRoaXMgY29uZGl0aW9uIHNob3VsZCBiZSBjaGVja2VkIGJ5IHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIGZ1bmN0aW9uIERNQV9HZXRDbWRTdGF0dXMoKQ0KKyAgYmVmb3JlIGNhbGxpbmcgdGhlIERNQV9Jbml0KCkgZnVuY3Rpb24uDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZSB0aGUgRE1BeSBTdHJlYW14IHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4NCisgICogQHBhcmFtICBETUF5X1N0cmVhbXg6IHdoZXJlIHkgY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIERNQSBhbmQgeCBjYW4gYmUgMA0KKyAgKiAgICAgICAgIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBETUFfRGVJbml0KERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorDQorICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBETUF5IFN0cmVhbXggKi8NCisgIERNQXlfU3RyZWFteC0+Q1IgJj0gfigodWludDMyX3QpRE1BX1N4Q1JfRU4pOw0KKw0KKyAgLyogUmVzZXQgRE1BeSBTdHJlYW14IGNvbnRyb2wgcmVnaXN0ZXIgKi8NCisgIERNQXlfU3RyZWFteC0+Q1IgID0gMDsNCisgIA0KKyAgLyogUmVzZXQgRE1BeSBTdHJlYW14IE51bWJlciBvZiBEYXRhIHRvIFRyYW5zZmVyIHJlZ2lzdGVyICovDQorICBETUF5X1N0cmVhbXgtPk5EVFIgPSAwOw0KKyAgDQorICAvKiBSZXNldCBETUF5IFN0cmVhbXggcGVyaXBoZXJhbCBhZGRyZXNzIHJlZ2lzdGVyICovDQorICBETUF5X1N0cmVhbXgtPlBBUiAgPSAwOw0KKyAgDQorICAvKiBSZXNldCBETUF5IFN0cmVhbXggbWVtb3J5IDAgYWRkcmVzcyByZWdpc3RlciAqLw0KKyAgRE1BeV9TdHJlYW14LT5NMEFSID0gMDsNCisNCisgIC8qIFJlc2V0IERNQXkgU3RyZWFteCBtZW1vcnkgMSBhZGRyZXNzIHJlZ2lzdGVyICovDQorICBETUF5X1N0cmVhbXgtPk0xQVIgPSAwOw0KKw0KKyAgLyogUmVzZXQgRE1BeSBTdHJlYW14IEZJRk8gY29udHJvbCByZWdpc3RlciAqLw0KKyAgRE1BeV9TdHJlYW14LT5GQ1IgPSAodWludDMyX3QpMHgwMDAwMDAyMTsgDQorDQorICAvKiBSZXNldCBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGZvciB0aGUgc2VsZWN0ZWQgc3RyZWFtICovDQorICBpZiAoRE1BeV9TdHJlYW14ID09IERNQTFfU3RyZWFtMCkNCisgIHsNCisgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMSBTdHJlYW0wICovDQorICAgIERNQTEtPkxJRkNSID0gRE1BX1N0cmVhbTBfSVRfTUFTSzsNCisgIH0NCisgIGVsc2UgaWYgKERNQXlfU3RyZWFteCA9PSBETUExX1N0cmVhbTEpDQorICB7DQorICAgIC8qIFJlc2V0IGludGVycnVwdCBwZW5kaW5nIGJpdHMgZm9yIERNQTEgU3RyZWFtMSAqLw0KKyAgICBETUExLT5MSUZDUiA9IERNQV9TdHJlYW0xX0lUX01BU0s7DQorICB9DQorICBlbHNlIGlmIChETUF5X1N0cmVhbXggPT0gRE1BMV9TdHJlYW0yKQ0KKyAgew0KKyAgICAvKiBSZXNldCBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGZvciBETUExIFN0cmVhbTIgKi8NCisgICAgRE1BMS0+TElGQ1IgPSBETUFfU3RyZWFtMl9JVF9NQVNLOw0KKyAgfQ0KKyAgZWxzZSBpZiAoRE1BeV9TdHJlYW14ID09IERNQTFfU3RyZWFtMykNCisgIHsNCisgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMSBTdHJlYW0zICovDQorICAgIERNQTEtPkxJRkNSID0gRE1BX1N0cmVhbTNfSVRfTUFTSzsNCisgIH0NCisgIGVsc2UgaWYgKERNQXlfU3RyZWFteCA9PSBETUExX1N0cmVhbTQpDQorICB7DQorICAgIC8qIFJlc2V0IGludGVycnVwdCBwZW5kaW5nIGJpdHMgZm9yIERNQTEgU3RyZWFtNCAqLw0KKyAgICBETUExLT5ISUZDUiA9IERNQV9TdHJlYW00X0lUX01BU0s7DQorICB9DQorICBlbHNlIGlmIChETUF5X1N0cmVhbXggPT0gRE1BMV9TdHJlYW01KQ0KKyAgew0KKyAgICAvKiBSZXNldCBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGZvciBETUExIFN0cmVhbTUgKi8NCisgICAgRE1BMS0+SElGQ1IgPSBETUFfU3RyZWFtNV9JVF9NQVNLOw0KKyAgfQ0KKyAgZWxzZSBpZiAoRE1BeV9TdHJlYW14ID09IERNQTFfU3RyZWFtNikNCisgIHsNCisgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMSBTdHJlYW02ICovDQorICAgIERNQTEtPkhJRkNSID0gKHVpbnQzMl90KURNQV9TdHJlYW02X0lUX01BU0s7DQorICB9DQorICBlbHNlIGlmIChETUF5X1N0cmVhbXggPT0gRE1BMV9TdHJlYW03KQ0KKyAgew0KKyAgICAvKiBSZXNldCBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGZvciBETUExIFN0cmVhbTcgKi8NCisgICAgRE1BMS0+SElGQ1IgPSBETUFfU3RyZWFtN19JVF9NQVNLOw0KKyAgfQ0KKyAgZWxzZSBpZiAoRE1BeV9TdHJlYW14ID09IERNQTJfU3RyZWFtMCkNCisgIHsNCisgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMiBTdHJlYW0wICovDQorICAgIERNQTItPkxJRkNSID0gRE1BX1N0cmVhbTBfSVRfTUFTSzsNCisgIH0NCisgIGVsc2UgaWYgKERNQXlfU3RyZWFteCA9PSBETUEyX1N0cmVhbTEpDQorICB7DQorICAgIC8qIFJlc2V0IGludGVycnVwdCBwZW5kaW5nIGJpdHMgZm9yIERNQTIgU3RyZWFtMSAqLw0KKyAgICBETUEyLT5MSUZDUiA9IERNQV9TdHJlYW0xX0lUX01BU0s7DQorICB9DQorICBlbHNlIGlmIChETUF5X1N0cmVhbXggPT0gRE1BMl9TdHJlYW0yKQ0KKyAgew0KKyAgICAvKiBSZXNldCBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGZvciBETUEyIFN0cmVhbTIgKi8NCisgICAgRE1BMi0+TElGQ1IgPSBETUFfU3RyZWFtMl9JVF9NQVNLOw0KKyAgfQ0KKyAgZWxzZSBpZiAoRE1BeV9TdHJlYW14ID09IERNQTJfU3RyZWFtMykNCisgIHsNCisgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMiBTdHJlYW0zICovDQorICAgIERNQTItPkxJRkNSID0gRE1BX1N0cmVhbTNfSVRfTUFTSzsNCisgIH0NCisgIGVsc2UgaWYgKERNQXlfU3RyZWFteCA9PSBETUEyX1N0cmVhbTQpDQorICB7DQorICAgIC8qIFJlc2V0IGludGVycnVwdCBwZW5kaW5nIGJpdHMgZm9yIERNQTIgU3RyZWFtNCAqLw0KKyAgICBETUEyLT5ISUZDUiA9IERNQV9TdHJlYW00X0lUX01BU0s7DQorICB9DQorICBlbHNlIGlmIChETUF5X1N0cmVhbXggPT0gRE1BMl9TdHJlYW01KQ0KKyAgew0KKyAgICAvKiBSZXNldCBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGZvciBETUEyIFN0cmVhbTUgKi8NCisgICAgRE1BMi0+SElGQ1IgPSBETUFfU3RyZWFtNV9JVF9NQVNLOw0KKyAgfQ0KKyAgZWxzZSBpZiAoRE1BeV9TdHJlYW14ID09IERNQTJfU3RyZWFtNikNCisgIHsNCisgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMiBTdHJlYW02ICovDQorICAgIERNQTItPkhJRkNSID0gRE1BX1N0cmVhbTZfSVRfTUFTSzsNCisgIH0NCisgIGVsc2UgDQorICB7DQorICAgIGlmIChETUF5X1N0cmVhbXggPT0gRE1BMl9TdHJlYW03KQ0KKyAgICB7DQorICAgICAgLyogUmVzZXQgaW50ZXJydXB0IHBlbmRpbmcgYml0cyBmb3IgRE1BMiBTdHJlYW03ICovDQorICAgICAgRE1BMi0+SElGQ1IgPSBETUFfU3RyZWFtN19JVF9NQVNLOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBETUF5IFN0cmVhbXggYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbiANCisgICogICAgICAgICB0aGUgRE1BX0luaXRTdHJ1Y3Qgc3RydWN0dXJlLg0KKyAgKiBAbm90ZSAgIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNoZWNrIHRoYXQgdGhlIFN0cmVhbSANCisgICogICAgICAgICBpcyBhY3R1YWxseSBkaXNhYmxlZCB1c2luZyB0aGUgZnVuY3Rpb24gRE1BX0dldENtZFN0YXR1cygpLiAgDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHBhcmFtICBETUFfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIERNQV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucw0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBTdHJlYW0uICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRE1BX0luaXQoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIERNQV9Jbml0VHlwZURlZiogRE1BX0luaXRTdHJ1Y3QpDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0NIQU5ORUwoRE1BX0luaXRTdHJ1Y3QtPkRNQV9DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0RJUkVDVElPTihETUFfSW5pdFN0cnVjdC0+RE1BX0RJUikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9CVUZGRVJfU0laRShETUFfSW5pdFN0cnVjdC0+RE1BX0J1ZmZlclNpemUpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfUEVSSVBIRVJBTF9JTkNfU1RBVEUoRE1BX0luaXRTdHJ1Y3QtPkRNQV9QZXJpcGhlcmFsSW5jKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX01FTU9SWV9JTkNfU1RBVEUoRE1BX0luaXRTdHJ1Y3QtPkRNQV9NZW1vcnlJbmMpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfUEVSSVBIRVJBTF9EQVRBX1NJWkUoRE1BX0luaXRTdHJ1Y3QtPkRNQV9QZXJpcGhlcmFsRGF0YVNpemUpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfTUVNT1JZX0RBVEFfU0laRShETUFfSW5pdFN0cnVjdC0+RE1BX01lbW9yeURhdGFTaXplKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX01PREUoRE1BX0luaXRTdHJ1Y3QtPkRNQV9Nb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX1BSSU9SSVRZKERNQV9Jbml0U3RydWN0LT5ETUFfUHJpb3JpdHkpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfRklGT19NT0RFX1NUQVRFKERNQV9Jbml0U3RydWN0LT5ETUFfRklGT01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfRklGT19USFJFU0hPTEQoRE1BX0luaXRTdHJ1Y3QtPkRNQV9GSUZPVGhyZXNob2xkKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX01FTU9SWV9CVVJTVChETUFfSW5pdFN0cnVjdC0+RE1BX01lbW9yeUJ1cnN0KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX1BFUklQSEVSQUxfQlVSU1QoRE1BX0luaXRTdHJ1Y3QtPkRNQV9QZXJpcGhlcmFsQnVyc3QpKTsNCisNCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBETUF5IFN0cmVhbXggQ1IgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogR2V0IHRoZSBETUF5X1N0cmVhbXggQ1IgdmFsdWUgKi8NCisgIHRtcHJlZyA9IERNQXlfU3RyZWFteC0+Q1I7DQorDQorICAvKiBDbGVhciBDSFNFTCwgTUJVUlNULCBQQlVSU1QsIFBMLCBNU0laRSwgUFNJWkUsIE1JTkMsIFBJTkMsIENJUkMgYW5kIERJUiBiaXRzICovDQorICB0bXByZWcgJj0gKCh1aW50MzJfdCl+KERNQV9TeENSX0NIU0VMIHwgRE1BX1N4Q1JfTUJVUlNUIHwgRE1BX1N4Q1JfUEJVUlNUIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBETUFfU3hDUl9QTCB8IERNQV9TeENSX01TSVpFIHwgRE1BX1N4Q1JfUFNJWkUgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9TeENSX01JTkMgfCBETUFfU3hDUl9QSU5DIHwgRE1BX1N4Q1JfQ0lSQyB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1N4Q1JfRElSKSk7DQorDQorICAvKiBDb25maWd1cmUgRE1BeSBTdHJlYW14OiAqLw0KKyAgLyogU2V0IENIU0VMIGJpdHMgYWNjb3JkaW5nIHRvIERNQV9DSFNFTCB2YWx1ZSAqLw0KKyAgLyogU2V0IERJUiBiaXRzIGFjY29yZGluZyB0byBETUFfRElSIHZhbHVlICovDQorICAvKiBTZXQgUElOQyBiaXQgYWNjb3JkaW5nIHRvIERNQV9QZXJpcGhlcmFsSW5jIHZhbHVlICovDQorICAvKiBTZXQgTUlOQyBiaXQgYWNjb3JkaW5nIHRvIERNQV9NZW1vcnlJbmMgdmFsdWUgKi8NCisgIC8qIFNldCBQU0laRSBiaXRzIGFjY29yZGluZyB0byBETUFfUGVyaXBoZXJhbERhdGFTaXplIHZhbHVlICovDQorICAvKiBTZXQgTVNJWkUgYml0cyBhY2NvcmRpbmcgdG8gRE1BX01lbW9yeURhdGFTaXplIHZhbHVlICovDQorICAvKiBTZXQgQ0lSQyBiaXQgYWNjb3JkaW5nIHRvIERNQV9Nb2RlIHZhbHVlICovDQorICAvKiBTZXQgUEwgYml0cyBhY2NvcmRpbmcgdG8gRE1BX1ByaW9yaXR5IHZhbHVlICovDQorICAvKiBTZXQgTUJVUlNUIGJpdHMgYWNjb3JkaW5nIHRvIERNQV9NZW1vcnlCdXJzdCB2YWx1ZSAqLw0KKyAgLyogU2V0IFBCVVJTVCBiaXRzIGFjY29yZGluZyB0byBETUFfUGVyaXBoZXJhbEJ1cnN0IHZhbHVlICovDQorICB0bXByZWcgfD0gRE1BX0luaXRTdHJ1Y3QtPkRNQV9DaGFubmVsIHwgRE1BX0luaXRTdHJ1Y3QtPkRNQV9ESVIgfA0KKyAgICAgICAgICAgIERNQV9Jbml0U3RydWN0LT5ETUFfUGVyaXBoZXJhbEluYyB8IERNQV9Jbml0U3RydWN0LT5ETUFfTWVtb3J5SW5jIHwNCisgICAgICAgICAgICBETUFfSW5pdFN0cnVjdC0+RE1BX1BlcmlwaGVyYWxEYXRhU2l6ZSB8IERNQV9Jbml0U3RydWN0LT5ETUFfTWVtb3J5RGF0YVNpemUgfA0KKyAgICAgICAgICAgIERNQV9Jbml0U3RydWN0LT5ETUFfTW9kZSB8IERNQV9Jbml0U3RydWN0LT5ETUFfUHJpb3JpdHkgfA0KKyAgICAgICAgICAgIERNQV9Jbml0U3RydWN0LT5ETUFfTWVtb3J5QnVyc3QgfCBETUFfSW5pdFN0cnVjdC0+RE1BX1BlcmlwaGVyYWxCdXJzdDsNCisNCisgIC8qIFdyaXRlIHRvIERNQXkgU3RyZWFteCBDUiByZWdpc3RlciAqLw0KKyAgRE1BeV9TdHJlYW14LT5DUiA9IHRtcHJlZzsNCisNCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBETUF5IFN0cmVhbXggRkNSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogR2V0IHRoZSBETUF5X1N0cmVhbXggRkNSIHZhbHVlICovDQorICB0bXByZWcgPSBETUF5X1N0cmVhbXgtPkZDUjsNCisNCisgIC8qIENsZWFyIERNRElTIGFuZCBGVEggYml0cyAqLw0KKyAgdG1wcmVnICY9ICh1aW50MzJfdCl+KERNQV9TeEZDUl9ETURJUyB8IERNQV9TeEZDUl9GVEgpOw0KKw0KKyAgLyogQ29uZmlndXJlIERNQXkgU3RyZWFteCBGSUZPOiANCisgICAgU2V0IERNRElTIGJpdHMgYWNjb3JkaW5nIHRvIERNQV9GSUZPTW9kZSB2YWx1ZSANCisgICAgU2V0IEZUSCBiaXRzIGFjY29yZGluZyB0byBETUFfRklGT1RocmVzaG9sZCB2YWx1ZSAqLw0KKyAgdG1wcmVnIHw9IERNQV9Jbml0U3RydWN0LT5ETUFfRklGT01vZGUgfCBETUFfSW5pdFN0cnVjdC0+RE1BX0ZJRk9UaHJlc2hvbGQ7DQorDQorICAvKiBXcml0ZSB0byBETUF5IFN0cmVhbXggQ1IgKi8NCisgIERNQXlfU3RyZWFteC0+RkNSID0gdG1wcmVnOw0KKw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERNQXkgU3RyZWFteCBORFRSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBXcml0ZSB0byBETUF5IFN0cmVhbXggTkRUUiByZWdpc3RlciAqLw0KKyAgRE1BeV9TdHJlYW14LT5ORFRSID0gRE1BX0luaXRTdHJ1Y3QtPkRNQV9CdWZmZXJTaXplOw0KKw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERNQXkgU3RyZWFteCBQQVIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBXcml0ZSB0byBETUF5IFN0cmVhbXggUEFSICovDQorICBETUF5X1N0cmVhbXgtPlBBUiA9IERNQV9Jbml0U3RydWN0LT5ETUFfUGVyaXBoZXJhbEJhc2VBZGRyOw0KKw0KKyAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERNQXkgU3RyZWFteCBNMEFSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBXcml0ZSB0byBETUF5IFN0cmVhbXggTTBBUiAqLw0KKyAgRE1BeV9TdHJlYW14LT5NMEFSID0gRE1BX0luaXRTdHJ1Y3QtPkRNQV9NZW1vcnkwQmFzZUFkZHI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggRE1BX0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgRE1BX0luaXRTdHJ1Y3QgOiBwb2ludGVyIHRvIGEgRE1BX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsIA0KKyAgKiAgICAgICAgIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBETUFfU3RydWN0SW5pdChETUFfSW5pdFR5cGVEZWYqIERNQV9Jbml0U3RydWN0KQ0KK3sNCisgIC8qLS0tLS0tLS0tLS0tLS0gUmVzZXQgRE1BIGluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BX0NoYW5uZWwgbWVtYmVyICovDQorICBETUFfSW5pdFN0cnVjdC0+RE1BX0NoYW5uZWwgPSAwOw0KKw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BX1BlcmlwaGVyYWxCYXNlQWRkciBtZW1iZXIgKi8NCisgIERNQV9Jbml0U3RydWN0LT5ETUFfUGVyaXBoZXJhbEJhc2VBZGRyID0gMDsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9NZW1vcnkwQmFzZUFkZHIgbWVtYmVyICovDQorICBETUFfSW5pdFN0cnVjdC0+RE1BX01lbW9yeTBCYXNlQWRkciA9IDA7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBETUFfRElSIG1lbWJlciAqLw0KKyAgRE1BX0luaXRTdHJ1Y3QtPkRNQV9ESVIgPSBETUFfRElSX1BlcmlwaGVyYWxUb01lbW9yeTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9CdWZmZXJTaXplIG1lbWJlciAqLw0KKyAgRE1BX0luaXRTdHJ1Y3QtPkRNQV9CdWZmZXJTaXplID0gMDsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9QZXJpcGhlcmFsSW5jIG1lbWJlciAqLw0KKyAgRE1BX0luaXRTdHJ1Y3QtPkRNQV9QZXJpcGhlcmFsSW5jID0gRE1BX1BlcmlwaGVyYWxJbmNfRGlzYWJsZTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9NZW1vcnlJbmMgbWVtYmVyICovDQorICBETUFfSW5pdFN0cnVjdC0+RE1BX01lbW9yeUluYyA9IERNQV9NZW1vcnlJbmNfRGlzYWJsZTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9QZXJpcGhlcmFsRGF0YVNpemUgbWVtYmVyICovDQorICBETUFfSW5pdFN0cnVjdC0+RE1BX1BlcmlwaGVyYWxEYXRhU2l6ZSA9IERNQV9QZXJpcGhlcmFsRGF0YVNpemVfQnl0ZTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9NZW1vcnlEYXRhU2l6ZSBtZW1iZXIgKi8NCisgIERNQV9Jbml0U3RydWN0LT5ETUFfTWVtb3J5RGF0YVNpemUgPSBETUFfTWVtb3J5RGF0YVNpemVfQnl0ZTsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9Nb2RlIG1lbWJlciAqLw0KKyAgRE1BX0luaXRTdHJ1Y3QtPkRNQV9Nb2RlID0gRE1BX01vZGVfTm9ybWFsOw0KKw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BX1ByaW9yaXR5IG1lbWJlciAqLw0KKyAgRE1BX0luaXRTdHJ1Y3QtPkRNQV9Qcmlvcml0eSA9IERNQV9Qcmlvcml0eV9Mb3c7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBETUFfRklGT01vZGUgbWVtYmVyICovDQorICBETUFfSW5pdFN0cnVjdC0+RE1BX0ZJRk9Nb2RlID0gRE1BX0ZJRk9Nb2RlX0Rpc2FibGU7DQorDQorICAvKiBJbml0aWFsaXplIHRoZSBETUFfRklGT1RocmVzaG9sZCBtZW1iZXIgKi8NCisgIERNQV9Jbml0U3RydWN0LT5ETUFfRklGT1RocmVzaG9sZCA9IERNQV9GSUZPVGhyZXNob2xkXzFRdWFydGVyRnVsbDsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIERNQV9NZW1vcnlCdXJzdCBtZW1iZXIgKi8NCisgIERNQV9Jbml0U3RydWN0LT5ETUFfTWVtb3J5QnVyc3QgPSBETUFfTWVtb3J5QnVyc3RfU2luZ2xlOw0KKw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgRE1BX1BlcmlwaGVyYWxCdXJzdCBtZW1iZXIgKi8NCisgIERNQV9Jbml0U3RydWN0LT5ETUFfUGVyaXBoZXJhbEJ1cnN0ID0gRE1BX1BlcmlwaGVyYWxCdXJzdF9TaW5nbGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBETUF5IFN0cmVhbXguDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBETUF5IFN0cmVhbXguIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKg0KKyAgKiBAbm90ZSAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZCB0byBwZXJmb3JtIFBhdXNlLVJlc3VtZSBvcGVyYXRpb24uIFdoZW4gYQ0KKyAgKiAgICAgICAgdHJhbnNmZXIgaXMgb25nb2luZywgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHRvIGRpc2FibGUgdGhlIFN0cmVhbSB3aWxsDQorICAqICAgICAgICBjYXVzZSB0aGUgdHJhbnNmZXIgdG8gYmUgcGF1c2VkLiBBbGwgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYW5kIHRoZQ0KKyAgKiAgICAgICAgbnVtYmVyIG9mIHJlbWFpbmluZyBkYXRhIHdpbGwgYmUgcHJlc2VydmVkLiBXaGVuIGNhbGxpbmcgYWdhaW4gdGhpcw0KKyAgKiAgICAgICAgZnVuY3Rpb24gdG8gcmUtZW5hYmxlIHRoZSBTdHJlYW0sIHRoZSB0cmFuc2ZlciB3aWxsIGJlIHJlc3VtZWQgZnJvbQ0KKyAgKiAgICAgICAgdGhlIHBvaW50IHdoZXJlIGl0IHdhcyBwYXVzZWQuICAgICAgICAgIA0KKyAgKiAgICANCisgICogQG5vdGUgIEFmdGVyIGNvbmZpZ3VyaW5nIHRoZSBETUEgU3RyZWFtIChETUFfSW5pdCgpIGZ1bmN0aW9uKSBhbmQgZW5hYmxpbmcgdGhlDQorICAqICAgICAgICBzdHJlYW0sIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNoZWNrIChvciB3YWl0IHVudGlsKSB0aGUgRE1BIFN0cmVhbSBpcw0KKyAgKiAgICAgICAgZWZmZWN0aXZlbHkgZW5hYmxlZC4gQSBTdHJlYW0gbWF5IHJlbWFpbiBkaXNhYmxlZCBpZiBhIGNvbmZpZ3VyYXRpb24gDQorICAqICAgICAgICBwYXJhbWV0ZXIgaXMgd3JvbmcuDQorICAqICAgICAgICBBZnRlciBkaXNhYmxpbmcgYSBETUEgU3RyZWFtLCBpdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRvIGNoZWNrIChvciB3YWl0DQorICAqICAgICAgICB1bnRpbCkgdGhlIERNQSBTdHJlYW0gaXMgZWZmZWN0aXZlbHkgZGlzYWJsZWQuIElmIGEgU3RyZWFtIGlzIGRpc2FibGVkIA0KKyAgKiAgICAgICAgd2hpbGUgYSBkYXRhIHRyYW5zZmVyIGlzIG9uZ29pbmcsIHRoZSBjdXJyZW50IGRhdGEgd2lsbCBiZSB0cmFuc2ZlcnJlZA0KKyAgKiAgICAgICAgYW5kIHRoZSBTdHJlYW0gd2lsbCBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZCBvbmx5IGFmdGVyIHRoZSB0cmFuc2ZlciBvZg0KKyAgKiAgICAgICAgdGhpcyBzaW5nbGUgZGF0YSBpcyBmaW5pc2hlZC4gICAgICAgICAgICANCisgICogICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERNQV9DbWQoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIERNQXkgU3RyZWFteCBieSBzZXR0aW5nIEVOIGJpdCAqLw0KKyAgICBETUF5X1N0cmVhbXgtPkNSIHw9ICh1aW50MzJfdClETUFfU3hDUl9FTjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgRE1BeSBTdHJlYW14IGJ5IGNsZWFyaW5nIEVOIGJpdCAqLw0KKyAgICBETUF5X1N0cmVhbXgtPkNSICY9IH4odWludDMyX3QpRE1BX1N4Q1JfRU47DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMsIHdoZW4gdGhlIFBJTkMgKFBlcmlwaGVyYWwgSW5jcmVtZW50IGFkZHJlc3MgbW9kZSkgYml0IGlzDQorICAqICAgICAgICAgc2V0LCBpZiB0aGUgcGVyaXBoZXJhbCBhZGRyZXNzIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB3aXRoIHRoZSBkYXRhIA0KKyAgKiAgICAgICAgIHNpemUgKGNvbmZpZ3VyZWQgd2l0aCBQU0laRSBiaXRzKSBvciBieSBhIGZpeGVkIG9mZnNldCBlcXVhbCB0byA0DQorICAqICAgICAgICAgKDMyLWJpdCBhbGlnbmVkIGFkZHJlc3NlcykuDQorICAqICAgDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IGlmIHRoZSBQZXJpcGhlcmFsIEluY3JlbWVudCBtb2RlIGlzIGRpc2FibGVkLg0KKyAgKiAgICAgDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICAgdG8gNyB0byBzZWxlY3QgdGhlIERNQSBTdHJlYW0uDQorICAqIEBwYXJhbSAgRE1BX1BpbmNvczogc3BlY2lmaWVzIHRoZSBQZXJpcGhlcmFsIGluY3JlbWVudCBvZmZzZXQgc2l6ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9QSU5DT1NfUHNpemU6IFBlcmlwaGVyYWwgYWRkcmVzcyBpbmNyZW1lbnQgaXMgZG9uZSAgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmdseSB0byBQU0laRSBwYXJhbWV0ZXIuDQorICAqICAgICAgICAgICAgQGFyZyBETUFfUElOQ09TX1dvcmRBbGlnbmVkOiBQZXJpcGhlcmFsIGFkZHJlc3MgaW5jcmVtZW50IG9mZnNldCBpcyANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkIHRvIDQgKDMyLWJpdCBhbGlnbmVkIGFkZHJlc3NlcykuIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBETUFfUGVyaXBoSW5jT2Zmc2V0U2l6ZUNvbmZpZyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX1BpbmNvcykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9QSU5DT1NfU0laRShETUFfUGluY29zKSk7DQorDQorICAvKiBDaGVjayB0aGUgbmVlZGVkIFBlcmlwaGVyYWwgaW5jcmVtZW50IG9mZnNldCAqLw0KKyAgaWYoRE1BX1BpbmNvcyAhPSBETUFfUElOQ09TX1BzaXplKQ0KKyAgew0KKyAgICAvKiBDb25maWd1cmUgRE1BX1N4Q1JfUElOQ09TIGJpdCB3aXRoIHRoZSBpbnB1dCBwYXJhbWV0ZXIgKi8NCisgICAgRE1BeV9TdHJlYW14LT5DUiB8PSAodWludDMyX3QpRE1BX1N4Q1JfUElOQ09TOyAgICAgDQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIENsZWFyIHRoZSBQSU5DT1MgYml0OiBQZXJpcGhlcmFsIGFkZHJlc3MgaW5jcmVtZW50ZWQgYWNjb3JkaW5nIHRvIFBTSVpFICovDQorICAgIERNQXlfU3RyZWFteC0+Q1IgJj0gfih1aW50MzJfdClETUFfU3hDUl9QSU5DT1M7ICAgIA0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzLCB3aGVuIHRoZSBETUF5IFN0cmVhbXggaXMgZGlzYWJsZWQsIHRoZSBmbG93IGNvbnRyb2xsZXIgZm9yDQorICAqICAgICAgICAgdGhlIG5leHQgdHJhbnNhY3Rpb25zIChQZXJpcGhlcmFsIG9yIE1lbW9yeSkuDQorICAqICAgICAgIA0KKyAgKiBAbm90ZSAgIEJlZm9yZSBlbmFibGluZyB0aGlzIGZlYXR1cmUsIGNoZWNrIGlmIHRoZSB1c2VkIHBlcmlwaGVyYWwgc3VwcG9ydHMgDQorICAqICAgICAgICAgdGhlIEZsb3cgQ29udHJvbGxlciBtb2RlIG9yIG5vdC4gICAgDQorICAqICANCisgICogQHBhcmFtICBETUF5X1N0cmVhbXg6IHdoZXJlIHkgY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIERNQSBhbmQgeCBjYW4gYmUgMA0KKyAgKiAgICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHBhcmFtICBETUFfRmxvd0N0cmw6IHNwZWNpZmllcyB0aGUgRE1BIGZsb3cgY29udHJvbGxlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9GbG93Q3RybF9NZW1vcnk6IERNQXlfU3RyZWFteCB0cmFuc2FjdGlvbnMgZmxvdyBjb250cm9sbGVyIGlzIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERNQSBjb250cm9sbGVyLg0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX0Zsb3dDdHJsX1BlcmlwaGVyYWw6IERNQXlfU3RyZWFteCB0cmFuc2FjdGlvbnMgZmxvdyBjb250cm9sbGVyIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBwZXJpcGhlcmFsLiAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRE1BX0Zsb3dDb250cm9sbGVyQ29uZmlnKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBETUFfRmxvd0N0cmwpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19ETUFfQUxMX1BFUklQSChETUF5X1N0cmVhbXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfRkxPV19DVFJMKERNQV9GbG93Q3RybCkpOw0KKw0KKyAgLyogQ2hlY2sgdGhlIG5lZWRlZCBmbG93IGNvbnRyb2xsZXIgICovDQorICBpZihETUFfRmxvd0N0cmwgIT0gRE1BX0Zsb3dDdHJsX01lbW9yeSkNCisgIHsNCisgICAgLyogQ29uZmlndXJlIERNQV9TeENSX1BGQ1RSTCBiaXQgd2l0aCB0aGUgaW5wdXQgcGFyYW1ldGVyICovDQorICAgIERNQXlfU3RyZWFteC0+Q1IgfD0gKHVpbnQzMl90KURNQV9TeENSX1BGQ1RSTDsgICANCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogQ2xlYXIgdGhlIFBGQ1RSTCBiaXQ6IE1lbW9yeSBpcyB0aGUgZmxvdyBjb250cm9sbGVyICovDQorICAgIERNQXlfU3RyZWFteC0+Q1IgJj0gfih1aW50MzJfdClETUFfU3hDUl9QRkNUUkw7ICAgIA0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBETUFfR3JvdXAyIERhdGEgQ291bnRlciBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgRGF0YSBDb3VudGVyIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSBDb3VudGVyIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbiBhbGxvd2luZyB0byBjb25maWd1cmUgYW5kIHJlYWQgdGhlIGJ1ZmZlciBzaXplDQorICAobnVtYmVyIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQpLiANCisNCisgIFRoZSBETUEgZGF0YSBjb3VudGVyIGNhbiBiZSB3cml0dGVuIG9ubHkgd2hlbiB0aGUgRE1BIFN0cmVhbSBpcyBkaXNhYmxlZCANCisgIChpZS4gYWZ0ZXIgdHJhbnNmZXIgY29tcGxldGUgZXZlbnQpLg0KKw0KKyAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB3cml0ZSB0aGUgU3RyZWFtIGRhdGEgY291bnRlciB2YWx1ZToNCisgICAgLSB2b2lkIERNQV9TZXRDdXJyRGF0YUNvdW50ZXIoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQxNl90IENvdW50ZXIpOw0KKw0KK0Bub3RlIEl0IGlzIGFkdmlzZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gRE1BX0luaXQoKSBpbiBzaXR1YXRpb25zIHdoZXJlDQorICAgICAgb25seSB0aGUgRGF0YSBidWZmZXIgbmVlZHMgdG8gYmUgcmVsb2FkZWQuDQorDQorQG5vdGUgSWYgdGhlIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gRGF0YSBTaXplcyBhcmUgZGlmZmVyZW50LCB0aGVuIHRoZSB2YWx1ZSB3cml0dGVuIGluDQorICAgICAgZGF0YSBjb3VudGVyLCBleHByZXNzaW5nIHRoZSBudW1iZXIgb2YgdHJhbnNmZXJzLCBpcyByZWxhdGl2ZSB0byB0aGUgbnVtYmVyIG9mIA0KKyAgICAgIHRyYW5zZmVycyBmcm9tIHRoZSBQZXJpcGhlcmFsIHBvaW50IG9mIHZpZXcuDQorICAgICAgaWUuIElmIE1lbW9yeSBkYXRhIHNpemUgaXMgV29yZCwgUGVyaXBoZXJhbCBkYXRhIHNpemUgaXMgSGFsZi1Xb3JkcywgdGhlbiB0aGUgdmFsdWUNCisgICAgICB0byBiZSBjb25maWd1cmVkIGluIHRoZSBkYXRhIGNvdW50ZXIgaXMgdGhlIG51bWJlciBvZiBIYWxmLVdvcmRzIHRvIGJlIHRyYW5zZmVycmVkDQorICAgICAgZnJvbS90byB0aGUgcGVyaXBoZXJhbC4NCisNCisgIFRoZSBETUEgZGF0YSBjb3VudGVyIGNhbiBiZSByZWFkIHRvIGluZGljYXRlIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHRyYW5zZmVycyBmb3INCisgIHRoZSByZWxhdGl2ZSBETUEgU3RyZWFtLiBUaGlzIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGRhdGEgDQorICB0cmFuc2ZlciBhbmQgd2hlbiB0aGUgdHJhbnNmZXIgaXMgY29tcGxldGU6IA0KKyAgIC0gSWYgTm9ybWFsIG1vZGUgaXMgc2VsZWN0ZWQ6IHRoZSBjb3VudGVyIGlzIHNldCB0byAwLg0KKyAgIC0gSWYgQ2lyY3VsYXIgbW9kZSBpcyBzZWxlY3RlZDogdGhlIGNvdW50ZXIgaXMgcmVsb2FkZWQgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZQ0KKyAgICAgKGNvbmZpZ3VyZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBETUEgU3RyZWFtKQ0KKyAgIA0KKyAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSBTdHJlYW0gZGF0YSBjb3VudGVyIHZhbHVlOg0KKyAgICAgLSB1aW50MTZfdCBETUFfR2V0Q3VyckRhdGFDb3VudGVyKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14KTsNCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgV3JpdGVzIHRoZSBudW1iZXIgb2YgZGF0YSB1bml0cyB0byBiZSB0cmFuc2ZlcnJlZCBvbiB0aGUgRE1BeSBTdHJlYW14Lg0KKyAgKiBAcGFyYW0gIERNQXlfU3RyZWFteDogd2hlcmUgeSBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgRE1BIGFuZCB4IGNhbiBiZSAwDQorICAqICAgICAgICAgIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcGFyYW0gIENvdW50ZXI6IE51bWJlciBvZiBkYXRhIHVuaXRzIHRvIGJlIHRyYW5zZmVycmVkIChmcm9tIDAgdG8gNjU1MzUpIA0KKyAgKiAgICAgICAgICBOdW1iZXIgb2YgZGF0YSBpdGVtcyBkZXBlbmRzIG9ubHkgb24gdGhlIFBlcmlwaGVyYWwgZGF0YSBmb3JtYXQuDQorICAqICAgICAgICAgICAgDQorICAqIEBub3RlICAgSWYgUGVyaXBoZXJhbCBkYXRhIGZvcm1hdCBpcyBCeXRlczogbnVtYmVyIG9mIGRhdGEgdW5pdHMgaXMgZXF1YWwgDQorICAqICAgICAgICAgdG8gdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLg0KKyAgKiAgICAgICAgICAgDQorICAqIEBub3RlICAgSWYgUGVyaXBoZXJhbCBkYXRhIGZvcm1hdCBpcyBIYWxmLVdvcmQ6IG51bWJlciBvZiBkYXRhIHVuaXRzIGlzICANCisgICogICAgICAgICBlcXVhbCB0byB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQgLyAyLg0KKyAgKiAgICAgICAgICAgDQorICAqIEBub3RlICAgSWYgUGVyaXBoZXJhbCBkYXRhIGZvcm1hdCBpcyBXb3JkOiBudW1iZXIgb2YgZGF0YSB1bml0cyBpcyBlcXVhbCANCisgICogICAgICAgICB0byB0b3RhbCAgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIC8gNC4NCisgICogICAgICANCisgICogQG5vdGUgICBJbiBNZW1vcnktdG8tTWVtb3J5IHRyYW5zZmVyIG1vZGUsIHRoZSBtZW1vcnkgYnVmZmVyIHBvaW50ZWQgYnkgDQorICAqICAgICAgICAgRE1BeV9TeFBBUiByZWdpc3RlciBpcyBjb25zaWRlcmVkIGFzIFBlcmlwaGVyYWwuDQorICAqICAgICAgDQorICAqIEByZXR2YWwgVGhlIG51bWJlciBvZiByZW1haW5pbmcgZGF0YSB1bml0cyBpbiB0aGUgY3VycmVudCBETUF5IFN0cmVhbXggdHJhbnNmZXIuDQorICAqLw0KK3ZvaWQgRE1BX1NldEN1cnJEYXRhQ291bnRlcihETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDE2X3QgQ291bnRlcikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKw0KKyAgLyogV3JpdGUgdGhlIG51bWJlciBvZiBkYXRhIHVuaXRzIHRvIGJlIHRyYW5zZmVycmVkICovDQorICBETUF5X1N0cmVhbXgtPk5EVFIgPSAodWludDE2X3QpQ291bnRlcjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBkYXRhIHVuaXRzIGluIHRoZSBjdXJyZW50IERNQXkgU3RyZWFteCB0cmFuc2Zlci4NCisgICogQHBhcmFtICBETUF5X1N0cmVhbXg6IHdoZXJlIHkgY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIERNQSBhbmQgeCBjYW4gYmUgMA0KKyAgKiAgICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHJldHZhbCBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyBkYXRhIHVuaXRzIGluIHRoZSBjdXJyZW50IERNQXkgU3RyZWFteCB0cmFuc2Zlci4NCisgICovDQordWludDE2X3QgRE1BX0dldEN1cnJEYXRhQ291bnRlcihETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKw0KKyAgLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGRhdGEgdW5pdHMgZm9yIERNQXkgU3RyZWFteCAqLw0KKyAgcmV0dXJuICgodWludDE2X3QpKERNQXlfU3RyZWFteC0+TkRUUikpOw0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBETUFfR3JvdXAzIERvdWJsZSBCdWZmZXIgbW9kZSBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgRG91YmxlIEJ1ZmZlciBtb2RlIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZSBCdWZmZXIgbW9kZSBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb24gYWxsb3dpbmcgdG8gY29uZmlndXJlIGFuZCBjb250cm9sIHRoZSBkb3VibGUgDQorICBidWZmZXIgbW9kZSBwYXJhbWV0ZXJzLg0KKyAgDQorICBUaGUgRG91YmxlIEJ1ZmZlciBtb2RlIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiBDaXJjdWxhciBtb2RlIGlzIGVuYWJsZWQuDQorICBUaGUgRG91YmxlIEJ1ZmZlciBtb2RlIGNhbm5vdCBiZSB1c2VkIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSBNZW1vcnkgdG8gTWVtb3J5Lg0KKyAgDQorICBUaGUgRG91YmxlIEJ1ZmZlciBtb2RlIGFsbG93cyB0byBzZXQgdHdvIGRpZmZlcmVudCBNZW1vcnkgYWRkcmVzc2VzIGZyb20vdG8gd2hpY2gNCisgIHRoZSBETUEgY29udHJvbGxlciB3aWxsIGFjY2VzcyBhbHRlcm5hdGl2ZWx5IChhZnRlciBjb21wbGV0aW5nIHRyYW5zZmVyIHRvL2Zyb20gdGFyZ2V0DQorICBtZW1vcnkgMCwgaXQgd2lsbCBzdGFydCB0cmFuc2ZlciB0by9mcm9tIHRhcmdldCBtZW1vcnkgMSkuDQorICBUaGlzIGFsbG93cyB0byByZWR1Y2Ugc29mdHdhcmUgb3ZlcmhlYWQgZm9yIGRvdWJsZSBidWZmZXJpbmcgYW5kIHJlZHVjZSB0aGUgQ1BVDQorICBhY2Nlc3MgdGltZS4NCisNCisgIFR3byBmdW5jdGlvbnMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgdGhlIERNQV9Jbml0KCkgZnVuY3Rpb246DQorICAgLSB2b2lkIERNQV9Eb3VibGVCdWZmZXJNb2RlQ29uZmlnKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBNZW1vcnkxQmFzZUFkZHIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBETUFfQ3VycmVudE1lbW9yeSk7DQorICAgLSB2b2lkIERNQV9Eb3VibGVCdWZmZXJNb2RlQ21kKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKyAgIA0KKyAgRE1BX0RvdWJsZUJ1ZmZlck1vZGVDb25maWcoKSBpcyBjYWxsZWQgdG8gY29uZmlndXJlIHRoZSBNZW1vcnkgMSBiYXNlIGFkZHJlc3MgYW5kIHRoZSBmaXJzdA0KKyAgTWVtb3J5IHRhcmdldCBmcm9tL3RvIHdoaWNoIHRoZSB0cmFuc2ZlciB3aWxsIHN0YXJ0IGFmdGVyIGVuYWJsaW5nIHRoZSBETUEgU3RyZWFtLg0KKyAgVGhlbiBETUFfRG91YmxlQnVmZmVyTW9kZUNtZCgpIG11c3QgYmUgY2FsbGVkIHRvIGVuYWJsZSB0aGUgRG91YmxlIEJ1ZmZlciBtb2RlIChvciBkaXNhYmxlIA0KKyAgaXQgd2hlbiBpdCBzaG91bGQgbm90IGJlIHVzZWQpLg0KKyAgDQorICAgDQorICBUd28gZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgZHluYW1pY2FsbHkgd2hlbiB0aGUgdHJhbnNmZXIgaXMgb25nb2luZyAob3Igd2hlbiB0aGUgRE1BIFN0cmVhbSBpcyANCisgIHN0b3BwZWQpIHRvIG1vZGlmeSBvbiBvZiB0aGUgdGFyZ2V0IE1lbW9yaWVzIGFkZHJlc3NlcyBvciB0byBjaGVjayB3aWNoIE1lbW9yeSB0YXJnZXQgaXMgY3VycmVudGx5DQorICAgdXNlZDoNCisgICAgLSB2b2lkIERNQV9NZW1vcnlUYXJnZXRDb25maWcoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IE1lbW9yeUJhc2VBZGRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBETUFfTWVtb3J5VGFyZ2V0KTsNCisgICAgLSB1aW50MzJfdCBETUFfR2V0Q3VycmVudE1lbW9yeVRhcmdldChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCk7DQorDQorICBETUFfTWVtb3J5VGFyZ2V0Q29uZmlnKCkgY2FuIGJlIGNhbGxlZCB0byBtb2RpZnkgdGhlIGJhc2UgYWRkcmVzcyBvZiBvbmUgb2YgdGhlIHR3byB0YXJnZXQgTWVtb3JpZXMuDQorICBUaGUgTWVtb3J5IG9mIHdoaWNoIHRoZSBiYXNlIGFkZHJlc3Mgd2lsbCBiZSBtb2RpZmllZCBtdXN0IG5vdCBiZSBjdXJyZW50bHkgYmUgdXNlZCBieSB0aGUgRE1BIFN0cmVhbQ0KKyAgKGllLiBpZiB0aGUgRE1BIFN0cmVhbSBpcyBjdXJyZW50bHkgdHJhbnNmZXJyaW5nIGZyb20gTWVtb3J5IDEgdGhlbiB5b3UgY2FuIG9ubHkgbW9kaWZ5IGJhc2UgYWRkcmVzcw0KKyAgb2YgdGFyZ2V0IE1lbW9yeSAwIGFuZCB2aWNlIHZlcnNhKS4NCisgIFRvIGNoZWNrIHRoaXMgY29uZGl0aW9uLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGZ1bmN0aW9uIERNQV9HZXRDdXJyZW50TWVtb3J5VGFyZ2V0KCkgd2hpY2gNCisgIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBNZW1vcnkgdGFyZ2V0IGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIERNQSBTdHJlYW0uDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKyAgDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcywgd2hlbiB0aGUgRE1BeSBTdHJlYW14IGlzIGRpc2FibGVkLCB0aGUgZG91YmxlIGJ1ZmZlciBtb2RlIA0KKyAgKiAgICAgICAgIGFuZCB0aGUgY3VycmVudCBtZW1vcnkgdGFyZ2V0Lg0KKyAgKiBAcGFyYW0gIERNQXlfU3RyZWFteDogd2hlcmUgeSBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgRE1BIGFuZCB4IGNhbiBiZSAwDQorICAqICAgICAgICAgIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcGFyYW0gIE1lbW9yeTFCYXNlQWRkcjogdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgc2Vjb25kIGJ1ZmZlciAoTWVtb3J5IDEpICANCisgICogQHBhcmFtICBETUFfQ3VycmVudE1lbW9yeTogc3BlY2lmaWVzIHdoaWNoIG1lbW9yeSB3aWxsIGJlIGZpcnN0IGJ1ZmZlciBmb3INCisgICogICAgICAgICB0aGUgdHJhbnNhY3Rpb25zIHdoZW4gdGhlIFN0cmVhbSB3aWxsIGJlIGVuYWJsZWQuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX01lbW9yeV8wOiBNZW1vcnkgMCBpcyB0aGUgY3VycmVudCBidWZmZXIuDQorICAqICAgICAgICAgICAgQGFyZyBETUFfTWVtb3J5XzE6IE1lbW9yeSAxIGlzIHRoZSBjdXJyZW50IGJ1ZmZlci4gIA0KKyAgKiAgICAgICANCisgICogQG5vdGUgICBNZW1vcnkwQmFzZUFkZHIgaXMgc2V0IGJ5IHRoZSBETUEgc3RydWN0dXJlIGNvbmZpZ3VyYXRpb24gaW4gRE1BX0luaXQoKS4NCisgICogICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRE1BX0RvdWJsZUJ1ZmZlck1vZGVDb25maWcoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IE1lbW9yeTFCYXNlQWRkciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IERNQV9DdXJyZW50TWVtb3J5KQ0KK3sgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19ETUFfQUxMX1BFUklQSChETUF5X1N0cmVhbXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfQ1VSUkVOVF9NRU0oRE1BX0N1cnJlbnRNZW1vcnkpKTsNCisNCisgIGlmIChETUFfQ3VycmVudE1lbW9yeSAhPSBETUFfTWVtb3J5XzApDQorICB7DQorICAgIC8qIFNldCBNZW1vcnkgMSBhcyBjdXJyZW50IG1lbW9yeSBhZGRyZXNzICovDQorICAgIERNQXlfU3RyZWFteC0+Q1IgfD0gKHVpbnQzMl90KShETUFfU3hDUl9DVCk7ICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBTZXQgTWVtb3J5IDAgYXMgY3VycmVudCBtZW1vcnkgYWRkcmVzcyAqLw0KKyAgICBETUF5X1N0cmVhbXgtPkNSICY9IH4odWludDMyX3QpKERNQV9TeENSX0NUKTsgICAgDQorICB9DQorDQorICAvKiBXcml0ZSB0byBETUF5IFN0cmVhbXggTTFBUiAqLw0KKyAgRE1BeV9TdHJlYW14LT5NMUFSID0gTWVtb3J5MUJhc2VBZGRyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBkb3VibGUgYnVmZmVyIG1vZGUgZm9yIHRoZSBzZWxlY3RlZCBETUEgc3RyZWFtLg0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBvbmx5IHdoZW4gdGhlIERNQSBTdHJlYW0gaXMgZGlzYWJsZWQuICANCisgICogQHBhcmFtICBETUF5X1N0cmVhbXg6IHdoZXJlIHkgY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIERNQSBhbmQgeCBjYW4gYmUgMA0KKyAgKiAgICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBETUF5IFN0cmVhbXggZG91YmxlIGJ1ZmZlciBtb2RlLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRE1BX0RvdWJsZUJ1ZmZlck1vZGVDbWQoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7ICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBEb3VibGUgQnVmZmVyIG1vZGUgKi8NCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIERvdWJsZSBidWZmZXIgbW9kZSAqLw0KKyAgICBETUF5X1N0cmVhbXgtPkNSIHw9ICh1aW50MzJfdClETUFfU3hDUl9EQk07DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIERvdWJsZSBidWZmZXIgbW9kZSAqLw0KKyAgICBETUF5X1N0cmVhbXgtPkNSICY9IH4odWludDMyX3QpRE1BX1N4Q1JfREJNOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBNZW1vcnkgYWRkcmVzcyBmb3IgdGhlIG5leHQgYnVmZmVyIHRyYW5zZmVyIGluIGRvdWJsZQ0KKyAgKiAgICAgICAgIGJ1ZmZlciBtb2RlIChmb3IgZHluYW1pYyB1c2UpLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUNCisgICogICAgICAgICBETUEgU3RyZWFtIGlzIGVuYWJsZWQgYW5kIHdoZW4gdGhlIHRyYW5zZmVyIGlzIG9uZ29pbmcuICANCisgICogQHBhcmFtICBETUF5X1N0cmVhbXg6IHdoZXJlIHkgY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIERNQSBhbmQgeCBjYW4gYmUgMA0KKyAgKiAgICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHBhcmFtICBNZW1vcnlCYXNlQWRkcjogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IG1lbW9yeSBidWZmZXINCisgICogQHBhcmFtICBETUFfTWVtb3J5VGFyZ2V0OiBOZXh0IG1lbW9yeSB0YXJnZXQgdG8gYmUgdXNlZC4gDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9NZW1vcnlfMDogVG8gdXNlIHRoZSBtZW1vcnkgYWRkcmVzcyAwDQorICAqICAgICAgICAgICAgQGFyZyBETUFfTWVtb3J5XzE6IFRvIHVzZSB0aGUgbWVtb3J5IGFkZHJlc3MgMQ0KKyAgKiANCisgICogQG5vdGUgICAgSXQgaXMgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBCYXNlIEFkZHJlc3Mgb2YgYSB0YXJnZXQgTWVtb3J5IHdoZW4NCisgICogICAgICAgICAgdGhpcyB0YXJnZXQgaXMgaW52b2x2ZWQgaW4gdGhlIGN1cnJlbnQgdHJhbnNmZXIuIGllLiBJZiB0aGUgRE1BIFN0cmVhbQ0KKyAgKiAgICAgICAgICBpcyBjdXJyZW50bHkgdHJhbnNmZXJyaW5nIHRvL2Zyb20gTWVtb3J5IDEsIHRoZW4gaXQgbm90IHBvc3NpYmxlIHRvDQorICAqICAgICAgICAgIG1vZGlmeSBCYXNlIGFkZHJlc3Mgb2YgTWVtb3J5IDEsIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgQmFzZQ0KKyAgKiAgICAgICAgICBhZGRyZXNzIG9mIE1lbW9yeSAwLg0KKyAgKiAgICAgICAgICBUbyBrbm93IHdoaWNoIE1lbW9yeSBpcyBjdXJyZW50bHkgdXNlZCwgeW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uDQorICAqICAgICAgICAgIERNQV9HZXRDdXJyZW50TWVtb3J5VGFyZ2V0KCkuICAgICAgICAgICAgIA0KKyAgKiAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIERNQV9NZW1vcnlUYXJnZXRDb25maWcoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IE1lbW9yeUJhc2VBZGRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IERNQV9NZW1vcnlUYXJnZXQpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19ETUFfQUxMX1BFUklQSChETUF5X1N0cmVhbXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19ETUFfQ1VSUkVOVF9NRU0oRE1BX01lbW9yeVRhcmdldCkpOw0KKyAgICANCisgIC8qIENoZWNrIHRoZSBNZW1vcnkgdGFyZ2V0IHRvIGJlIGNvbmZpZ3VyZWQgKi8NCisgIGlmIChETUFfTWVtb3J5VGFyZ2V0ICE9IERNQV9NZW1vcnlfMCkNCisgIHsNCisgICAgLyogV3JpdGUgdG8gRE1BeSBTdHJlYW14IE0xQVIgKi8NCisgICAgRE1BeV9TdHJlYW14LT5NMUFSID0gTWVtb3J5QmFzZUFkZHI7ICAgIA0KKyAgfSAgDQorICBlbHNlDQorICB7DQorICAgIC8qIFdyaXRlIHRvIERNQXkgU3RyZWFteCBNMEFSICovDQorICAgIERNQXlfU3RyZWFteC0+TTBBUiA9IE1lbW9yeUJhc2VBZGRyOyAgDQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGN1cnJlbnQgbWVtb3J5IHRhcmdldCB1c2VkIGJ5IGRvdWJsZSBidWZmZXIgdHJhbnNmZXIuDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICAgdG8gNyB0byBzZWxlY3QgdGhlIERNQSBTdHJlYW0uDQorICAqIEByZXR2YWwgVGhlIG1lbW9yeSB0YXJnZXQgbnVtYmVyOiAwIGZvciBNZW1vcnkwIG9yIDEgZm9yIE1lbW9yeTEuIA0KKyAgKi8NCit1aW50MzJfdCBETUFfR2V0Q3VycmVudE1lbW9yeVRhcmdldChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCkNCit7DQorICB1aW50MzJfdCB0bXAgPSAwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKw0KKyAgLyogR2V0IHRoZSBjdXJyZW50IG1lbW9yeSB0YXJnZXQgKi8NCisgIGlmICgoRE1BeV9TdHJlYW14LT5DUiAmIERNQV9TeENSX0NUKSAhPSAwKQ0KKyAgew0KKyAgICAvKiBDdXJyZW50IG1lbW9yeSBidWZmZXIgdXNlZCBpcyBNZW1vcnkgMSAqLw0KKyAgICB0bXAgPSAxOw0KKyAgfSAgDQorICBlbHNlDQorICB7DQorICAgIC8qIEN1cnJlbnQgbWVtb3J5IGJ1ZmZlciB1c2VkIGlzIE1lbW9yeSAwICovDQorICAgIHRtcCA9IDA7ICAgIA0KKyAgfQ0KKyAgcmV0dXJuIHRtcDsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRE1BX0dyb3VwNCBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvDQorICAgLSBDaGVjayB0aGUgRE1BIGVuYWJsZSBzdGF0dXMNCisgICAtIENoZWNrIHRoZSBGSUZPIHN0YXR1cyANCisgICAtIENvbmZpZ3VyZSB0aGUgRE1BIEludGVycnVwdHMgc291cmNlcyBhbmQgY2hlY2sgb3IgY2xlYXIgdGhlIGZsYWdzIG9yIHBlbmRpbmcgYml0cyBzdGF0dXMuICAgDQorICAgDQorIDEuIERNQSBFbmFibGUgc3RhdHVzOg0KKyAgIEFmdGVyIGNvbmZpZ3VyaW5nIHRoZSBETUEgU3RyZWFtIChETUFfSW5pdCgpIGZ1bmN0aW9uKSBhbmQgZW5hYmxpbmcgdGhlIHN0cmVhbSwNCisgICBpdCBpcyByZWNvbW1lbmRlZCB0byBjaGVjayAob3Igd2FpdCB1bnRpbCkgdGhlIERNQSBTdHJlYW0gaXMgZWZmZWN0aXZlbHkgZW5hYmxlZC4NCisgICBBIFN0cmVhbSBtYXkgcmVtYWluIGRpc2FibGVkIGlmIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgd3JvbmcuDQorICAgQWZ0ZXIgZGlzYWJsaW5nIGEgRE1BIFN0cmVhbSwgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0byBjaGVjayAob3Igd2FpdCB1bnRpbCkgdGhlIERNQQ0KKyAgIFN0cmVhbSBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZC4gSWYgYSBTdHJlYW0gaXMgZGlzYWJsZWQgd2hpbGUgYSBkYXRhIHRyYW5zZmVyIGlzIG9uZ29pbmcsIA0KKyAgIHRoZSBjdXJyZW50IGRhdGEgd2lsbCBiZSB0cmFuc2ZlcnJlZCBhbmQgdGhlIFN0cmVhbSB3aWxsIGJlIGVmZmVjdGl2ZWx5IGRpc2FibGVkIG9ubHkgYWZ0ZXINCisgICB0aGlzIGRhdGEgdHJhbnNmZXIgY29tcGxldGlvbi4NCisgICBUbyBtb25pdG9yIHRoaXMgc3RhdGUgaXQgaXMgcG9zc2libGUgdG8gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246DQorICAgICAtIEZ1bmN0aW9uYWxTdGF0ZSBETUFfR2V0Q21kU3RhdHVzKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14KTsgDQorIA0KKyAyLiBGSUZPIFN0YXR1czoNCisgICBJdCBpcyBwb3NzaWJsZSB0byBtb25pdG9yIHRoZSBGSUZPIHN0YXR1cyB3aGVuIGEgdHJhbnNmZXIgaXMgb25nb2luZyB1c2luZyB0aGUgZm9sbG93aW5nIA0KKyAgIGZ1bmN0aW9uOg0KKyAgICAgLSB1aW50MzJfdCBETUFfR2V0RklGT1N0YXR1cyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCk7IA0KKyANCisgMy4gRE1BIEludGVycnVwdHMgYW5kIEZsYWdzOg0KKyAgVGhlIHVzZXIgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIG1vZGUgd2lsbCBiZSB1c2VkIGluIGhpcyBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgdGhlDQorICBETUEgY29udHJvbGxlciBldmVudHM6IFBvbGxpbmcgbW9kZSBvciBJbnRlcnJ1cHQgbW9kZS4gDQorICAgIA0KKyAgUG9sbGluZyBNb2RlDQorICA9PT09PT09PT09PT09DQorICAgIEVhY2ggRE1BIHN0cmVhbSBjYW4gYmUgbWFuYWdlZCB0aHJvdWdoIDQgZXZlbnQgRmxhZ3M6DQorICAgICh4IDogRE1BIFN0cmVhbSBudW1iZXIgKQ0KKyAgICAgICAxLiBETUFfRkxBR19GRUlGeCAgOiB0byBpbmRpY2F0ZSB0aGF0IGEgRklGTyBNb2RlIFRyYW5zZmVyIEVycm9yIGV2ZW50IG9jY3VycmVkLg0KKyAgICAgICAyLiBETUFfRkxBR19ETUVJRnggOiB0byBpbmRpY2F0ZSB0aGF0IGEgRGlyZWN0IE1vZGUgVHJhbnNmZXIgRXJyb3IgZXZlbnQgb2NjdXJyZWQuDQorICAgICAgIDMuIERNQV9GTEFHX1RFSUZ4ICA6IHRvIGluZGljYXRlIHRoYXQgYSBUcmFuc2ZlciBFcnJvciBldmVudCBvY2N1cnJlZC4NCisgICAgICAgNC4gRE1BX0ZMQUdfSFRJRnggIDogdG8gaW5kaWNhdGUgdGhhdCBhIEhhbGYtVHJhbnNmZXIgQ29tcGxldGUgZXZlbnQgb2NjdXJyZWQuDQorICAgICAgIDUuIERNQV9GTEFHX1RDSUZ4ICA6IHRvIGluZGljYXRlIHRoYXQgYSBUcmFuc2ZlciBDb21wbGV0ZSBldmVudCBvY2N1cnJlZCAuICAgICAgIA0KKw0KKyAgIEluIHRoaXMgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAtIEZsYWdTdGF0dXMgRE1BX0dldEZsYWdTdGF0dXMoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9GTEFHKTsNCisgICAgICAtIHZvaWQgRE1BX0NsZWFyRmxhZyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX0ZMQUcpOw0KKw0KKyAgSW50ZXJydXB0IE1vZGUNCisgID09PT09PT09PT09PT09PQ0KKyAgICBFYWNoIERNQSBTdHJlYW0gY2FuIGJlIG1hbmFnZWQgdGhyb3VnaCA0IEludGVycnVwdHM6DQorDQorICAgIEludGVycnVwdCBTb3VyY2UNCisgICAgLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAxLiBETUFfSVRfRkVJRnggIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgIEZJRk8gTW9kZSBUcmFuc2ZlciBFcnJvciBldmVudC4NCisgICAgICAgMi4gRE1BX0lUX0RNRUlGeCA6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIERpcmVjdCBNb2RlIFRyYW5zZmVyIEVycm9yIGV2ZW50Lg0KKyAgICAgICAzLiBETUFfSVRfVEVJRnggIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgVHJhbnNmZXIgRXJyb3IgZXZlbnQuDQorICAgICAgIDQuIERNQV9JVF9IVElGeCAgOiBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBzb3VyY2UgZm9yIHRoZSBIYWxmLVRyYW5zZmVyIENvbXBsZXRlIGV2ZW50Lg0KKyAgICAgICA1LiBETUFfSVRfVENJRnggIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgYSBUcmFuc2ZlciBDb21wbGV0ZSBldmVudC4gDQorICAgICANCisgIEluIHRoaXMgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgIC0gdm9pZCBETUFfSVRDb25maWcoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisgICAgIC0gSVRTdGF0dXMgRE1BX0dldElUU3RhdHVzKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBETUFfSVQpOw0KKyAgICAgLSB2b2lkIERNQV9DbGVhcklUUGVuZGluZ0JpdChETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCwgdWludDMyX3QgRE1BX0lUKTsNCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgc3RhdHVzIG9mIEVOIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBETUF5IFN0cmVhbXguDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICAgdG8gNyB0byBzZWxlY3QgdGhlIERNQSBTdHJlYW0uDQorICAqICAgDQorICAqIEBub3RlICAgIEFmdGVyIGNvbmZpZ3VyaW5nIHRoZSBETUEgU3RyZWFtIChETUFfSW5pdCgpIGZ1bmN0aW9uKSBhbmQgZW5hYmxpbmcNCisgICogICAgICAgICAgdGhlIHN0cmVhbSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gY2hlY2sgKG9yIHdhaXQgdW50aWwpIHRoZSBETUEgU3RyZWFtDQorICAqICAgICAgICAgIGlzIGVmZmVjdGl2ZWx5IGVuYWJsZWQuIEEgU3RyZWFtIG1heSByZW1haW4gZGlzYWJsZWQgaWYgYSBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgIHBhcmFtZXRlciBpcyB3cm9uZy4NCisgICogICAgICAgICAgQWZ0ZXIgZGlzYWJsaW5nIGEgRE1BIFN0cmVhbSwgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0byBjaGVjayAob3Igd2FpdCANCisgICogICAgICAgICAgdW50aWwpIHRoZSBETUEgU3RyZWFtIGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVkLiBJZiBhIFN0cmVhbSBpcyBkaXNhYmxlZA0KKyAgKiAgICAgICAgICB3aGlsZSBhIGRhdGEgdHJhbnNmZXIgaXMgb25nb2luZywgdGhlIGN1cnJlbnQgZGF0YSB3aWxsIGJlIHRyYW5zZmVycmVkDQorICAqICAgICAgICAgIGFuZCB0aGUgU3RyZWFtIHdpbGwgYmUgZWZmZWN0aXZlbHkgZGlzYWJsZWQgb25seSBhZnRlciB0aGUgdHJhbnNmZXINCisgICogICAgICAgICAgb2YgdGhpcyBzaW5nbGUgZGF0YSBpcyBmaW5pc2hlZC4gIA0KKyAgKiAgICAgIA0KKyAgKiBAcmV0dmFsIEN1cnJlbnQgc3RhdGUgb2YgdGhlIERNQXkgU3RyZWFteCAoRU5BQkxFIG9yIERJU0FCTEUpLg0KKyAgKi8NCitGdW5jdGlvbmFsU3RhdGUgRE1BX0dldENtZFN0YXR1cyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCkNCit7DQorICBGdW5jdGlvbmFsU3RhdGUgc3RhdGUgPSBESVNBQkxFOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19ETUFfQUxMX1BFUklQSChETUF5X1N0cmVhbXgpKTsNCisNCisgIGlmICgoRE1BeV9TdHJlYW14LT5DUiAmICh1aW50MzJfdClETUFfU3hDUl9FTikgIT0gMCkNCisgIHsNCisgICAgLyogVGhlIHNlbGVjdGVkIERNQXkgU3RyZWFteCBFTiBiaXQgaXMgc2V0IChETUEgaXMgc3RpbGwgdHJhbnNmZXJyaW5nKSAqLw0KKyAgICBzdGF0ZSA9IEVOQUJMRTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogVGhlIHNlbGVjdGVkIERNQXkgU3RyZWFteCBFTiBiaXQgaXMgY2xlYXJlZCAoRE1BIGlzIGRpc2FibGVkIGFuZCANCisgICAgICAgIGFsbCB0cmFuc2ZlcnMgYXJlIGNvbXBsZXRlKSAqLw0KKyAgICBzdGF0ZSA9IERJU0FCTEU7DQorICB9DQorICByZXR1cm4gc3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGN1cnJlbnQgRE1BeSBTdHJlYW14IEZJRk8gZmlsbGVkIGxldmVsLg0KKyAgKiBAcGFyYW0gIERNQXlfU3RyZWFteDogd2hlcmUgeSBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgRE1BIGFuZCB4IGNhbiBiZSAwIA0KKyAgKiAgICAgICAgIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcmV0dmFsIFRoZSBGSUZPIGZpbGxpbmcgc3RhdGUuDQorICAqICAgICAgICAgICAtIERNQV9GSUZPU3RhdHVzX0xlc3MxUXVhcnRlckZ1bGw6IHdoZW4gRklGTyBpcyBsZXNzIHRoYW4gMSBxdWFydGVyLWZ1bGwgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGVtcHR5Lg0KKyAgKiAgICAgICAgICAgLSBETUFfRklGT1N0YXR1c18xUXVhcnRlckZ1bGw6IGlmIG1vcmUgdGhhbiAxIHF1YXJ0ZXItZnVsbC4NCisgICogICAgICAgICAgIC0gRE1BX0ZJRk9TdGF0dXNfSGFsZkZ1bGw6IGlmIG1vcmUgdGhhbiAxIGhhbGYtZnVsbC4NCisgICogICAgICAgICAgIC0gRE1BX0ZJRk9TdGF0dXNfM1F1YXJ0ZXJzRnVsbDogaWYgbW9yZSB0aGFuIDMgcXVhcnRlcnMtZnVsbC4NCisgICogICAgICAgICAgIC0gRE1BX0ZJRk9TdGF0dXNfRW1wdHk6IHdoZW4gRklGTyBpcyBlbXB0eQ0KKyAgKiAgICAgICAgICAgLSBETUFfRklGT1N0YXR1c19GdWxsOiB3aGVuIEZJRk8gaXMgZnVsbA0KKyAgKi8NCit1aW50MzJfdCBETUFfR2V0RklGT1N0YXR1cyhETUFfU3RyZWFtX1R5cGVEZWYqIERNQXlfU3RyZWFteCkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorICANCisgIC8qIEdldCB0aGUgRklGTyBsZXZlbCBiaXRzICovDQorICB0bXByZWcgPSAodWludDMyX3QpKChETUF5X1N0cmVhbXgtPkZDUiAmIERNQV9TeEZDUl9GUykpOw0KKyAgDQorICByZXR1cm4gdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIERNQXkgU3RyZWFteCBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICAgdG8gNyB0byBzZWxlY3QgdGhlIERNQSBTdHJlYW0uDQorICAqIEBwYXJhbSAgRE1BX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9GTEFHX1RDSUZ4OiAgU3RyZWFteCB0cmFuc2ZlciBjb21wbGV0ZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBETUFfRkxBR19IVElGeDogIFN0cmVhbXggaGFsZiB0cmFuc2ZlciBjb21wbGV0ZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBETUFfRkxBR19URUlGeDogIFN0cmVhbXggdHJhbnNmZXIgZXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX0ZMQUdfRE1FSUZ4OiBTdHJlYW14IGRpcmVjdCBtb2RlIGVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIERNQV9GTEFHX0ZFSUZ4OiAgU3RyZWFteCBGSUZPIGVycm9yIGZsYWcNCisgICogICAgICAgICBXaGVyZSB4IGNhbiBiZSAwIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgRE1BX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgRE1BX0dldEZsYWdTdGF0dXMoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICBETUFfVHlwZURlZiogRE1BeTsNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9HRVRfRkxBRyhETUFfRkxBRykpOw0KKw0KKyAgLyogRGV0ZXJtaW5lIHRoZSBETUEgdG8gd2hpY2ggYmVsb25ncyB0aGUgc3RyZWFtICovDQorICBpZiAoRE1BeV9TdHJlYW14IDwgRE1BMl9TdHJlYW0wKQ0KKyAgew0KKyAgICAvKiBETUF5X1N0cmVhbXggYmVsb25ncyB0byBETUExICovDQorICAgIERNQXkgPSBETUExOyANCisgIH0gDQorICBlbHNlIA0KKyAgew0KKyAgICAvKiBETUF5X1N0cmVhbXggYmVsb25ncyB0byBETUEyICovDQorICAgIERNQXkgPSBETUEyOyANCisgIH0NCisNCisgIC8qIENoZWNrIGlmIHRoZSBmbGFnIGlzIGluIEhJU1Igb3IgTElTUiAqLw0KKyAgaWYgKChETUFfRkxBRyAmIEhJR0hfSVNSX01BU0spICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgLyogR2V0IERNQXkgSElTUiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICB0bXByZWcgPSBETUF5LT5ISVNSOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBHZXQgRE1BeSBMSVNSIHJlZ2lzdGVyIHZhbHVlICovDQorICAgIHRtcHJlZyA9IERNQXktPkxJU1I7DQorICB9ICAgDQorIA0KKyAgLyogTWFzayB0aGUgcmVzZXJ2ZWQgYml0cyAqLw0KKyAgdG1wcmVnICY9ICh1aW50MzJfdClSRVNFUlZFRF9NQVNLOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIERNQSBmbGFnICovDQorICBpZiAoKHRtcHJlZyAmIERNQV9GTEFHKSAhPSAodWludDMyX3QpUkVTRVQpDQorICB7DQorICAgIC8qIERNQV9GTEFHIGlzIHNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERNQV9GTEFHIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKw0KKyAgLyogUmV0dXJuIHRoZSBETUFfRkxBRyBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIERNQXkgU3RyZWFteCdzIHBlbmRpbmcgZmxhZ3MuDQorICAqIEBwYXJhbSAgRE1BeV9TdHJlYW14OiB3aGVyZSB5IGNhbiBiZSAxIG9yIDIgdG8gc2VsZWN0IHRoZSBETUEgYW5kIHggY2FuIGJlIDANCisgICogICAgICAgICAgdG8gNyB0byBzZWxlY3QgdGhlIERNQSBTdHJlYW0uDQorICAqIEBwYXJhbSAgRE1BX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9GTEFHX1RDSUZ4OiAgU3RyZWFteCB0cmFuc2ZlciBjb21wbGV0ZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBETUFfRkxBR19IVElGeDogIFN0cmVhbXggaGFsZiB0cmFuc2ZlciBjb21wbGV0ZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBETUFfRkxBR19URUlGeDogIFN0cmVhbXggdHJhbnNmZXIgZXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX0ZMQUdfRE1FSUZ4OiBTdHJlYW14IGRpcmVjdCBtb2RlIGVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIERNQV9GTEFHX0ZFSUZ4OiAgU3RyZWFteCBGSUZPIGVycm9yIGZsYWcNCisgICogICAgICAgICBXaGVyZSB4IGNhbiBiZSAwIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLiAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBETUFfQ2xlYXJGbGFnKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBETUFfRkxBRykNCit7DQorICBETUFfVHlwZURlZiogRE1BeTsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0NMRUFSX0ZMQUcoRE1BX0ZMQUcpKTsNCisNCisgIC8qIERldGVybWluZSB0aGUgRE1BIHRvIHdoaWNoIGJlbG9uZ3MgdGhlIHN0cmVhbSAqLw0KKyAgaWYgKERNQXlfU3RyZWFteCA8IERNQTJfU3RyZWFtMCkNCisgIHsNCisgICAgLyogRE1BeV9TdHJlYW14IGJlbG9uZ3MgdG8gRE1BMSAqLw0KKyAgICBETUF5ID0gRE1BMTsgDQorICB9IA0KKyAgZWxzZSANCisgIHsNCisgICAgLyogRE1BeV9TdHJlYW14IGJlbG9uZ3MgdG8gRE1BMiAqLw0KKyAgICBETUF5ID0gRE1BMjsgDQorICB9DQorDQorICAvKiBDaGVjayBpZiBMSUZDUiBvciBISUZDUiByZWdpc3RlciBpcyB0YXJnZXRlZCAqLw0KKyAgaWYgKChETUFfRkxBRyAmIEhJR0hfSVNSX01BU0spICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgLyogU2V0IERNQXkgSElGQ1IgcmVnaXN0ZXIgY2xlYXIgZmxhZyBiaXRzICovDQorICAgIERNQXktPkhJRkNSID0gKHVpbnQzMl90KShETUFfRkxBRyAmIFJFU0VSVkVEX01BU0spOw0KKyAgfQ0KKyAgZWxzZSANCisgIHsNCisgICAgLyogU2V0IERNQXkgTElGQ1IgcmVnaXN0ZXIgY2xlYXIgZmxhZyBiaXRzICovDQorICAgIERNQXktPkxJRkNSID0gKHVpbnQzMl90KShETUFfRkxBRyAmIFJFU0VSVkVEX01BU0spOw0KKyAgfSAgICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIERNQXkgU3RyZWFteCBpbnRlcnJ1cHRzLg0KKyAgKiBAcGFyYW0gIERNQXlfU3RyZWFteDogd2hlcmUgeSBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgRE1BIGFuZCB4IGNhbiBiZSAwDQorICAqICAgICAgICAgIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcGFyYW0gRE1BX0lUOiBzcGVjaWZpZXMgdGhlIERNQSBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9JVF9UQzogIFRyYW5zZmVyIGNvbXBsZXRlIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBETUFfSVRfSFQ6ICBIYWxmIHRyYW5zZmVyIGNvbXBsZXRlIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBETUFfSVRfVEU6ICBUcmFuc2ZlciBlcnJvciBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX0lUX0ZFOiAgRklGTyBlcnJvciBpbnRlcnJ1cHQgbWFzaw0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBETUEgaW50ZXJydXB0cy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRE1BX0lUQ29uZmlnKERNQV9TdHJlYW1fVHlwZURlZiogRE1BeV9TdHJlYW14LCB1aW50MzJfdCBETUFfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9BTExfUEVSSVBIKERNQXlfU3RyZWFteCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0RNQV9DT05GSUdfSVQoRE1BX0lUKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgLyogQ2hlY2sgaWYgdGhlIERNQV9JVCBwYXJhbWV0ZXIgY29udGFpbnMgYSBGSUZPIGludGVycnVwdCAqLw0KKyAgaWYgKChETUFfSVQgJiBETUFfSVRfRkUpICE9IDApDQorICB7DQorICAgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgICB7DQorICAgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBETUEgRklGTyBpbnRlcnJ1cHRzICovDQorICAgICAgRE1BeV9TdHJlYW14LT5GQ1IgfD0gKHVpbnQzMl90KURNQV9JVF9GRTsNCisgICAgfSAgICANCisgICAgZWxzZSANCisgICAgew0KKyAgICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIERNQSBGSUZPIGludGVycnVwdHMgKi8NCisgICAgICBETUF5X1N0cmVhbXgtPkZDUiAmPSB+KHVpbnQzMl90KURNQV9JVF9GRTsgIA0KKyAgICB9DQorICB9DQorDQorICAvKiBDaGVjayBpZiB0aGUgRE1BX0lUIHBhcmFtZXRlciBjb250YWlucyBhIFRyYW5zZmVyIGludGVycnVwdCAqLw0KKyAgaWYgKERNQV9JVCAhPSBETUFfSVRfRkUpDQorICB7DQorICAgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgICB7DQorICAgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBETUEgdHJhbnNmZXIgaW50ZXJydXB0cyAqLw0KKyAgICAgIERNQXlfU3RyZWFteC0+Q1IgfD0gKHVpbnQzMl90KShETUFfSVQgICYgVFJBTlNGRVJfSVRfRU5BQkxFX01BU0spOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIERNQSB0cmFuc2ZlciBpbnRlcnJ1cHRzICovDQorICAgICAgRE1BeV9TdHJlYW14LT5DUiAmPSB+KHVpbnQzMl90KShETUFfSVQgJiBUUkFOU0ZFUl9JVF9FTkFCTEVfTUFTSyk7DQorICAgIH0gICAgDQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRE1BeSBTdHJlYW14IGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIERNQXlfU3RyZWFteDogd2hlcmUgeSBjYW4gYmUgMSBvciAyIHRvIHNlbGVjdCB0aGUgRE1BIGFuZCB4IGNhbiBiZSAwDQorICAqICAgICAgICAgIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcGFyYW0gIERNQV9JVDogc3BlY2lmaWVzIHRoZSBETUEgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9JVF9UQ0lGeDogIFN0cmVhbXggdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBETUFfSVRfSFRJRng6ICBTdHJlYW14IGhhbGYgdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBETUFfSVRfVEVJRng6ICBTdHJlYW14IHRyYW5zZmVyIGVycm9yIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX0lUX0RNRUlGeDogU3RyZWFteCBkaXJlY3QgbW9kZSBlcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIERNQV9JVF9GRUlGeDogIFN0cmVhbXggRklGTyBlcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICBXaGVyZSB4IGNhbiBiZSAwIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgRE1BX0lUIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBETUFfR2V0SVRTdGF0dXMoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9JVCkNCit7DQorICBJVFN0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIERNQV9UeXBlRGVmKiBETUF5Ow0KKyAgdWludDMyX3QgdG1wcmVnID0gMCwgZW5hYmxlc3RhdHVzID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0dFVF9JVChETUFfSVQpKTsNCisgDQorICAvKiBEZXRlcm1pbmUgdGhlIERNQSB0byB3aGljaCBiZWxvbmdzIHRoZSBzdHJlYW0gKi8NCisgIGlmIChETUF5X1N0cmVhbXggPCBETUEyX1N0cmVhbTApDQorICB7DQorICAgIC8qIERNQXlfU3RyZWFteCBiZWxvbmdzIHRvIERNQTEgKi8NCisgICAgRE1BeSA9IERNQTE7IA0KKyAgfSANCisgIGVsc2UgDQorICB7DQorICAgIC8qIERNQXlfU3RyZWFteCBiZWxvbmdzIHRvIERNQTIgKi8NCisgICAgRE1BeSA9IERNQTI7IA0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgaWYgdGhlIGludGVycnVwdCBlbmFibGUgYml0IGlzIGluIHRoZSBDUiBvciBGQ1IgcmVnaXN0ZXIgKi8NCisgIGlmICgoRE1BX0lUICYgVFJBTlNGRVJfSVRfTUFTSykgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICAvKiBHZXQgdGhlIGludGVycnVwdCBlbmFibGUgcG9zaXRpb24gbWFzayBpbiBDUiByZWdpc3RlciAqLw0KKyAgICB0bXByZWcgPSAodWludDMyX3QpKChETUFfSVQgPj4gMTEpICYgVFJBTlNGRVJfSVRfRU5BQkxFX01BU0spOyAgIA0KKyAgICANCisgICAgLyogQ2hlY2sgdGhlIGVuYWJsZSBiaXQgaW4gQ1IgcmVnaXN0ZXIgKi8NCisgICAgZW5hYmxlc3RhdHVzID0gKHVpbnQzMl90KShETUF5X1N0cmVhbXgtPkNSICYgdG1wcmVnKTsNCisgIH0NCisgIGVsc2UgDQorICB7DQorICAgIC8qIENoZWNrIHRoZSBlbmFibGUgYml0IGluIEZDUiByZWdpc3RlciAqLw0KKyAgICBlbmFibGVzdGF0dXMgPSAodWludDMyX3QpKERNQXlfU3RyZWFteC0+RkNSICYgRE1BX0lUX0ZFKTsgDQorICB9DQorIA0KKyAgLyogQ2hlY2sgaWYgdGhlIGludGVycnVwdCBwZW5kaW5nIGZsYWcgaXMgaW4gTElTUiBvciBISVNSICovDQorICBpZiAoKERNQV9JVCAmIEhJR0hfSVNSX01BU0spICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgLyogR2V0IERNQXkgSElTUiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICB0bXByZWcgPSBETUF5LT5ISVNSIDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogR2V0IERNQXkgTElTUiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICB0bXByZWcgPSBETUF5LT5MSVNSIDsNCisgIH0gDQorDQorICAvKiBtYXNrIGFsbCByZXNlcnZlZCBiaXRzICovDQorICB0bXByZWcgJj0gKHVpbnQzMl90KVJFU0VSVkVEX01BU0s7DQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgRE1BIGludGVycnVwdCAqLw0KKyAgaWYgKCgodG1wcmVnICYgRE1BX0lUKSAhPSAodWludDMyX3QpUkVTRVQpICYmIChlbmFibGVzdGF0dXMgIT0gKHVpbnQzMl90KVJFU0VUKSkNCisgIHsNCisgICAgLyogRE1BX0lUIGlzIHNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERNQV9JVCBpcyByZXNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisNCisgIC8qIFJldHVybiB0aGUgRE1BX0lUIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgRE1BeSBTdHJlYW14J3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4NCisgICogQHBhcmFtICBETUF5X1N0cmVhbXg6IHdoZXJlIHkgY2FuIGJlIDEgb3IgMiB0byBzZWxlY3QgdGhlIERNQSBhbmQgeCBjYW4gYmUgMA0KKyAgKiAgICAgICAgICB0byA3IHRvIHNlbGVjdCB0aGUgRE1BIFN0cmVhbS4NCisgICogQHBhcmFtICBETUFfSVQ6IHNwZWNpZmllcyB0aGUgRE1BIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIERNQV9JVF9UQ0lGeDogIFN0cmVhbXggdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBETUFfSVRfSFRJRng6ICBTdHJlYW14IGhhbGYgdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBETUFfSVRfVEVJRng6ICBTdHJlYW14IHRyYW5zZmVyIGVycm9yIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgRE1BX0lUX0RNRUlGeDogU3RyZWFteCBkaXJlY3QgbW9kZSBlcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIERNQV9JVF9GRUlGeDogIFN0cmVhbXggRklGTyBlcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICBXaGVyZSB4IGNhbiBiZSAwIHRvIDcgdG8gc2VsZWN0IHRoZSBETUEgU3RyZWFtLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBETUFfQ2xlYXJJVFBlbmRpbmdCaXQoRE1BX1N0cmVhbV9UeXBlRGVmKiBETUF5X1N0cmVhbXgsIHVpbnQzMl90IERNQV9JVCkNCit7DQorICBETUFfVHlwZURlZiogRE1BeTsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0FMTF9QRVJJUEgoRE1BeV9TdHJlYW14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRE1BX0NMRUFSX0lUKERNQV9JVCkpOw0KKw0KKyAgLyogRGV0ZXJtaW5lIHRoZSBETUEgdG8gd2hpY2ggYmVsb25ncyB0aGUgc3RyZWFtICovDQorICBpZiAoRE1BeV9TdHJlYW14IDwgRE1BMl9TdHJlYW0wKQ0KKyAgew0KKyAgICAvKiBETUF5X1N0cmVhbXggYmVsb25ncyB0byBETUExICovDQorICAgIERNQXkgPSBETUExOyANCisgIH0gDQorICBlbHNlIA0KKyAgew0KKyAgICAvKiBETUF5X1N0cmVhbXggYmVsb25ncyB0byBETUEyICovDQorICAgIERNQXkgPSBETUEyOyANCisgIH0NCisNCisgIC8qIENoZWNrIGlmIExJRkNSIG9yIEhJRkNSIHJlZ2lzdGVyIGlzIHRhcmdldGVkICovDQorICBpZiAoKERNQV9JVCAmIEhJR0hfSVNSX01BU0spICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgLyogU2V0IERNQXkgSElGQ1IgcmVnaXN0ZXIgY2xlYXIgaW50ZXJydXB0IGJpdHMgKi8NCisgICAgRE1BeS0+SElGQ1IgPSAodWludDMyX3QpKERNQV9JVCAmIFJFU0VSVkVEX01BU0spOw0KKyAgfQ0KKyAgZWxzZSANCisgIHsNCisgICAgLyogU2V0IERNQXkgTElGQ1IgcmVnaXN0ZXIgY2xlYXIgaW50ZXJydXB0IGJpdHMgKi8NCisgICAgRE1BeS0+TElGQ1IgPSAodWludDMyX3QpKERNQV9JVCAmIFJFU0VSVkVEX01BU0spOw0KKyAgfSAgIA0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2V4dGkuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZXh0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjRhODQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2V4dGkuYwpAQCAtMCwwICsxLDMxMiBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2V4dGkuYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBFWFRJIHBlcmlwaGVyYWw6ICAgICAgICAgICANCisgICogICAgICAgICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKg0KKyAgKiAgQHZlcmJhdGltICANCisgICogIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVEkgZmVhdHVyZXMNCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICANCisgICogICAgICAgICAgRXh0ZXJuYWwgaW50ZXJydXB0L2V2ZW50IGxpbmVzIGFyZSBtYXBwZWQgYXMgZm9sbG93aW5nOg0KKyAgKiAgICAgICAgICAgIDEtIEFsbCBhdmFpbGFibGUgR1BJTyBwaW5zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIDE2IGV4dGVybmFsIA0KKyAgKiAgICAgICAgICAgICAgIGludGVycnVwdC9ldmVudCBsaW5lcyBmcm9tIEVYVEkwIHRvIEVYVEkxNS4NCisgICogICAgICAgICAgICAyLSBFWFRJIGxpbmUgMTYgaXMgY29ubmVjdGVkIHRvIHRoZSBQVkQgT3V0cHV0DQorICAqICAgICAgICAgICAgMy0gRVhUSSBsaW5lIDE3IGlzIGNvbm5lY3RlZCB0byB0aGUgUlRDIEFsYXJtIGV2ZW50DQorICAqICAgICAgICAgICAgNC0gRVhUSSBsaW5lIDE4IGlzIGNvbm5lY3RlZCB0byB0aGUgVVNCIE9URyBGUyBXYWtldXAgZnJvbSBzdXNwZW5kIGV2ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAgNS0gRVhUSSBsaW5lIDE5IGlzIGNvbm5lY3RlZCB0byB0aGUgRXRoZXJuZXQgV2FrZXVwIGV2ZW50DQorICAqICAgICAgICAgICAgNi0gRVhUSSBsaW5lIDIwIGlzIGNvbm5lY3RlZCB0byB0aGUgVVNCIE9URyBIUyAoY29uZmlndXJlZCBpbiBGUykgV2FrZXVwIGV2ZW50IA0KKyAgKiAgICAgICAgICAgIDctIEVYVEkgbGluZSAyMSBpcyBjb25uZWN0ZWQgdG8gdGhlIFJUQyBUYW1wZXIgYW5kIFRpbWUgU3RhbXAgZXZlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgICA4LSBFWFRJIGxpbmUgMjIgaXMgY29ubmVjdGVkIHRvIHRoZSBSVEMgV2FrZXVwIGV2ZW50DQorICAqICAgICAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorICAqICAgICAgICAgICAgICANCisgICogICAgICAgICAgSW4gb3JkZXIgdG8gdXNlIGFuIEkvTyBwaW4gYXMgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZSwgZm9sbG93DQorICAqICAgICAgICAgIHN0ZXBzIGJlbG93Og0KKyAgKiAgICAgICAgICAgIDEtIENvbmZpZ3VyZSB0aGUgSS9PIGluIGlucHV0IG1vZGUgdXNpbmcgR1BJT19Jbml0KCkNCisgICogICAgICAgICAgICAyLSBTZWxlY3QgdGhlIGlucHV0IHNvdXJjZSBwaW4gZm9yIHRoZSBFWFRJIGxpbmUgdXNpbmcgU1lTQ0ZHX0VYVElMaW5lQ29uZmlnKCkNCisgICogICAgICAgICAgICAzLSBTZWxlY3QgdGhlIG1vZGUoaW50ZXJydXB0LCBldmVudCkgYW5kIGNvbmZpZ3VyZSB0aGUgdHJpZ2dlciANCisgICogICAgICAgICAgICAgICBzZWxlY3Rpb24gKFJpc2luZywgZmFsbGluZyBvciBib3RoKSB1c2luZyBFWFRJX0luaXQoKQ0KKyAgKiAgICAgICAgICAgIDQtIENvbmZpZ3VyZSBOVklDIElSUSBjaGFubmVsIG1hcHBlZCB0byB0aGUgRVhUSSBsaW5lIHVzaW5nIE5WSUNfSW5pdCgpDQorICAqICAgDQorICAqICBAbm90ZSAgU1lTQ0ZHIEFQQiBjbG9jayBtdXN0IGJlIGVuYWJsZWQgdG8gZ2V0IHdyaXRlIGFjY2VzcyB0byBTWVNDRkdfRVhUSUNSeA0KKyAgKiAgICAgICAgIHJlZ2lzdGVycyB1c2luZyBSQ0NfQVBCMlBlcmlwaENsb2NrQ21kKFJDQ19BUEIyUGVyaXBoX1NZU0NGRywgRU5BQkxFKTsNCisgICogICAgICAgICAgDQorICAqICBAZW5kdmVyYmF0aW0gICAgICAgICAgICAgICAgICANCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9leHRpLmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRVhUSSANCisgICogQGJyaWVmIEVYVEkgZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgRVhUSV9MSU5FTk9ORSAgICAoKHVpbnQzMl90KTB4MDAwMDApICAvKiBObyBpbnRlcnJ1cHQgc2VsZWN0ZWQgKi8NCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRVhUSV9Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEVYVElfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRGVpbml0aWFsaXplcyB0aGUgRVhUSSBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEVYVElfRGVJbml0KHZvaWQpDQorew0KKyAgRVhUSS0+SU1SID0gMHgwMDAwMDAwMDsNCisgIEVYVEktPkVNUiA9IDB4MDAwMDAwMDA7DQorICBFWFRJLT5SVFNSID0gMHgwMDAwMDAwMDsNCisgIEVYVEktPkZUU1IgPSAweDAwMDAwMDAwOw0KKyAgRVhUSS0+UFIgPSAweDAwN0ZGRkZGOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgRVhUSSBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkDQorICAqICAgICAgICAgcGFyYW1ldGVycyBpbiB0aGUgRVhUSV9Jbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIEVYVElfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIEVYVElfSW5pdFR5cGVEZWYgc3RydWN0dXJlDQorICAqICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIEVYVEkgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRVhUSV9Jbml0KEVYVElfSW5pdFR5cGVEZWYqIEVYVElfSW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXAgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19FWFRJX01PREUoRVhUSV9Jbml0U3RydWN0LT5FWFRJX01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19FWFRJX1RSSUdHRVIoRVhUSV9Jbml0U3RydWN0LT5FWFRJX1RyaWdnZXIpKTsNCisgIGFzc2VydF9wYXJhbShJU19FWFRJX0xJTkUoRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmUpKTsgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmVDbWQpKTsNCisNCisgIHRtcCA9ICh1aW50MzJfdClFWFRJX0JBU0U7DQorICAgICANCisgIGlmIChFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTGluZUNtZCAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBDbGVhciBFWFRJIGxpbmUgY29uZmlndXJhdGlvbiAqLw0KKyAgICBFWFRJLT5JTVIgJj0gfkVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lOw0KKyAgICBFWFRJLT5FTVIgJj0gfkVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lOw0KKyAgICANCisgICAgdG1wICs9IEVYVElfSW5pdFN0cnVjdC0+RVhUSV9Nb2RlOw0KKw0KKyAgICAqKF9fSU8gdWludDMyX3QgKikgdG1wIHw9IEVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lOw0KKw0KKyAgICAvKiBDbGVhciBSaXNpbmcgRmFsbGluZyBlZGdlIGNvbmZpZ3VyYXRpb24gKi8NCisgICAgRVhUSS0+UlRTUiAmPSB+RVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmU7DQorICAgIEVYVEktPkZUU1IgJj0gfkVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lOw0KKyAgICANCisgICAgLyogU2VsZWN0IHRoZSB0cmlnZ2VyIGZvciB0aGUgc2VsZWN0ZWQgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLw0KKyAgICBpZiAoRVhUSV9Jbml0U3RydWN0LT5FWFRJX1RyaWdnZXIgPT0gRVhUSV9UcmlnZ2VyX1Jpc2luZ19GYWxsaW5nKQ0KKyAgICB7DQorICAgICAgLyogUmlzaW5nIEZhbGxpbmcgZWRnZSAqLw0KKyAgICAgIEVYVEktPlJUU1IgfD0gRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmU7DQorICAgICAgRVhUSS0+RlRTUiB8PSBFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTGluZTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICB0bXAgPSAodWludDMyX3QpRVhUSV9CQVNFOw0KKyAgICAgIHRtcCArPSBFWFRJX0luaXRTdHJ1Y3QtPkVYVElfVHJpZ2dlcjsNCisNCisgICAgICAqKF9fSU8gdWludDMyX3QgKikgdG1wIHw9IEVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lOw0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHRtcCArPSBFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTW9kZTsNCisNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgZXh0ZXJuYWwgbGluZXMgKi8NCisgICAgKihfX0lPIHVpbnQzMl90ICopIHRtcCAmPSB+RVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmU7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggRVhUSV9Jbml0U3RydWN0IG1lbWJlciB3aXRoIGl0cyByZXNldCB2YWx1ZS4NCisgICogQHBhcmFtICBFWFRJX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBFWFRJX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsDQorICAqICAgICAgICAgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEVYVElfU3RydWN0SW5pdChFWFRJX0luaXRUeXBlRGVmKiBFWFRJX0luaXRTdHJ1Y3QpDQorew0KKyAgRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmUgPSBFWFRJX0xJTkVOT05FOw0KKyAgRVhUSV9Jbml0U3RydWN0LT5FWFRJX01vZGUgPSBFWFRJX01vZGVfSW50ZXJydXB0Ow0KKyAgRVhUSV9Jbml0U3RydWN0LT5FWFRJX1RyaWdnZXIgPSBFWFRJX1RyaWdnZXJfRmFsbGluZzsNCisgIEVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lQ21kID0gRElTQUJMRTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgR2VuZXJhdGVzIGEgU29mdHdhcmUgaW50ZXJydXB0IG9uIHNlbGVjdGVkIEVYVEkgbGluZS4NCisgICogQHBhcmFtICBFWFRJX0xpbmU6IHNwZWNpZmllcyB0aGUgRVhUSSBsaW5lIG9uIHdoaWNoIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQNCisgICogICAgICAgICB3aWxsIGJlIGdlbmVyYXRlZC4NCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIEVYVElfTGluZXggd2hlcmUgeCBjYW4gYmUgKDAuLjIyKQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBFWFRJX0dlbmVyYXRlU1dJbnRlcnJ1cHQodWludDMyX3QgRVhUSV9MaW5lKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KKyAgDQorICBFWFRJLT5TV0lFUiB8PSBFWFRJX0xpbmU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEVYVElfR3JvdXAyIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBFWFRJIGxpbmUgZmxhZyBpcyBzZXQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIEVYVElfTGluZTogc3BlY2lmaWVzIHRoZSBFWFRJIGxpbmUgZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIEVYVElfTGluZXggd2hlcmUgeCBjYW4gYmUoMC4uMjIpDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBFWFRJX0xpbmUgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgRVhUSV9HZXRGbGFnU3RhdHVzKHVpbnQzMl90IEVYVElfTGluZSkNCit7DQorICBGbGFnU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19HRVRfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KKyAgDQorICBpZiAoKEVYVEktPlBSICYgRVhUSV9MaW5lKSAhPSAodWludDMyX3QpUkVTRVQpDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICByZXR1cm4gYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIEVYVEkncyBsaW5lIHBlbmRpbmcgZmxhZ3MuDQorICAqIEBwYXJhbSAgRVhUSV9MaW5lOiBzcGVjaWZpZXMgdGhlIEVYVEkgbGluZXMgZmxhZ3MgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgRVhUSV9MaW5leCB3aGVyZSB4IGNhbiBiZSAoMC4uMjIpDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEVYVElfQ2xlYXJGbGFnKHVpbnQzMl90IEVYVElfTGluZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0VYVElfTElORShFWFRJX0xpbmUpKTsNCisgIA0KKyAgRVhUSS0+UFIgPSBFWFRJX0xpbmU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRVhUSSBsaW5lIGlzIGFzc2VydGVkIG9yIG5vdC4NCisgICogQHBhcmFtICBFWFRJX0xpbmU6IHNwZWNpZmllcyB0aGUgRVhUSSBsaW5lIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgRVhUSV9MaW5leCB3aGVyZSB4IGNhbiBiZSgwLi4yMikNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEVYVElfTGluZSAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorSVRTdGF0dXMgRVhUSV9HZXRJVFN0YXR1cyh1aW50MzJfdCBFWFRJX0xpbmUpDQorew0KKyAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCBlbmFibGVzdGF0dXMgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19HRVRfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KKyAgDQorICBlbmFibGVzdGF0dXMgPSAgRVhUSS0+SU1SICYgRVhUSV9MaW5lOw0KKyAgaWYgKCgoRVhUSS0+UFIgJiBFWFRJX0xpbmUpICE9ICh1aW50MzJfdClSRVNFVCkgJiYgKGVuYWJsZXN0YXR1cyAhPSAodWludDMyX3QpUkVTRVQpKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBFWFRJJ3MgbGluZSBwZW5kaW5nIGJpdHMuDQorICAqIEBwYXJhbSAgRVhUSV9MaW5lOiBzcGVjaWZpZXMgdGhlIEVYVEkgbGluZXMgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgRVhUSV9MaW5leCB3aGVyZSB4IGNhbiBiZSAoMC4uMjIpDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEVYVElfQ2xlYXJJVFBlbmRpbmdCaXQodWludDMyX3QgRVhUSV9MaW5lKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KKyAgDQorICBFWFRJLT5QUiA9IEVYVElfTGluZTsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9mbGFzaC5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YTJjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2ZsYXNoLmMKQEAgLTAsMCArMSwxMDYwIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfZmxhc2guYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBGTEFTSCBwZXJpcGhlcmFsOg0KKyAgKiAgICAgICAgICAgIC0gRkxBU0ggSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgICAtIEZMQVNIIE1lbW9yeSBQcm9ncmFtbWluZw0KKyAgKiAgICAgICAgICAgIC0gT3B0aW9uIEJ5dGVzIFByb2dyYW1taW5nDQorICAqICAgICAgICAgICAgLSBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50DQorICAqICANCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGNvbmZpZ3VyZSBhbmQgcHJvZ3JhbSB0aGUgRkxBU0ggDQorICAqICAgICAgICAgIG1lbW9yeSBvZiBhbGwgU1RNMzJGMnh4IGRldmljZXMuDQorICAqICAgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgc3BsaXQgaW4gNCBncm91cHM6DQorICAqIA0KKyAgKiAgICAgICAgICAgMS4gRkxBU0ggSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zOiB0aGlzIGdyb3VwIGluY2x1ZGVzIHRoZQ0KKyAgKiAgICAgICAgICAgICAgbWFuYWdlbWVudCBvZiB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOg0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBTZXQgdGhlIGxhdGVuY3kNCisgICogICAgICAgICAgICAgICAgICAgIC0gRW5hYmxlL0Rpc2FibGUgdGhlIHByZWZldGNoIGJ1ZmZlcg0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBFbmFibGUvRGlzYWJsZSB0aGUgSW5zdHJ1Y3Rpb24gY2FjaGUgYW5kIHRoZSBEYXRhIGNhY2hlDQorICAqICAgICAgICAgICAgICAgICAgICAtIFJlc2V0IHRoZSBJbnN0cnVjdGlvbiBjYWNoZSBhbmQgdGhlIERhdGEgY2FjaGUNCisgICogIA0KKyAgKiAgICAgICAgICAgMi4gRkxBU0ggTWVtb3J5IFByb2dyYW1taW5nIGZ1bmN0aW9uczogdGhpcyBncm91cCBpbmNsdWRlcyBhbGwgbmVlZGVkDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbnMgdG8gZXJhc2UgYW5kIHByb2dyYW0gdGhlIG1haW4gbWVtb3J5Og0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBMb2NrIGFuZCBVbmxvY2sgdGhlIEZMQVNIIGludGVyZmFjZQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBFcmFzZSBmdW5jdGlvbjogRXJhc2Ugc2VjdG9yLCBlcmFzZSBhbGwgc2VjdG9ycw0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBQcm9ncmFtIGZ1bmN0aW9uczogYnl0ZSwgaGFsZiB3b3JkLCB3b3JkIGFuZCBkb3VibGUgd29yZA0KKyAgKiAgDQorICAqICAgICAgICAgICAzLiBPcHRpb24gQnl0ZXMgUHJvZ3JhbW1pbmcgZnVuY3Rpb25zOiB0aGlzIGdyb3VwIGluY2x1ZGVzIGFsbCBuZWVkZWQNCisgICogICAgICAgICAgICAgIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIE9wdGlvbiBCeXRlczoNCisgICogICAgICAgICAgICAgICAgICAgIC0gU2V0L1Jlc2V0IHRoZSB3cml0ZSBwcm90ZWN0aW9uDQorICAqICAgICAgICAgICAgICAgICAgICAtIFNldCB0aGUgUmVhZCBwcm90ZWN0aW9uIExldmVsDQorICAqICAgICAgICAgICAgICAgICAgICAtIFNldCB0aGUgQk9SIGxldmVsDQorICAqICAgICAgICAgICAgICAgICAgICAtIFByb2dyYW0gdGhlIHVzZXIgT3B0aW9uIEJ5dGVzDQorICAqICAgICAgICAgICAgICAgICAgICAtIExhdW5jaCB0aGUgT3B0aW9uIEJ5dGVzIGxvYWRlcg0KKyAgKiAgDQorICAqICAgICAgICAgICA0LiBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9uczogdGhpcyBncm91cCANCisgICogICAgICAgICAgICAgIGluY2x1ZGVzIGFsbCBuZWVkZWQgZnVuY3Rpb25zIHRvOg0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBFbmFibGUvRGlzYWJsZSB0aGUgRkxBU0ggaW50ZXJydXB0IHNvdXJjZXMNCisgICogICAgICAgICAgICAgICAgICAgIC0gR2V0IGZsYWdzIHN0YXR1cw0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBDbGVhciBmbGFncw0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBHZXQgRkxBU0ggb3BlcmF0aW9uIHN0YXR1cw0KKyAgKiAgICAgICAgICAgICAgICAgICAgLSBXYWl0IGZvciBsYXN0IEZMQVNIIG9wZXJhdGlvbg0KKyAgKiANCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9mbGFzaC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZMQVNIIA0KKyAgKiBAYnJpZWYgRkxBU0ggZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovIA0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorI2RlZmluZSBTRUNUT1JfTUFTSyAgICAgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkYwNykNCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfR3JvdXAxIEZMQVNIIEludGVyZmFjZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAgKiAgQGJyaWVmICAgRkxBU0ggSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIIEludGVyZmFjZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorICAgVGhpcyBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgLSB2b2lkIEZMQVNIX1NldExhdGVuY3kodWludDMyX3QgRkxBU0hfTGF0ZW5jeSkNCisgICAgICAgVG8gY29ycmVjdGx5IHJlYWQgZGF0YSBmcm9tIEZMQVNIIG1lbW9yeSwgdGhlIG51bWJlciBvZiB3YWl0IHN0YXRlcyAoTEFURU5DWSkgDQorICAgICAgIG11c3QgYmUgY29ycmVjdGx5IHByb2dyYW1tZWQgYWNjb3JkaW5nIHRvIHRoZSBmcmVxdWVuY3kgb2YgdGhlIENQVSBjbG9jayANCisgICAgICAoSENMSykgYW5kIHRoZSBzdXBwbHkgdm9sdGFnZSBvZiB0aGUgZGV2aWNlLg0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgIA0KKyB8IExhdGVuY3kgICAgICAgfCAgICAgICAgICAgICAgICBIQ0xLIGNsb2NrIGZyZXF1ZW5jeSAoTUh6KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgfCAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICANCisgfCAgICAgICAgICAgICAgIHwgdm9sdGFnZSByYW5nZSAgfCB2b2x0YWdlIHJhbmdlICB8IHZvbHRhZ2UgcmFuZ2UgICB8IHZvbHRhZ2UgcmFuZ2UgICB8DQorIHwgICAgICAgICAgICAgICB8IDIuNyBWIC0gMy42IFYgIHwgMi40IFYgLSAyLjcgViAgfCAyLjEgViAtIDIuNCBWICAgfCAxLjggViAtIDIuMSBWICAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgIA0KKyB8MFdTKDFDUFUgY3ljbGUpfDAgPCBIQ0xLIDw9IDMwICB8MCA8IEhDTEsgPD0gMjQgIHwwIDwgSENMSyA8PSAxOCAgIHwwIDwgSENMSyA8PSAxNiAgIHwNCisgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18ICAgDQorIHwxV1MoMkNQVSBjeWNsZSl8MzAgPCBIQ0xLIDw9IDYwIHwyNCA8IEhDTEsgPD0gNDggfDE4IDwgSENMSyA8PSAzNiAgfDE2IDwgSENMSyA8PSAzMiAgfCANCisgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18ICAgDQorIHwyV1MoM0NQVSBjeWNsZSl8NjAgPCBIQ0xLIDw9IDkwIHw0OCA8IEhDTEsgPD0gNzIgfDM2IDwgSENMSyA8PSA1NCAgfDMyIDwgSENMSyA8PSA0OCAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgDQorIHwzV1MoNENQVSBjeWNsZSl8OTAgPCBIQ0xLIDw9IDEyMHw3MiA8IEhDTEsgPD0gOTYgfDU0IDwgSENMSyA8PSA3MiAgfDQ4IDwgSENMSyA8PSA2NCAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgDQorIHw0V1MoNUNQVSBjeWNsZSl8ICAgICAgTkEgICAgICAgIHw5NiA8IEhDTEsgPD0gMTIwfDcyIDwgSENMSyA8PSA5MCAgfDY0IDwgSENMSyA8PSA4MCAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgDQorIHw1V1MoNkNQVSBjeWNsZSl8ICAgICAgTkEgICAgICAgIHwgICAgICBOQSAgICAgICAgfDkwIDwgSENMSyA8PSAxMDggfDgwIDwgSENMSyA8PSA5NiAgfCANCisgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18IA0KKyB8NldTKDdDUFUgY3ljbGUpfCAgICAgIE5BICAgICAgICB8ICAgICAgTkEgICAgICAgIHwxMDggPCBIQ0xLIDw9IDEyMHw5NiA8IEhDTEsgPD0gMTEyIHwgDQorIHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfCANCisgfDdXUyg4Q1BVIGN5Y2xlKXwgICAgICBOQSAgICAgICAgfCAgICAgIE5BICAgICAgICB8ICAgICBOQSAgICAgICAgICB8MTEyIDwgSENMSyA8PSAxMjB8IA0KKyB8KioqKioqKioqKioqKioqfCoqKioqKioqKioqKioqKip8KioqKioqKioqKioqKioqKnwqKioqKioqKioqKioqKioqKnwqKioqKioqKioqKioqKioqKnwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKisNCisgfCAgICAgICAgICAgICAgIHwgdm9sdGFnZSByYW5nZSAgfCB2b2x0YWdlIHJhbmdlICB8IHZvbHRhZ2UgcmFuZ2UgICB8IHZvbHRhZ2UgcmFuZ2UgICB8IHZvbHRhZ2UgcmFuZ2UgMi43IFYgLSAzLjYgViB8DQorIHwgICAgICAgICAgICAgICB8IDIuNyBWIC0gMy42IFYgIHwgMi40IFYgLSAyLjcgViAgfCAyLjEgViAtIDIuNCBWICAgfCAxLjggViAtIDIuMSBWICAgfCB3aXRoIEV4dGVybmFsIFZwcCA9IDlWICAgICAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgDQorIHxNYXggUGFyYWxsZWxpc218ICAgICAgeDMyICAgICAgIHwgICAgICAgICAgICAgICB4MTYgICAgICAgICAgICAgICAgfCAgICAgICB4OCAgICAgICAgfCAgICAgICAgICB4NjQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgDQorIHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgIA0KKyB8UFNJWkVbMTowXSAgICAgfCAgICAgIDEwICAgICAgICB8ICAgICAgICAgICAgICAgMDEgICAgICAgICAgICAgICAgIHwgICAgICAgMDAgICAgICAgIHwgICAgICAgICAgIDExICAgICAgICAgICAgICAgIHwNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICANCisgICAgDQorICAgIC0gdm9pZCBGTEFTSF9QcmVmZXRjaEJ1ZmZlckNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorICAgIC0gdm9pZCBGTEFTSF9JbnN0cnVjdGlvbkNhY2hlQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCisgICAgLSB2b2lkIEZMQVNIX0RhdGFDYWNoZUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorICAgIC0gdm9pZCBGTEFTSF9JbnN0cnVjdGlvbkNhY2hlUmVzZXQodm9pZCkNCisgICAgLSB2b2lkIEZMQVNIX0RhdGFDYWNoZVJlc2V0KHZvaWQpDQorICAgDQorICAgVGhlIHVubG9jayBzZXF1ZW5jZSBpcyBub3QgbmVlZGVkIGZvciB0aGVzZSBmdW5jdGlvbnMuDQorIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisgDQorLyoqDQorICAqIEBicmllZiAgU2V0cyB0aGUgY29kZSBsYXRlbmN5IHZhbHVlLg0KKyAgKiBAcGFyYW0gIEZMQVNIX0xhdGVuY3k6IHNwZWNpZmllcyB0aGUgRkxBU0ggTGF0ZW5jeSB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0xhdGVuY3lfMDogRkxBU0ggWmVybyBMYXRlbmN5IGN5Y2xlDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9MYXRlbmN5XzE6IEZMQVNIIE9uZSBMYXRlbmN5IGN5Y2xlDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9MYXRlbmN5XzI6IEZMQVNIIFR3byBMYXRlbmN5IGN5Y2xlcw0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfTGF0ZW5jeV8zOiBGTEFTSCBUaHJlZSBMYXRlbmN5IGN5Y2xlcw0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfTGF0ZW5jeV80OiBGTEFTSCBGb3VyIExhdGVuY3kgY3ljbGVzIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfTGF0ZW5jeV81OiBGTEFTSCBGaXZlIExhdGVuY3kgY3ljbGVzIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfTGF0ZW5jeV82OiBGTEFTSCBTaXggTGF0ZW5jeSBjeWNsZXMNCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0xhdGVuY3lfNzogRkxBU0ggU2V2ZW4gTGF0ZW5jeSBjeWNsZXMgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRkxBU0hfU2V0TGF0ZW5jeSh1aW50MzJfdCBGTEFTSF9MYXRlbmN5KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRkxBU0hfTEFURU5DWShGTEFTSF9MYXRlbmN5KSk7DQorICANCisgIC8qIFBlcmZvcm0gQnl0ZSBhY2Nlc3MgdG8gRkxBU0hfQUNSWzg6MF0gdG8gc2V0IHRoZSBMYXRlbmN5IHZhbHVlICovDQorICAqKF9fSU8gdWludDhfdCAqKUFDUl9CWVRFMF9BRERSRVNTID0gKHVpbnQ4X3QpRkxBU0hfTGF0ZW5jeTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgUHJlZmV0Y2ggQnVmZmVyLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFByZWZldGNoIEJ1ZmZlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZMQVNIX1ByZWZldGNoQnVmZmVyQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgLyogRW5hYmxlIG9yIGRpc2FibGUgdGhlIFByZWZldGNoIEJ1ZmZlciAqLw0KKyAgaWYoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgRkxBU0gtPkFDUiB8PSBGTEFTSF9BQ1JfUFJGVEVOOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBGTEFTSC0+QUNSICY9ICh+RkxBU0hfQUNSX1BSRlRFTik7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEluc3RydWN0aW9uIENhY2hlIGZlYXR1cmUuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSW5zdHJ1Y3Rpb24gQ2FjaGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyICBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGTEFTSF9JbnN0cnVjdGlvbkNhY2hlQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgRkxBU0gtPkFDUiB8PSBGTEFTSF9BQ1JfSUNFTjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgRkxBU0gtPkFDUiAmPSAofkZMQVNIX0FDUl9JQ0VOKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRGF0YSBDYWNoZSBmZWF0dXJlLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIERhdGEgQ2FjaGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyICBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGTEFTSF9EYXRhQ2FjaGVDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZihOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBGTEFTSC0+QUNSIHw9IEZMQVNIX0FDUl9EQ0VOOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBGTEFTSC0+QUNSICY9ICh+RkxBU0hfQUNSX0RDRU4pOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXNldHMgdGhlIEluc3RydWN0aW9uIENhY2hlLg0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgSW5zdHJ1Y3Rpb24gQ2FjaGUgaXMgZGlzYWJsZWQuICANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZMQVNIX0luc3RydWN0aW9uQ2FjaGVSZXNldCh2b2lkKQ0KK3sNCisgIEZMQVNILT5BQ1IgfD0gRkxBU0hfQUNSX0lDUlNUOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXNldHMgdGhlIERhdGEgQ2FjaGUuDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgb25seSB3aGVuIHRoZSBEYXRhIENhY2hlIGlzIGRpc2FibGVkLiAgDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGTEFTSF9EYXRhQ2FjaGVSZXNldCh2b2lkKQ0KK3sNCisgIEZMQVNILT5BQ1IgfD0gRkxBU0hfQUNSX0RDUlNUOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGTEFTSF9Hcm91cDIgRkxBU0ggTWVtb3J5IFByb2dyYW1taW5nIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBGTEFTSCBNZW1vcnkgUHJvZ3JhbW1pbmcgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICBGTEFTSCBNZW1vcnkgUHJvZ3JhbW1pbmcgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICANCisNCisgICBUaGlzIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgICAtIHZvaWQgRkxBU0hfVW5sb2NrKHZvaWQpDQorICAgIC0gdm9pZCBGTEFTSF9Mb2NrKHZvaWQpDQorICAgIC0gRkxBU0hfU3RhdHVzIEZMQVNIX0VyYXNlU2VjdG9yKHVpbnQzMl90IEZMQVNIX1NlY3RvciwgdWludDhfdCBWb2x0YWdlUmFuZ2UpDQorICAgIC0gRkxBU0hfU3RhdHVzIEZMQVNIX0VyYXNlQWxsU2VjdG9ycyh1aW50OF90IFZvbHRhZ2VSYW5nZSkNCisgICAgLSBGTEFTSF9TdGF0dXMgRkxBU0hfUHJvZ3JhbURvdWJsZVdvcmQodWludDMyX3QgQWRkcmVzcywgdWludDY0X3QgRGF0YSkNCisgICAgLSBGTEFTSF9TdGF0dXMgRkxBU0hfUHJvZ3JhbVdvcmQodWludDMyX3QgQWRkcmVzcywgdWludDMyX3QgRGF0YSkNCisgICAgLSBGTEFTSF9TdGF0dXMgRkxBU0hfUHJvZ3JhbUhhbGZXb3JkKHVpbnQzMl90IEFkZHJlc3MsIHVpbnQxNl90IERhdGEpDQorICAgIC0gRkxBU0hfU3RhdHVzIEZMQVNIX1Byb2dyYW1CeXRlKHVpbnQzMl90IEFkZHJlc3MsIHVpbnQ4X3QgRGF0YSkNCisgICANCisgICBBbnkgb3BlcmF0aW9uIG9mIGVyYXNlIG9yIHByb2dyYW0gc2hvdWxkIGZvbGxvdyB0aGVzZSBzdGVwczoNCisgICAxLiBDYWxsIHRoZSBGTEFTSF9VbmxvY2soKSBmdW5jdGlvbiB0byBlbmFibGUgdGhlIEZMQVNIIGNvbnRyb2wgcmVnaXN0ZXIgYWNjZXNzDQorDQorICAgMi4gQ2FsbCB0aGUgZGVzaXJlZCBmdW5jdGlvbiB0byBlcmFzZSBzZWN0b3Iocykgb3IgcHJvZ3JhbSBkYXRhDQorDQorICAgMy4gQ2FsbCB0aGUgRkxBU0hfTG9jaygpIGZ1bmN0aW9uIHRvIGRpc2FibGUgdGhlIEZMQVNIIGNvbnRyb2wgcmVnaXN0ZXIgYWNjZXNzDQorICAgICAgKHJlY29tbWVuZGVkIHRvIHByb3RlY3QgdGhlIEZMQVNIIG1lbW9yeSBhZ2FpbnN0IHBvc3NpYmxlIHVud2FudGVkIG9wZXJhdGlvbikNCisgICAgDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFVubG9ja3MgdGhlIEZMQVNIIGNvbnRyb2wgcmVnaXN0ZXIgYWNjZXNzDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGTEFTSF9VbmxvY2sodm9pZCkNCit7DQorICBpZigoRkxBU0gtPkNSICYgRkxBU0hfQ1JfTE9DSykgIT0gUkVTRVQpDQorICB7DQorICAgIC8qIEF1dGhvcml6ZSB0aGUgRkxBU0ggUmVnaXN0ZXJzIGFjY2VzcyAqLw0KKyAgICBGTEFTSC0+S0VZUiA9IEZMQVNIX0tFWTE7DQorICAgIEZMQVNILT5LRVlSID0gRkxBU0hfS0VZMjsNCisgIH0gIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBMb2NrcyB0aGUgRkxBU0ggY29udHJvbCByZWdpc3RlciBhY2Nlc3MNCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZMQVNIX0xvY2sodm9pZCkNCit7DQorICAvKiBTZXQgdGhlIExPQ0sgQml0IHRvIGxvY2sgdGhlIEZMQVNIIFJlZ2lzdGVycyBhY2Nlc3MgKi8NCisgIEZMQVNILT5DUiB8PSBGTEFTSF9DUl9MT0NLOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFcmFzZXMgYSBzcGVjaWZpZWQgRkxBU0ggU2VjdG9yLg0KKyAgKiAgIA0KKyAgKiBAcGFyYW0gIEZMQVNIX1NlY3RvcjogVGhlIFNlY3RvciBudW1iZXIgdG8gYmUgZXJhc2VkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBiZXR3ZWVuIEZMQVNIX1NlY3Rvcl8wIGFuZCBGTEFTSF9TZWN0b3JfMTENCisgICogICAgDQorICAqIEBwYXJhbSAgVm9sdGFnZVJhbmdlOiBUaGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2Ugd2hpY2ggZGVmaW5lcyB0aGUgZXJhc2UgcGFyYWxsZWxpc20uICANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFZvbHRhZ2VSYW5nZV8xOiB3aGVuIHRoZSBkZXZpY2Ugdm9sdGFnZSByYW5nZSBpcyAxLjhWIHRvIDIuMVYsIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZG9uZSBieSBieXRlICg4LWJpdCkgDQorICAqICAgICAgICAgICAgQGFyZyBWb2x0YWdlUmFuZ2VfMjogd2hlbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UgaXMgMi4xViB0byAyLjdWLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZG9uZSBieSBoYWxmIHdvcmQgKDE2LWJpdCkNCisgICogICAgICAgICAgICBAYXJnIFZvbHRhZ2VSYW5nZV8zOiB3aGVuIHRoZSBkZXZpY2Ugdm9sdGFnZSByYW5nZSBpcyAyLjdWIHRvIDMuNlYsDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBkb25lIGJ5IHdvcmQgKDMyLWJpdCkNCisgICogICAgICAgICAgICBAYXJnIFZvbHRhZ2VSYW5nZV80OiB3aGVuIHRoZSBkZXZpY2Ugdm9sdGFnZSByYW5nZSBpcyAyLjdWIHRvIDMuNlYgKyBFeHRlcm5hbCBWcHAsIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZG9uZSBieSBkb3VibGUgd29yZCAoNjQtYml0KQ0KKyAgKiAgICAgICANCisgICogQHJldHZhbCBGTEFTSCBTdGF0dXM6IFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmU6IEZMQVNIX0JVU1ksIEZMQVNIX0VSUk9SX1BST0dSQU0sDQorICAqICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9FUlJPUl9XUlAsIEZMQVNIX0VSUk9SX09QRVJBVElPTiBvciBGTEFTSF9DT01QTEVURS4NCisgICovDQorRkxBU0hfU3RhdHVzIEZMQVNIX0VyYXNlU2VjdG9yKHVpbnQzMl90IEZMQVNIX1NlY3RvciwgdWludDhfdCBWb2x0YWdlUmFuZ2UpDQorew0KKyAgdWludDMyX3QgdG1wX3BzaXplID0gMHgwOw0KKyAgRkxBU0hfU3RhdHVzIHN0YXR1cyA9IEZMQVNIX0NPTVBMRVRFOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GTEFTSF9TRUNUT1IoRkxBU0hfU2VjdG9yKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVk9MVEFHRVJBTkdFKFZvbHRhZ2VSYW5nZSkpOw0KKyAgDQorICBpZihWb2x0YWdlUmFuZ2UgPT0gVm9sdGFnZVJhbmdlXzEpDQorICB7DQorICAgICB0bXBfcHNpemUgPSBGTEFTSF9QU0laRV9CWVRFOw0KKyAgfQ0KKyAgZWxzZSBpZihWb2x0YWdlUmFuZ2UgPT0gVm9sdGFnZVJhbmdlXzIpDQorICB7DQorICAgIHRtcF9wc2l6ZSA9IEZMQVNIX1BTSVpFX0hBTEZfV09SRDsNCisgIH0NCisgIGVsc2UgaWYoVm9sdGFnZVJhbmdlID09IFZvbHRhZ2VSYW5nZV8zKQ0KKyAgew0KKyAgICB0bXBfcHNpemUgPSBGTEFTSF9QU0laRV9XT1JEOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICB0bXBfcHNpemUgPSBGTEFTSF9QU0laRV9ET1VCTEVfV09SRDsNCisgIH0NCisgIC8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLw0KKyAgc3RhdHVzID0gRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKTsNCisgIA0KKyAgaWYoc3RhdHVzID09IEZMQVNIX0NPTVBMRVRFKQ0KKyAgeyANCisgICAgLyogaWYgdGhlIHByZXZpb3VzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIHByb2NlZWQgdG8gZXJhc2UgdGhlIHNlY3RvciAqLw0KKyAgICBGTEFTSC0+Q1IgJj0gQ1JfUFNJWkVfTUFTSzsNCisgICAgRkxBU0gtPkNSIHw9IHRtcF9wc2l6ZTsNCisgICAgRkxBU0gtPkNSICY9IFNFQ1RPUl9NQVNLOw0KKyAgICBGTEFTSC0+Q1IgfD0gRkxBU0hfQ1JfU0VSIHwgRkxBU0hfU2VjdG9yOw0KKyAgICBGTEFTSC0+Q1IgfD0gRkxBU0hfQ1JfU1RSVDsNCisgICAgDQorICAgIC8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLw0KKyAgICBzdGF0dXMgPSBGTEFTSF9XYWl0Rm9yTGFzdE9wZXJhdGlvbigpOw0KKyAgICANCisgICAgLyogaWYgdGhlIGVyYXNlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGRpc2FibGUgdGhlIFNFUiBCaXQgKi8NCisgICAgRkxBU0gtPkNSICY9ICh+RkxBU0hfQ1JfU0VSKTsNCisgICAgRkxBU0gtPkNSICY9IFNFQ1RPUl9NQVNLOyANCisgIH0NCisgIC8qIFJldHVybiB0aGUgRXJhc2UgU3RhdHVzICovDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFcmFzZXMgYWxsIEZMQVNIIFNlY3RvcnMuDQorICAqICAgIA0KKyAgKiBAcGFyYW0gIFZvbHRhZ2VSYW5nZTogVGhlIGRldmljZSB2b2x0YWdlIHJhbmdlIHdoaWNoIGRlZmluZXMgdGhlIGVyYXNlIHBhcmFsbGVsaXNtLiAgDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBWb2x0YWdlUmFuZ2VfMTogd2hlbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UgaXMgMS44ViB0byAyLjFWLCANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgYnkgYnl0ZSAoOC1iaXQpIA0KKyAgKiAgICAgICAgICAgIEBhcmcgVm9sdGFnZVJhbmdlXzI6IHdoZW4gdGhlIGRldmljZSB2b2x0YWdlIHJhbmdlIGlzIDIuMVYgdG8gMi43ViwNCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgYnkgaGFsZiB3b3JkICgxNi1iaXQpDQorICAqICAgICAgICAgICAgQGFyZyBWb2x0YWdlUmFuZ2VfMzogd2hlbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UgaXMgMi43ViB0byAzLjZWLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3BlcmF0aW9uIHdpbGwgYmUgZG9uZSBieSB3b3JkICgzMi1iaXQpDQorICAqICAgICAgICAgICAgQGFyZyBWb2x0YWdlUmFuZ2VfNDogd2hlbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UgaXMgMi43ViB0byAzLjZWICsgRXh0ZXJuYWwgVnBwLCANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgYnkgZG91YmxlIHdvcmQgKDY0LWJpdCkNCisgICogICAgICAgDQorICAqIEByZXR2YWwgRkxBU0ggU3RhdHVzOiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlOiBGTEFTSF9CVVNZLCBGTEFTSF9FUlJPUl9QUk9HUkFNLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRVJST1JfV1JQLCBGTEFTSF9FUlJPUl9PUEVSQVRJT04gb3IgRkxBU0hfQ09NUExFVEUuDQorICAqLw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9FcmFzZUFsbFNlY3RvcnModWludDhfdCBWb2x0YWdlUmFuZ2UpDQorew0KKyAgdWludDMyX3QgdG1wX3BzaXplID0gMHgwOw0KKyAgRkxBU0hfU3RhdHVzIHN0YXR1cyA9IEZMQVNIX0NPTVBMRVRFOw0KKyAgDQorICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8NCisgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorICBhc3NlcnRfcGFyYW0oSVNfVk9MVEFHRVJBTkdFKFZvbHRhZ2VSYW5nZSkpOw0KKyAgDQorICBpZihWb2x0YWdlUmFuZ2UgPT0gVm9sdGFnZVJhbmdlXzEpDQorICB7DQorICAgICB0bXBfcHNpemUgPSBGTEFTSF9QU0laRV9CWVRFOw0KKyAgfQ0KKyAgZWxzZSBpZihWb2x0YWdlUmFuZ2UgPT0gVm9sdGFnZVJhbmdlXzIpDQorICB7DQorICAgIHRtcF9wc2l6ZSA9IEZMQVNIX1BTSVpFX0hBTEZfV09SRDsNCisgIH0NCisgIGVsc2UgaWYoVm9sdGFnZVJhbmdlID09IFZvbHRhZ2VSYW5nZV8zKQ0KKyAgew0KKyAgICB0bXBfcHNpemUgPSBGTEFTSF9QU0laRV9XT1JEOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICB0bXBfcHNpemUgPSBGTEFTSF9QU0laRV9ET1VCTEVfV09SRDsNCisgIH0gIA0KKyAgaWYoc3RhdHVzID09IEZMQVNIX0NPTVBMRVRFKQ0KKyAgew0KKyAgICAvKiBpZiB0aGUgcHJldmlvdXMgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgcHJvY2VlZCB0byBlcmFzZSBhbGwgc2VjdG9ycyAqLw0KKyAgICAgRkxBU0gtPkNSICY9IENSX1BTSVpFX01BU0s7DQorICAgICBGTEFTSC0+Q1IgfD0gdG1wX3BzaXplOw0KKyAgICAgRkxBU0gtPkNSIHw9IEZMQVNIX0NSX01FUjsNCisgICAgIEZMQVNILT5DUiB8PSBGTEFTSF9DUl9TVFJUOw0KKyAgICANCisgICAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkICovDQorICAgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorDQorICAgIC8qIGlmIHRoZSBlcmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBkaXNhYmxlIHRoZSBNRVIgQml0ICovDQorICAgIEZMQVNILT5DUiAmPSAofkZMQVNIX0NSX01FUik7DQorDQorICB9ICAgDQorICAvKiBSZXR1cm4gdGhlIEVyYXNlIFN0YXR1cyAqLw0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUHJvZ3JhbXMgYSBkb3VibGUgd29yZCAoNjQtYml0KSBhdCBhIHNwZWNpZmllZCBhZGRyZXNzLg0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIHdoZW4gdGhlIGRldmljZSB2b2x0YWdlIHJhbmdlIGlzIGZyb20NCisgICogICAgICAgICAyLjdWIHRvIDMuNlYgYW5kIGFuIEV4dGVybmFsIFZwcCBpcyBwcmVzZW50LiAgICAgICAgICAgDQorICAqIEBwYXJhbSAgQWRkcmVzczogc3BlY2lmaWVzIHRoZSBhZGRyZXNzIHRvIGJlIHByb2dyYW1tZWQuDQorICAqIEBwYXJhbSAgRGF0YTogc3BlY2lmaWVzIHRoZSBkYXRhIHRvIGJlIHByb2dyYW1tZWQuDQorICAqIEByZXR2YWwgRkxBU0ggU3RhdHVzOiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlOiBGTEFTSF9CVVNZLCBGTEFTSF9FUlJPUl9QUk9HUkFNLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRVJST1JfV1JQLCBGTEFTSF9FUlJPUl9PUEVSQVRJT04gb3IgRkxBU0hfQ09NUExFVEUuDQorICAqLw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9Qcm9ncmFtRG91YmxlV29yZCh1aW50MzJfdCBBZGRyZXNzLCB1aW50NjRfdCBEYXRhKQ0KK3sNCisgIEZMQVNIX1N0YXR1cyBzdGF0dXMgPSBGTEFTSF9DT01QTEVURTsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRkxBU0hfQUREUkVTUyhBZGRyZXNzKSk7DQorDQorICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8NCisgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorICANCisgIGlmKHN0YXR1cyA9PSBGTEFTSF9DT01QTEVURSkNCisgIHsNCisgICAgLyogaWYgdGhlIHByZXZpb3VzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIHByb2NlZWQgdG8gcHJvZ3JhbSB0aGUgbmV3IGRhdGEgKi8NCisgICAgRkxBU0gtPkNSICY9IENSX1BTSVpFX01BU0s7DQorICAgIEZMQVNILT5DUiB8PSBGTEFTSF9QU0laRV9ET1VCTEVfV09SRDsNCisgICAgRkxBU0gtPkNSIHw9IEZMQVNIX0NSX1BHOw0KKyAgDQorICAgICooX19JTyB1aW50NjRfdCopQWRkcmVzcyA9IERhdGE7DQorICAgICAgICANCisgICAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkICovDQorICAgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorDQorICAgIC8qIGlmIHRoZSBwcm9ncmFtIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGRpc2FibGUgdGhlIFBHIEJpdCAqLw0KKyAgICBGTEFTSC0+Q1IgJj0gKH5GTEFTSF9DUl9QRyk7DQorICB9IA0KKyAgLyogUmV0dXJuIHRoZSBQcm9ncmFtIFN0YXR1cyAqLw0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUHJvZ3JhbXMgYSB3b3JkICgzMi1iaXQpIGF0IGEgc3BlY2lmaWVkIGFkZHJlc3MuDQorICAqIEBwYXJhbSAgQWRkcmVzczogc3BlY2lmaWVzIHRoZSBhZGRyZXNzIHRvIGJlIHByb2dyYW1tZWQuDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBhZGRyZXNzIGluIFByb2dyYW0gbWVtb3J5IHpvbmUgb3IgaW4gT1RQIHpvbmUuICANCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB3aGVuIHRoZSBkZXZpY2Ugdm9sdGFnZSByYW5nZSBpcyBmcm9tIDIuN1YgdG8gMy42Vi4gDQorICAqIEBwYXJhbSAgRGF0YTogc3BlY2lmaWVzIHRoZSBkYXRhIHRvIGJlIHByb2dyYW1tZWQuDQorICAqIEByZXR2YWwgRkxBU0ggU3RhdHVzOiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlOiBGTEFTSF9CVVNZLCBGTEFTSF9FUlJPUl9QUk9HUkFNLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRVJST1JfV1JQLCBGTEFTSF9FUlJPUl9PUEVSQVRJT04gb3IgRkxBU0hfQ09NUExFVEUuDQorICAqLw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9Qcm9ncmFtV29yZCh1aW50MzJfdCBBZGRyZXNzLCB1aW50MzJfdCBEYXRhKQ0KK3sNCisgIEZMQVNIX1N0YXR1cyBzdGF0dXMgPSBGTEFTSF9DT01QTEVURTsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRkxBU0hfQUREUkVTUyhBZGRyZXNzKSk7DQorDQorICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8NCisgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorICANCisgIGlmKHN0YXR1cyA9PSBGTEFTSF9DT01QTEVURSkNCisgIHsNCisgICAgLyogaWYgdGhlIHByZXZpb3VzIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIHByb2NlZWQgdG8gcHJvZ3JhbSB0aGUgbmV3IGRhdGEgKi8NCisgICAgRkxBU0gtPkNSICY9IENSX1BTSVpFX01BU0s7DQorICAgIEZMQVNILT5DUiB8PSBGTEFTSF9QU0laRV9XT1JEOw0KKyAgICBGTEFTSC0+Q1IgfD0gRkxBU0hfQ1JfUEc7DQorICANCisgICAgKihfX0lPIHVpbnQzMl90KilBZGRyZXNzID0gRGF0YTsNCisgICAgICAgIA0KKyAgICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8NCisgICAgc3RhdHVzID0gRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKTsNCisNCisgICAgLyogaWYgdGhlIHByb2dyYW0gb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgZGlzYWJsZSB0aGUgUEcgQml0ICovDQorICAgIEZMQVNILT5DUiAmPSAofkZMQVNIX0NSX1BHKTsNCisgIH0gDQorICAvKiBSZXR1cm4gdGhlIFByb2dyYW0gU3RhdHVzICovDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBQcm9ncmFtcyBhIGhhbGYgd29yZCAoMTYtYml0KSBhdCBhIHNwZWNpZmllZCBhZGRyZXNzLiANCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCB3aGVuIHRoZSBkZXZpY2Ugdm9sdGFnZSByYW5nZSBpcyBmcm9tIDIuMVYgdG8gMy42Vi4gICAgICAgICAgICAgICANCisgICogQHBhcmFtICBBZGRyZXNzOiBzcGVjaWZpZXMgdGhlIGFkZHJlc3MgdG8gYmUgcHJvZ3JhbW1lZC4NCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGFkZHJlc3MgaW4gUHJvZ3JhbSBtZW1vcnkgem9uZSBvciBpbiBPVFAgem9uZS4gIA0KKyAgKiBAcGFyYW0gIERhdGE6IHNwZWNpZmllcyB0aGUgZGF0YSB0byBiZSBwcm9ncmFtbWVkLg0KKyAgKiBAcmV0dmFsIEZMQVNIIFN0YXR1czogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZTogRkxBU0hfQlVTWSwgRkxBU0hfRVJST1JfUFJPR1JBTSwNCisgICogICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0VSUk9SX1dSUCwgRkxBU0hfRVJST1JfT1BFUkFUSU9OIG9yIEZMQVNIX0NPTVBMRVRFLg0KKyAgKi8NCitGTEFTSF9TdGF0dXMgRkxBU0hfUHJvZ3JhbUhhbGZXb3JkKHVpbnQzMl90IEFkZHJlc3MsIHVpbnQxNl90IERhdGEpDQorew0KKyAgRkxBU0hfU3RhdHVzIHN0YXR1cyA9IEZMQVNIX0NPTVBMRVRFOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GTEFTSF9BRERSRVNTKEFkZHJlc3MpKTsNCisNCisgIC8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLw0KKyAgc3RhdHVzID0gRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKTsNCisgIA0KKyAgaWYoc3RhdHVzID09IEZMQVNIX0NPTVBMRVRFKQ0KKyAgew0KKyAgICAvKiBpZiB0aGUgcHJldmlvdXMgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgcHJvY2VlZCB0byBwcm9ncmFtIHRoZSBuZXcgZGF0YSAqLw0KKyAgICBGTEFTSC0+Q1IgJj0gQ1JfUFNJWkVfTUFTSzsNCisgICAgRkxBU0gtPkNSIHw9IEZMQVNIX1BTSVpFX0hBTEZfV09SRDsNCisgICAgRkxBU0gtPkNSIHw9IEZMQVNIX0NSX1BHOw0KKyAgDQorICAgICooX19JTyB1aW50MTZfdCopQWRkcmVzcyA9IERhdGE7DQorICAgICAgICANCisgICAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkICovDQorICAgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorDQorICAgIC8qIGlmIHRoZSBwcm9ncmFtIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGRpc2FibGUgdGhlIFBHIEJpdCAqLw0KKyAgICBGTEFTSC0+Q1IgJj0gKH5GTEFTSF9DUl9QRyk7DQorICB9IA0KKyAgLyogUmV0dXJuIHRoZSBQcm9ncmFtIFN0YXR1cyAqLw0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUHJvZ3JhbXMgYSBieXRlICg4LWJpdCkgYXQgYSBzcGVjaWZpZWQgYWRkcmVzcy4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHdpdGhpbiBhbGwgdGhlIGRldmljZSBzdXBwbHkgdm9sdGFnZSByYW5nZXMuICAgICAgICAgICAgICAgDQorICAqIEBwYXJhbSAgQWRkcmVzczogc3BlY2lmaWVzIHRoZSBhZGRyZXNzIHRvIGJlIHByb2dyYW1tZWQuDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBhZGRyZXNzIGluIFByb2dyYW0gbWVtb3J5IHpvbmUgb3IgaW4gT1RQIHpvbmUuICANCisgICogQHBhcmFtICBEYXRhOiBzcGVjaWZpZXMgdGhlIGRhdGEgdG8gYmUgcHJvZ3JhbW1lZC4NCisgICogQHJldHZhbCBGTEFTSCBTdGF0dXM6IFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmU6IEZMQVNIX0JVU1ksIEZMQVNIX0VSUk9SX1BST0dSQU0sDQorICAqICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9FUlJPUl9XUlAsIEZMQVNIX0VSUk9SX09QRVJBVElPTiBvciBGTEFTSF9DT01QTEVURS4NCisgICovDQorRkxBU0hfU3RhdHVzIEZMQVNIX1Byb2dyYW1CeXRlKHVpbnQzMl90IEFkZHJlc3MsIHVpbnQ4X3QgRGF0YSkNCit7DQorICBGTEFTSF9TdGF0dXMgc3RhdHVzID0gRkxBU0hfQ09NUExFVEU7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZMQVNIX0FERFJFU1MoQWRkcmVzcykpOw0KKw0KKyAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkICovDQorICBzdGF0dXMgPSBGTEFTSF9XYWl0Rm9yTGFzdE9wZXJhdGlvbigpOw0KKyAgDQorICBpZihzdGF0dXMgPT0gRkxBU0hfQ09NUExFVEUpDQorICB7DQorICAgIC8qIGlmIHRoZSBwcmV2aW91cyBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBwcm9jZWVkIHRvIHByb2dyYW0gdGhlIG5ldyBkYXRhICovDQorICAgIEZMQVNILT5DUiAmPSBDUl9QU0laRV9NQVNLOw0KKyAgICBGTEFTSC0+Q1IgfD0gRkxBU0hfUFNJWkVfQllURTsNCisgICAgRkxBU0gtPkNSIHw9IEZMQVNIX0NSX1BHOw0KKyAgDQorICAgICooX19JTyB1aW50OF90KilBZGRyZXNzID0gRGF0YTsNCisgICAgICAgIA0KKyAgICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8NCisgICAgc3RhdHVzID0gRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKTsNCisNCisgICAgLyogaWYgdGhlIHByb2dyYW0gb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgZGlzYWJsZSB0aGUgUEcgQml0ICovDQorICAgIEZMQVNILT5DUiAmPSAofkZMQVNIX0NSX1BHKTsNCisgIH0gDQorDQorICAvKiBSZXR1cm4gdGhlIFByb2dyYW0gU3RhdHVzICovDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBGTEFTSF9Hcm91cDMgT3B0aW9uIEJ5dGVzIFByb2dyYW1taW5nIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBPcHRpb24gQnl0ZXMgUHJvZ3JhbW1pbmcgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb24gQnl0ZXMgUHJvZ3JhbW1pbmcgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyANCisgICBUaGlzIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgIC0gdm9pZCBGTEFTSF9PQl9VbmxvY2sodm9pZCkNCisgICAtIHZvaWQgRkxBU0hfT0JfTG9jayh2b2lkKQ0KKyAgIC0gdm9pZCBGTEFTSF9PQl9XUlBDb25maWcodWludDMyX3QgT0JfV1JQLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorICAgLSB2b2lkIEZMQVNIX09CX1JEUENvbmZpZyh1aW50OF90IE9CX1JEUCkNCisgICAtIHZvaWQgRkxBU0hfT0JfVXNlckNvbmZpZyh1aW50OF90IE9CX0lXREcsIHVpbnQ4X3QgT0JfU1RPUCwgdWludDhfdCBPQl9TVERCWSkNCisgICAtIHZvaWQgRkxBU0hfT0JfQk9SQ29uZmlnKHVpbnQ4X3QgT0JfQk9SKQ0KKyAgIC0gRkxBU0hfU3RhdHVzIEZMQVNIX1Byb2dyYW1PVFAodWludDMyX3QgQWRkcmVzcywgdWludDMyX3QgRGF0YSkJCQkJCQkJDQorICAgLSBGTEFTSF9TdGF0dXMgRkxBU0hfT0JfTGF1bmNoKHZvaWQpDQorICAgLSB1aW50MzJfdCBGTEFTSF9PQl9HZXRVc2VyKHZvaWQpCQkJCQkJDQorICAgLSB1aW50OF90IEZMQVNIX09CX0dldFdSUCh2b2lkKQkJCQkJCQ0KKyAgIC0gdWludDhfdCBGTEFTSF9PQl9HZXRSRFAodm9pZCkJCQkJCQkJDQorICAgLSB1aW50OF90IEZMQVNIX09CX0dldEJPUih2b2lkKQ0KKyAgIA0KKyAgIEFueSBvcGVyYXRpb24gb2YgZXJhc2Ugb3IgcHJvZ3JhbSBzaG91bGQgZm9sbG93IHRoZXNlIHN0ZXBzOg0KKyAgIDEuIENhbGwgdGhlIEZMQVNIX09CX1VubG9jaygpIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgRkxBU0ggb3B0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgYWNjZXNzDQorDQorICAgMi4gQ2FsbCBvbmUgb3Igc2V2ZXJhbCBmdW5jdGlvbnMgdG8gcHJvZ3JhbSB0aGUgZGVzaXJlZCBPcHRpb24gQnl0ZXM6DQorICAgICAgLSB2b2lkIEZMQVNIX09CX1dSUENvbmZpZyh1aW50MzJfdCBPQl9XUlAsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkgPT4gdG8gRW5hYmxlL0Rpc2FibGUgDQorICAgICAgICB0aGUgZGVzaXJlZCBzZWN0b3Igd3JpdGUgcHJvdGVjdGlvbg0KKyAgICAgIC0gdm9pZCBGTEFTSF9PQl9SRFBDb25maWcodWludDhfdCBPQl9SRFApID0+IHRvIHNldCB0aGUgZGVzaXJlZCByZWFkIFByb3RlY3Rpb24gTGV2ZWwNCisgICAgICAtIHZvaWQgRkxBU0hfT0JfVXNlckNvbmZpZyh1aW50OF90IE9CX0lXREcsIHVpbnQ4X3QgT0JfU1RPUCwgdWludDhfdCBPQl9TVERCWSkgPT4gdG8gY29uZmlndXJlIA0KKyAgICAgICAgdGhlIHVzZXIgT3B0aW9uIEJ5dGVzLg0KKyAgICAgIC0gdm9pZCBGTEFTSF9PQl9CT1JDb25maWcodWludDhfdCBPQl9CT1IpID0+IHRvIHNldCB0aGUgQk9SIExldmVsIAkJCSANCisNCisgICAzLiBPbmNlIGFsbCBuZWVkZWQgT3B0aW9uIEJ5dGVzIHRvIGJlIHByb2dyYW1tZWQgYXJlIGNvcnJlY3RseSB3cml0dGVuLCBjYWxsIHRoZQ0KKyAgICAgIEZMQVNIX09CX0xhdW5jaCgpIGZ1bmN0aW9uIHRvIGxhdW5jaCB0aGUgT3B0aW9uIEJ5dGVzIHByb2dyYW1taW5nIHByb2Nlc3MuDQorICAgICANCisgICAgIEBub3RlIFdoZW4gY2hhbmdpbmcgdGhlIElXREcgbW9kZSBmcm9tIEhXIHRvIFNXIG9yIGZyb20gU1cgdG8gSFcsIGEgc3lzdGVtIA0KKyAgICAgICAgICAgcmVzZXQgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIGNoYW5nZSBlZmZlY3RpdmUuICANCisNCisgICA0LiBDYWxsIHRoZSBGTEFTSF9PQl9Mb2NrKCkgZnVuY3Rpb24gdG8gZGlzYWJsZSB0aGUgRkxBU0ggb3B0aW9uIGNvbnRyb2wgcmVnaXN0ZXINCisgICAgICBhY2Nlc3MgKHJlY29tbWVuZGVkIHRvIHByb3RlY3QgdGhlIE9wdGlvbiBCeXRlcyBhZ2FpbnN0IHBvc3NpYmxlIHVud2FudGVkIG9wZXJhdGlvbnMpDQorICAgIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBVbmxvY2tzIHRoZSBGTEFTSCBPcHRpb24gQ29udHJvbCBSZWdpc3RlcnMgYWNjZXNzLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRkxBU0hfT0JfVW5sb2NrKHZvaWQpDQorew0KKyAgaWYoKEZMQVNILT5PUFRDUiAmIEZMQVNIX09QVENSX09QVExPQ0spICE9IFJFU0VUKQ0KKyAgew0KKyAgICAvKiBBdXRob3JpemVzIHRoZSBPcHRpb24gQnl0ZSByZWdpc3RlciBwcm9ncmFtbWluZyAqLw0KKyAgICBGTEFTSC0+T1BUS0VZUiA9IEZMQVNIX09QVF9LRVkxOw0KKyAgICBGTEFTSC0+T1BUS0VZUiA9IEZMQVNIX09QVF9LRVkyOw0KKyAgfSAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIExvY2tzIHRoZSBGTEFTSCBPcHRpb24gQ29udHJvbCBSZWdpc3RlcnMgYWNjZXNzLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRkxBU0hfT0JfTG9jayh2b2lkKQ0KK3sNCisgIC8qIFNldCB0aGUgT1BUTE9DSyBCaXQgdG8gbG9jayB0aGUgRkxBU0ggT3B0aW9uIEJ5dGUgUmVnaXN0ZXJzIGFjY2VzcyAqLw0KKyAgRkxBU0gtPk9QVENSIHw9IEZMQVNIX09QVENSX09QVExPQ0s7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHdyaXRlIHByb3RlY3Rpb24gb2YgdGhlIGRlc2lyZWQgc2VjdG9ycw0KKyAgKiBAcGFyYW0gIE9CX1dSUDogc3BlY2lmaWVzIHRoZSBzZWN0b3IocykgdG8gYmUgd3JpdGUgcHJvdGVjdGVkIG9yIHVucHJvdGVjdGVkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgT0JfV1JQOiBBIHZhbHVlIGJldHdlZW4gT0JfV1JQX1NlY3RvcjAgYW5kIE9CX1dSUF9TZWN0b3IxMSAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgICBAYXJnIE9CX1dSUF9TZWN0b3JfQWxsDQorICAqIEBwYXJhbSAgTmV3c3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgV3JpdGUgUHJvdGVjdGlvbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lICANCisgICovDQordm9pZCBGTEFTSF9PQl9XUlBDb25maWcodWludDMyX3QgT0JfV1JQLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyANCisgIEZMQVNIX1N0YXR1cyBzdGF0dXMgPSBGTEFTSF9DT01QTEVURTsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19PQl9XUlAoT0JfV1JQKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgICANCisgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorDQorICBpZihzdGF0dXMgPT0gRkxBU0hfQ09NUExFVEUpDQorICB7IA0KKyAgICBpZihOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgICB7DQorICAgICAgKihfX0lPIHVpbnQxNl90KilPUFRDUl9CWVRFMl9BRERSRVNTICY9ICh+T0JfV1JQKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAqKF9fSU8gdWludDE2X3QqKU9QVENSX0JZVEUyX0FERFJFU1MgfD0gKHVpbnQxNl90KU9CX1dSUDsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSByZWFkIHByb3RlY3Rpb24gbGV2ZWwuDQorICAqIEBwYXJhbSAgT0JfUkRQOiBzcGVjaWZpZXMgdGhlIHJlYWQgcHJvdGVjdGlvbiBsZXZlbC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIE9CX1JEUF9MZXZlbF8wOiBObyBwcm90ZWN0aW9uDQorICAqICAgICAgICAgICAgQGFyZyBPQl9SRFBfTGV2ZWxfMTogUmVhZCBwcm90ZWN0aW9uIG9mIHRoZSBtZW1vcnkNCisgICogICAgICAgICAgICBAYXJnIE9CX1JEUF9MZXZlbF8yOiBGdWxsIGNoaXAgcHJvdGVjdGlvbg0KKyAgKiAgIA0KKyAgKiAhISFXYXJuaW5nISEhIFdoZW4gZW5hYmxpbmcgT0JfUkRQIGxldmVsIDIgaXQncyBubyBtb3JlIHBvc3NpYmxlIHRvIGdvIGJhY2sgdG8gbGV2ZWwgMSBvciAwDQorICAqICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGTEFTSF9PQl9SRFBDb25maWcodWludDhfdCBPQl9SRFApDQorew0KKyAgRkxBU0hfU3RhdHVzIHN0YXR1cyA9IEZMQVNIX0NPTVBMRVRFOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19PQl9SRFAoT0JfUkRQKSk7DQorDQorICBzdGF0dXMgPSBGTEFTSF9XYWl0Rm9yTGFzdE9wZXJhdGlvbigpOw0KKw0KKyAgaWYoc3RhdHVzID09IEZMQVNIX0NPTVBMRVRFKQ0KKyAgew0KKyAgICAqKF9fSU8gdWludDhfdCopT1BUQ1JfQllURTFfQUREUkVTUyA9IE9CX1JEUDsNCisNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUHJvZ3JhbXMgdGhlIEZMQVNIIFVzZXIgT3B0aW9uIEJ5dGU6IElXREdfU1cgLyBSU1RfU1RPUCAvIFJTVF9TVERCWS4gICAgDQorICAqIEBwYXJhbSAgT0JfSVdERzogU2VsZWN0cyB0aGUgSVdERyBtb2RlDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBPQl9JV0RHX1NXOiBTb2Z0d2FyZSBJV0RHIHNlbGVjdGVkDQorICAqICAgICAgICAgICAgQGFyZyBPQl9JV0RHX0hXOiBIYXJkd2FyZSBJV0RHIHNlbGVjdGVkDQorICAqIEBwYXJhbSAgT0JfU1RPUDogUmVzZXQgZXZlbnQgd2hlbiBlbnRlcmluZyBTVE9QIG1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyICBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgT0JfU1RPUF9Ob1JTVDogTm8gcmVzZXQgZ2VuZXJhdGVkIHdoZW4gZW50ZXJpbmcgaW4gU1RPUA0KKyAgKiAgICAgICAgICAgIEBhcmcgT0JfU1RPUF9SU1Q6IFJlc2V0IGdlbmVyYXRlZCB3aGVuIGVudGVyaW5nIGluIFNUT1ANCisgICogQHBhcmFtICBPQl9TVERCWTogUmVzZXQgZXZlbnQgd2hlbiBlbnRlcmluZyBTdGFuZGJ5IG1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyICBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgT0JfU1REQllfTm9SU1Q6IE5vIHJlc2V0IGdlbmVyYXRlZCB3aGVuIGVudGVyaW5nIGluIFNUQU5EQlkNCisgICogICAgICAgICAgICBAYXJnIE9CX1NUREJZX1JTVDogUmVzZXQgZ2VuZXJhdGVkIHdoZW4gZW50ZXJpbmcgaW4gU1RBTkRCWQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGTEFTSF9PQl9Vc2VyQ29uZmlnKHVpbnQ4X3QgT0JfSVdERywgdWludDhfdCBPQl9TVE9QLCB1aW50OF90IE9CX1NUREJZKQ0KK3sNCisgIHVpbnQ4X3Qgb3B0aW9udG1wID0gMHhGRjsNCisgIEZMQVNIX1N0YXR1cyBzdGF0dXMgPSBGTEFTSF9DT01QTEVURTsgDQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX09CX0lXREdfU09VUkNFKE9CX0lXREcpKTsNCisgIGFzc2VydF9wYXJhbShJU19PQl9TVE9QX1NPVVJDRShPQl9TVE9QKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfT0JfU1REQllfU09VUkNFKE9CX1NUREJZKSk7DQorDQorICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8NCisgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCk7DQorICANCisgIGlmKHN0YXR1cyA9PSBGTEFTSF9DT01QTEVURSkNCisgIHsgDQorICAgIC8qIE1hc2sgT1BUTE9DSywgT1BUU1RSVCBhbmQgQk9SX0xFViBiaXRzICovDQorICAgIG9wdGlvbnRtcCA9ICAodWludDhfdCkoKCooX19JTyB1aW50OF90ICopT1BUQ1JfQllURTBfQUREUkVTUykgJiAodWludDhfdCkweDBGKTsgDQorDQorICAgIC8qIFVwZGF0ZSBVc2VyIE9wdGlvbiBCeXRlICovDQorICAgICooX19JTyB1aW50OF90ICopT1BUQ1JfQllURTBfQUREUkVTUyA9IE9CX0lXREcgfCAodWludDhfdCkoT0JfU1REQlkgfCAodWludDhfdCkoT0JfU1RPUCB8ICgodWludDhfdClvcHRpb250bXApKSk7IA0KKyAgfSAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIEJPUiBMZXZlbC4gDQorICAqIEBwYXJhbSAgT0JfQk9SOiBzcGVjaWZpZXMgdGhlIE9wdGlvbiBCeXRlcyBCT1IgUmVzZXQgTGV2ZWwuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBPQl9CT1JfTEVWRUwzOiBTdXBwbHkgdm9sdGFnZSByYW5nZXMgZnJvbSAyLjcgdG8gMy42IFYNCisgICogICAgICAgICAgICBAYXJnIE9CX0JPUl9MRVZFTDI6IFN1cHBseSB2b2x0YWdlIHJhbmdlcyBmcm9tIDIuNCB0byAyLjcgVg0KKyAgKiAgICAgICAgICAgIEBhcmcgT0JfQk9SX0xFVkVMMTogU3VwcGx5IHZvbHRhZ2UgcmFuZ2VzIGZyb20gMi4xIHRvIDIuNCBWDQorICAqICAgICAgICAgICAgQGFyZyBPQl9CT1JfT0ZGOiBTdXBwbHkgdm9sdGFnZSByYW5nZXMgZnJvbSAxLjYyIHRvIDIuMSBWDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZMQVNIX09CX0JPUkNvbmZpZyh1aW50OF90IE9CX0JPUikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX09CX0JPUihPQl9CT1IpKTsNCisNCisgIC8qIFNldCB0aGUgQk9SIExldmVsICovDQorICAqKF9fSU8gdWludDhfdCAqKU9QVENSX0JZVEUwX0FERFJFU1MgJj0gKH5GTEFTSF9PUFRDUl9CT1JfTEVWKTsNCisgICooX19JTyB1aW50OF90ICopT1BUQ1JfQllURTBfQUREUkVTUyB8PSBPQl9CT1I7DQorDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIExhdW5jaCB0aGUgb3B0aW9uIGJ5dGUgbG9hZGluZy4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgRkxBU0ggU3RhdHVzOiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlOiBGTEFTSF9CVVNZLCBGTEFTSF9FUlJPUl9QUk9HUkFNLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfRVJST1JfV1JQLCBGTEFTSF9FUlJPUl9PUEVSQVRJT04gb3IgRkxBU0hfQ09NUExFVEUuDQorICAqLw0KK0ZMQVNIX1N0YXR1cyBGTEFTSF9PQl9MYXVuY2godm9pZCkNCit7DQorICBGTEFTSF9TdGF0dXMgc3RhdHVzID0gRkxBU0hfQ09NUExFVEU7DQorDQorICAvKiBTZXQgdGhlIE9QVFNUUlQgYml0IGluIE9QVENSIHJlZ2lzdGVyICovDQorICAqKF9fSU8gdWludDhfdCAqKU9QVENSX0JZVEUwX0FERFJFU1MgfD0gRkxBU0hfT1BUQ1JfT1BUU1RSVDsNCisNCisgIC8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLw0KKyAgc3RhdHVzID0gRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKTsNCisNCisgIHJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIEZMQVNIIFVzZXIgT3B0aW9uIEJ5dGVzIHZhbHVlcy4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgVGhlIEZMQVNIIFVzZXIgT3B0aW9uIEJ5dGVzIHZhbHVlczogSVdER19TVyhCaXQwKSwgUlNUX1NUT1AoQml0MSkNCisgICogICAgICAgICBhbmQgUlNUX1NUREJZKEJpdDIpLg0KKyAgKi8NCit1aW50OF90IEZMQVNIX09CX0dldFVzZXIodm9pZCkNCit7DQorICAvKiBSZXR1cm4gdGhlIFVzZXIgT3B0aW9uIEJ5dGUgKi8NCisgIHJldHVybiAodWludDhfdCkoRkxBU0gtPk9QVENSID4+IDUpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBGTEFTSCBXcml0ZSBQcm90ZWN0aW9uIE9wdGlvbiBCeXRlcyB2YWx1ZS4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgVGhlIEZMQVNIIFdyaXRlIFByb3RlY3Rpb24gIE9wdGlvbiBCeXRlcyB2YWx1ZQ0KKyAgKi8NCit1aW50MTZfdCBGTEFTSF9PQl9HZXRXUlAodm9pZCkNCit7DQorICAvKiBSZXR1cm4gdGhlIEZMQVNIIHdyaXRlIHByb3RlY3Rpb24gUmVnaXN0ZXIgdmFsdWUgKi8NCisgIHJldHVybiAoKihfX0lPIHVpbnQxNl90ICopKE9QVENSX0JZVEUyX0FERFJFU1MpKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgRkxBU0ggUmVhZCBQcm90ZWN0aW9uIGxldmVsLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBGTEFTSCBSZWFkT3V0IFByb3RlY3Rpb24gU3RhdHVzOg0KKyAgKiAgICAgICAgICAgLSBTRVQsIHdoZW4gT0JfUkRQX0xldmVsXzEgb3IgT0JfUkRQX0xldmVsXzIgaXMgc2V0DQorICAqICAgICAgICAgICAtIFJFU0VULCB3aGVuIE9CX1JEUF9MZXZlbF8wIGlzIHNldA0KKyAgKi8NCitGbGFnU3RhdHVzIEZMQVNIX09CX0dldFJEUCh2b2lkKQ0KK3sNCisgIEZsYWdTdGF0dXMgcmVhZHN0YXR1cyA9IFJFU0VUOw0KKw0KKyAgaWYgKCgqKF9fSU8gdWludDhfdCopKE9QVENSX0JZVEUxX0FERFJFU1MpICE9ICh1aW50OF90KU9CX1JEUF9MZXZlbF8wKSkNCisgIHsNCisgICAgcmVhZHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmVhZHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIHJlYWRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIEZMQVNIIEJPUiBsZXZlbC4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgVGhlIEZMQVNIIEJPUiBsZXZlbDoNCisgICogICAgICAgICAgIC0gT0JfQk9SX0xFVkVMMzogU3VwcGx5IHZvbHRhZ2UgcmFuZ2VzIGZyb20gMi43IHRvIDMuNiBWDQorICAqICAgICAgICAgICAtIE9CX0JPUl9MRVZFTDI6IFN1cHBseSB2b2x0YWdlIHJhbmdlcyBmcm9tIDIuNCB0byAyLjcgVg0KKyAgKiAgICAgICAgICAgLSBPQl9CT1JfTEVWRUwxOiBTdXBwbHkgdm9sdGFnZSByYW5nZXMgZnJvbSAyLjEgdG8gMi40IFYNCisgICogICAgICAgICAgIC0gT0JfQk9SX09GRiAgIDogU3VwcGx5IHZvbHRhZ2UgcmFuZ2VzIGZyb20gMS42MiB0byAyLjEgViAgDQorICAqLw0KK3VpbnQ4X3QgRkxBU0hfT0JfR2V0Qk9SKHZvaWQpDQorew0KKyAgLyogUmV0dXJuIHRoZSBGTEFTSCBCT1IgbGV2ZWwgKi8NCisgIHJldHVybiAodWludDhfdCkoKihfX0lPIHVpbnQ4X3QgKikoT1BUQ1JfQllURTBfQUREUkVTUykgJiAodWludDhfdCkweDBDKTsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRkxBU0hfR3JvdXA0IEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgRkxBU0ggaW50ZXJydXB0cy4NCisgICogQHBhcmFtICBGTEFTSF9JVDogc3BlY2lmaWVzIHRoZSBGTEFTSCBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfSVRfRVJSOiBGTEFTSCBFcnJvciBJbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0lUX0VPUDogRkxBU0ggZW5kIG9mIG9wZXJhdGlvbiBJbnRlcnJ1cHQNCisgICogQHJldHZhbCBOb25lIA0KKyAgKi8NCit2b2lkIEZMQVNIX0lUQ29uZmlnKHVpbnQzMl90IEZMQVNIX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GTEFTSF9JVChGTEFTSF9JVCkpOyANCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZihOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIGludGVycnVwdCBzb3VyY2VzICovDQorICAgIEZMQVNILT5DUiB8PSBGTEFTSF9JVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHNvdXJjZXMgKi8NCisgICAgRkxBU0gtPkNSICY9IH4odWludDMyX3QpRkxBU0hfSVQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRkxBU0ggZmxhZyBpcyBzZXQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIEZMQVNIX0ZMQUc6IHNwZWNpZmllcyB0aGUgRkxBU0ggZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0ZMQUdfRU9QOiBGTEFTSCBFbmQgb2YgT3BlcmF0aW9uIGZsYWcgDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9GTEFHX09QRVJSOiBGTEFTSCBvcGVyYXRpb24gRXJyb3IgZmxhZyANCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0ZMQUdfV1JQRVJSOiBGTEFTSCBXcml0ZSBwcm90ZWN0ZWQgZXJyb3IgZmxhZyANCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0ZMQUdfUEdBRVJSOiBGTEFTSCBQcm9ncmFtbWluZyBBbGlnbm1lbnQgZXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfRkxBR19QR1BFUlI6IEZMQVNIIFByb2dyYW1taW5nIFBhcmFsbGVsaXNtIGVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEZMQVNIX0ZMQUdfUEdTRVJSOiBGTEFTSCBQcm9ncmFtbWluZyBTZXF1ZW5jZSBlcnJvciBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9GTEFHX0JTWTogRkxBU0ggQnVzeSBmbGFnDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBGTEFTSF9GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIEZMQVNIX0dldEZsYWdTdGF0dXModWludDMyX3QgRkxBU0hfRkxBRykNCit7DQorICBGbGFnU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GTEFTSF9HRVRfRkxBRyhGTEFTSF9GTEFHKSk7DQorDQorICBpZigoRkxBU0gtPlNSICYgRkxBU0hfRkxBRykgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBuZXcgc3RhdGUgb2YgRkxBU0hfRkxBRyAoU0VUIG9yIFJFU0VUKSAqLw0KKyAgcmV0dXJuIGJpdHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgRkxBU0gncyBwZW5kaW5nIGZsYWdzLg0KKyAgKiBAcGFyYW0gIEZMQVNIX0ZMQUc6IHNwZWNpZmllcyB0aGUgRkxBU0ggZmxhZ3MgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9GTEFHX0VPUDogRkxBU0ggRW5kIG9mIE9wZXJhdGlvbiBmbGFnIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfRkxBR19PUEVSUjogRkxBU0ggb3BlcmF0aW9uIEVycm9yIGZsYWcgDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9GTEFHX1dSUEVSUjogRkxBU0ggV3JpdGUgcHJvdGVjdGVkIGVycm9yIGZsYWcgDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9GTEFHX1BHQUVSUjogRkxBU0ggUHJvZ3JhbW1pbmcgQWxpZ25tZW50IGVycm9yIGZsYWcgDQorICAqICAgICAgICAgICAgQGFyZyBGTEFTSF9GTEFHX1BHUEVSUjogRkxBU0ggUHJvZ3JhbW1pbmcgUGFyYWxsZWxpc20gZXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgRkxBU0hfRkxBR19QR1NFUlI6IEZMQVNIIFByb2dyYW1taW5nIFNlcXVlbmNlIGVycm9yIGZsYWcNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRkxBU0hfQ2xlYXJGbGFnKHVpbnQzMl90IEZMQVNIX0ZMQUcpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GTEFTSF9DTEVBUl9GTEFHKEZMQVNIX0ZMQUcpKTsNCisgIA0KKyAgLyogQ2xlYXIgdGhlIGZsYWdzICovDQorICBGTEFTSC0+U1IgPSBGTEFTSF9GTEFHOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBGTEFTSCBTdGF0dXMuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIEZMQVNIIFN0YXR1czogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZTogRkxBU0hfQlVTWSwgRkxBU0hfRVJST1JfUFJPR1JBTSwNCisgICogICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0VSUk9SX1dSUCwgRkxBU0hfRVJST1JfT1BFUkFUSU9OIG9yIEZMQVNIX0NPTVBMRVRFLg0KKyAgKi8NCitGTEFTSF9TdGF0dXMgRkxBU0hfR2V0U3RhdHVzKHZvaWQpDQorew0KKyAgRkxBU0hfU3RhdHVzIGZsYXNoc3RhdHVzID0gRkxBU0hfQ09NUExFVEU7DQorICANCisgIGlmKChGTEFTSC0+U1IgJiBGTEFTSF9GTEFHX0JTWSkgPT0gRkxBU0hfRkxBR19CU1kpIA0KKyAgew0KKyAgICBmbGFzaHN0YXR1cyA9IEZMQVNIX0JVU1k7DQorICB9DQorICBlbHNlIA0KKyAgeyAgDQorICAgIGlmKChGTEFTSC0+U1IgJiBGTEFTSF9GTEFHX1dSUEVSUikgIT0gKHVpbnQzMl90KTB4MDApDQorICAgIHsgDQorICAgICAgZmxhc2hzdGF0dXMgPSBGTEFTSF9FUlJPUl9XUlA7DQorICAgIH0NCisgICAgZWxzZSANCisgICAgew0KKyAgICAgIGlmKChGTEFTSC0+U1IgJiAodWludDMyX3QpMHhFRikgIT0gKHVpbnQzMl90KTB4MDApDQorICAgICAgew0KKyAgICAgICAgZmxhc2hzdGF0dXMgPSBGTEFTSF9FUlJPUl9QUk9HUkFNOyANCisgICAgICB9DQorICAgICAgZWxzZQ0KKyAgICAgIHsNCisgICAgICAgIGlmKChGTEFTSC0+U1IgJiBGTEFTSF9GTEFHX09QRVJSKSAhPSAodWludDMyX3QpMHgwMCkNCisgICAgICAgIHsNCisgICAgICAgICAgZmxhc2hzdGF0dXMgPSBGTEFTSF9FUlJPUl9PUEVSQVRJT047DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgIGZsYXNoc3RhdHVzID0gRkxBU0hfQ09NUExFVEU7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorICAvKiBSZXR1cm4gdGhlIEZMQVNIIFN0YXR1cyAqLw0KKyAgcmV0dXJuIGZsYXNoc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBXYWl0cyBmb3IgYSBGTEFTSCBvcGVyYXRpb24gdG8gY29tcGxldGUuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIEZMQVNIIFN0YXR1czogVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZTogRkxBU0hfQlVTWSwgRkxBU0hfRVJST1JfUFJPR1JBTSwNCisgICogICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0VSUk9SX1dSUCwgRkxBU0hfRVJST1JfT1BFUkFUSU9OIG9yIEZMQVNIX0NPTVBMRVRFLg0KKyAgKi8NCitGTEFTSF9TdGF0dXMgRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24odm9pZCkNCit7IA0KKyAgX19JTyBGTEFTSF9TdGF0dXMgc3RhdHVzID0gRkxBU0hfQ09NUExFVEU7DQorICAgDQorICAvKiBDaGVjayBmb3IgdGhlIEZMQVNIIFN0YXR1cyAqLw0KKyAgc3RhdHVzID0gRkxBU0hfR2V0U3RhdHVzKCk7DQorDQorICAvKiBXYWl0IGZvciB0aGUgRkxBU0ggb3BlcmF0aW9uIHRvIGNvbXBsZXRlIGJ5IHBvbGxpbmcgb24gQlVTWSBmbGFnIHRvIGJlIHJlc2V0Lg0KKyAgICAgRXZlbiBpZiB0aGUgRkxBU0ggb3BlcmF0aW9uIGZhaWxzLCB0aGUgQlVTWSBmbGFnIHdpbGwgYmUgcmVzZXQgYW5kIGFuIGVycm9yDQorICAgICBmbGFnIHdpbGwgYmUgc2V0ICovDQorICB3aGlsZShzdGF0dXMgPT0gRkxBU0hfQlVTWSkNCisgIHsNCisgICAgc3RhdHVzID0gRkxBU0hfR2V0U3RhdHVzKCk7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIG9wZXJhdGlvbiBzdGF0dXMgKi8NCisgIHJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZnNtYy5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9mc21jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhMzhmMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZnNtYy5jCkBAIC0wLDAgKzEsOTg3IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfZnNtYy5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAqIEBicmllZiAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEZTTUMgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBJbnRlcmZhY2Ugd2l0aCBTUkFNLCBQU1JBTSwgTk9SIGFuZCBPbmVOQU5EIG1lbW9yaWVzDQorICAqICAgICAgICAgICAtIEludGVyZmFjZSB3aXRoIE5BTkQgbWVtb3JpZXMNCisgICogICAgICAgICAgIC0gSW50ZXJmYWNlIHdpdGggMTYtYml0IFBDIENhcmQgY29tcGF0aWJsZSBtZW1vcmllcyAgDQorICAqICAgICAgICAgICAtIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgICANCisgICogICAgICAgICAgIA0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2ZzbWMuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUMgDQorICAqIEBicmllZiBGU01DIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLyANCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZTTUMgcmVnaXN0ZXJzIGJpdCBtYXNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisvKiBGU01DIEJDUnggTWFzayAqLw0KKyNkZWZpbmUgQkNSX01CS0VOX1NFVCAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQorI2RlZmluZSBCQ1JfTUJLRU5fUkVTRVQgICAgICAgICgodWludDMyX3QpMHgwMDBGRkZGRSkNCisjZGVmaW5lIEJDUl9GQUNDRU5fU0VUICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KKw0KKy8qIEZTTUMgUENSeCBNYXNrICovDQorI2RlZmluZSBQQ1JfUEJLRU5fU0VUICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCisjZGVmaW5lIFBDUl9QQktFTl9SRVNFVCAgICAgICAgKCh1aW50MzJfdCkweDAwMEZGRkZCKQ0KKyNkZWZpbmUgUENSX0VDQ0VOX1NFVCAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQorI2RlZmluZSBQQ1JfRUNDRU5fUkVTRVQgICAgICAgICgodWludDMyX3QpMHgwMDBGRkZCRikNCisjZGVmaW5lIFBDUl9NRU1PUllUWVBFX05BTkQgICAgKCh1aW50MzJfdCkweDAwMDAwMDA4KQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBGU01DX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19Hcm91cDEgTk9SL1NSQU0gQ29udHJvbGxlciBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgTk9SL1NSQU0gQ29udHJvbGxlciBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgTk9SL1NSQU0gQ29udHJvbGxlciBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNvbmZpZ3VyZSB0aGUgRlNNQyB0byBpbnRlcmZhY2Ugd2l0aA0KKyBTUkFNLCBQU1JBTSwgTk9SIG9yIE9uZU5BTkQgbWVtb3J5IGNvbm5lY3RlZCB0byB0aGUgTk9SL1NSQU0gQmFuazoNCisgDQorICAgMS4gRW5hYmxlIHRoZSBjbG9jayBmb3IgdGhlIEZTTUMgYW5kIGFzc29jaWF0ZWQgR1BJT3MgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQorICAgICAgICAgIFJDQ19BSEIzUGVyaXBoQ2xvY2tDbWQoUkNDX0FIQjNQZXJpcGhfRlNNQywgRU5BQkxFKTsNCisgICAgICAgICAgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMVBlcmlwaF9HUElPeCwgRU5BQkxFKTsNCisNCisgICAyLiBGU01DIHBpbnMgY29uZmlndXJhdGlvbiANCisgICAgICAgLSBDb25uZWN0IHRoZSBpbnZvbHZlZCBGU01DIHBpbnMgdG8gQUYxMiB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIA0KKyAgICAgICAgICBHUElPX1BpbkFGQ29uZmlnKEdQSU94LCBHUElPX1BpblNvdXJjZXgsIEdQSU9fQUZfRlNNQyk7IA0KKyAgICAgICAtIENvbmZpZ3VyZSB0aGVzZSBGU01DIHBpbnMgaW4gYWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24NCisgICAgICAgICAgR1BJT19Jbml0KCk7ICAgIA0KKyAgICAgICANCisgICAzLiBEZWNsYXJlIGEgRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYgc3RydWN0dXJlLCBmb3IgZXhhbXBsZToNCisgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmU7DQorICAgICAgYW5kIGZpbGwgdGhlIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUgdmFyaWFibGUgd2l0aCB0aGUgYWxsb3dlZCB2YWx1ZXMgb2YNCisgICAgICB0aGUgc3RydWN0dXJlIG1lbWJlci4NCisgICAgICANCisgICA0LiBJbml0aWFsaXplIHRoZSBOT1IvU1JBTSBDb250cm9sbGVyIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uDQorICAgICAgICAgIEZTTUNfTk9SU1JBTUluaXQoJkZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUpOyANCisNCisgICA1LiBUaGVuIGVuYWJsZSB0aGUgTk9SL1NSQU0gQmFuaywgZm9yIGV4YW1wbGU6DQorICAgICAgICAgIEZTTUNfTk9SU1JBTUNtZChGU01DX0JhbmsxX05PUlNSQU0yLCBFTkFCTEUpOyAgDQorDQorICAgNi4gQXQgdGhpcyBzdGFnZSB5b3UgY2FuIHJlYWQvd3JpdGUgZnJvbS90byB0aGUgbWVtb3J5IGNvbm5lY3RlZCB0byB0aGUgTk9SL1NSQU0gQmFuay4gDQorICAgDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgdGhlIEZTTUMgTk9SL1NSQU0gQmFua3MgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgDQorICAqICAgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIEZTTUNfQmFuazogc3BlY2lmaWVzIHRoZSBGU01DIEJhbmsgdG8gYmUgdXNlZA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19CYW5rMV9OT1JTUkFNMTogRlNNQyBCYW5rMSBOT1IvU1JBTTEgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19CYW5rMV9OT1JTUkFNMjogRlNNQyBCYW5rMSBOT1IvU1JBTTIgDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsxX05PUlNSQU0zOiBGU01DIEJhbmsxIE5PUi9TUkFNMyANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazFfTk9SU1JBTTQ6IEZTTUMgQmFuazEgTk9SL1NSQU00IA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGU01DX05PUlNSQU1EZUluaXQodWludDMyX3QgRlNNQ19CYW5rKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXIgKi8NCisgIGFzc2VydF9wYXJhbShJU19GU01DX05PUlNSQU1fQkFOSyhGU01DX0JhbmspKTsNCisgIA0KKyAgLyogRlNNQ19CYW5rMV9OT1JTUkFNMSAqLw0KKyAgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazFfTk9SU1JBTTEpDQorICB7DQorICAgIEZTTUNfQmFuazEtPkJUQ1JbRlNNQ19CYW5rXSA9IDB4MDAwMDMwREI7ICAgIA0KKyAgfQ0KKyAgLyogRlNNQ19CYW5rMV9OT1JTUkFNMiwgIEZTTUNfQmFuazFfTk9SU1JBTTMgb3IgRlNNQ19CYW5rMV9OT1JTUkFNNCAqLw0KKyAgZWxzZQ0KKyAgeyAgIA0KKyAgICBGU01DX0JhbmsxLT5CVENSW0ZTTUNfQmFua10gPSAweDAwMDAzMEQyOyANCisgIH0NCisgIEZTTUNfQmFuazEtPkJUQ1JbRlNNQ19CYW5rICsgMV0gPSAweDBGRkZGRkZGOw0KKyAgRlNNQ19CYW5rMUUtPkJXVFJbRlNNQ19CYW5rXSA9IDB4MEZGRkZGRkY7ICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIEZTTUMgTk9SL1NSQU0gQmFua3MgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQNCisgICogICAgICAgICBwYXJhbWV0ZXJzIGluIHRoZSBGU01DX05PUlNSQU1Jbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QgOiBwb2ludGVyIHRvIGEgRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYgc3RydWN0dXJlDQorICAqICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIEZTTUMgTk9SL1NSQU0gDQorICAqICAgICAgICAgc3BlY2lmaWVkIEJhbmtzLiAgICAgICAgICAgICAgICAgICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZTTUNfTk9SU1JBTUluaXQoRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYqIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19OT1JTUkFNX0JBTksoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19NVVgoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19EYXRhQWRkcmVzc011eCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfTUVNT1JZKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfTWVtb3J5VHlwZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfTUVNT1JZX1dJRFRIKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfTWVtb3J5RGF0YVdpZHRoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19CVVJTVE1PREUoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19CdXJzdEFjY2Vzc01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0FTWU5XQUlUKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfQXN5bmNocm9ub3VzV2FpdCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfV0FJVF9QT0xBUklUWShGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dhaXRTaWduYWxQb2xhcml0eSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfV1JBUF9NT0RFKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JhcE1vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX1dBSVRfU0lHTkFMX0FDVElWRShGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dhaXRTaWduYWxBY3RpdmUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX1dSSVRFX09QRVJBVElPTihGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlT3BlcmF0aW9uKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19XQUlURV9TSUdOQUwoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19XYWl0U2lnbmFsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19FWFRFTkRFRF9NT0RFKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfRXh0ZW5kZWRNb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19XUklURV9CVVJTVChGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlQnVyc3QpKTsgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfQUREUkVTU19TRVRVUF9USU1FKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NTZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0FERFJFU1NfSE9MRF9USU1FKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NIb2xkVGltZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfREFUQVNFVFVQX1RJTUUoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfRGF0YVNldHVwVGltZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfVFVSTkFST1VORF9USU1FKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0J1c1R1cm5Bcm91bmREdXJhdGlvbikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfQ0xLX0RJVihGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1JlYWRXcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19DTEtEaXZpc2lvbikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfREFUQV9MQVRFTkNZKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0RhdGFMYXRlbmN5KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19BQ0NFU1NfTU9ERShGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1JlYWRXcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19BY2Nlc3NNb2RlKSk7IA0KKyAgDQorICAvKiBCYW5rMSBOT1IvU1JBTSBjb250cm9sIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gKi8gDQorICBGU01DX0JhbmsxLT5CVENSW0ZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfQmFua10gPSANCisgICAgICAgICAgICAodWludDMyX3QpRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19EYXRhQWRkcmVzc011eCB8DQorICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19NZW1vcnlUeXBlIHwNCisgICAgICAgICAgICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX01lbW9yeURhdGFXaWR0aCB8DQorICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19CdXJzdEFjY2Vzc01vZGUgfA0KKyAgICAgICAgICAgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfQXN5bmNocm9ub3VzV2FpdCB8DQorICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19XYWl0U2lnbmFsUG9sYXJpdHkgfA0KKyAgICAgICAgICAgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JhcE1vZGUgfA0KKyAgICAgICAgICAgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV2FpdFNpZ25hbEFjdGl2ZSB8DQorICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZU9wZXJhdGlvbiB8DQorICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19XYWl0U2lnbmFsIHwNCisgICAgICAgICAgICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX0V4dGVuZGVkTW9kZSB8DQorICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZUJ1cnN0Ow0KKyAgaWYoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19NZW1vcnlUeXBlID09IEZTTUNfTWVtb3J5VHlwZV9OT1IpDQorICB7DQorICAgIEZTTUNfQmFuazEtPkJUQ1JbRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19CYW5rXSB8PSAodWludDMyX3QpQkNSX0ZBQ0NFTl9TRVQ7DQorICB9DQorICAvKiBCYW5rMSBOT1IvU1JBTSB0aW1pbmcgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiAqLw0KKyAgRlNNQ19CYW5rMS0+QlRDUltGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX0JhbmsrMV0gPSANCisgICAgICAgICAgICAodWludDMyX3QpRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQWRkcmVzc1NldHVwVGltZSB8DQorICAgICAgICAgICAgKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NIb2xkVGltZSA8PCA0KSB8DQorICAgICAgICAgICAgKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0RhdGFTZXR1cFRpbWUgPDwgOCkgfA0KKyAgICAgICAgICAgIChGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1JlYWRXcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19CdXNUdXJuQXJvdW5kRHVyYXRpb24gPDwgMTYpIHwNCisgICAgICAgICAgICAoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQ0xLRGl2aXNpb24gPDwgMjApIHwNCisgICAgICAgICAgICAoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfRGF0YUxhdGVuY3kgPDwgMjQpIHwNCisgICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQWNjZXNzTW9kZTsNCisgICAgICAgICAgICANCisgICAgDQorICAvKiBCYW5rMSBOT1IvU1JBTSB0aW1pbmcgcmVnaXN0ZXIgZm9yIHdyaXRlIGNvbmZpZ3VyYXRpb24sIGlmIGV4dGVuZGVkIG1vZGUgaXMgdXNlZCAqLw0KKyAgaWYoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19FeHRlbmRlZE1vZGUgPT0gRlNNQ19FeHRlbmRlZE1vZGVfRW5hYmxlKQ0KKyAgew0KKyAgICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19BRERSRVNTX1NFVFVQX1RJTUUoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19BZGRyZXNzU2V0dXBUaW1lKSk7DQorICAgIGFzc2VydF9wYXJhbShJU19GU01DX0FERFJFU1NfSE9MRF9USU1FKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQWRkcmVzc0hvbGRUaW1lKSk7DQorICAgIGFzc2VydF9wYXJhbShJU19GU01DX0RBVEFTRVRVUF9USU1FKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfRGF0YVNldHVwVGltZSkpOw0KKyAgICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19DTEtfRElWKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQ0xLRGl2aXNpb24pKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfREFUQV9MQVRFTkNZKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfRGF0YUxhdGVuY3kpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfQUNDRVNTX01PREUoRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19BY2Nlc3NNb2RlKSk7DQorICAgIEZTTUNfQmFuazFFLT5CV1RSW0ZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfQmFua10gPSANCisgICAgICAgICAgICAgICh1aW50MzJfdClGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NTZXR1cFRpbWUgfA0KKyAgICAgICAgICAgICAgKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQWRkcmVzc0hvbGRUaW1lIDw8IDQgKXwNCisgICAgICAgICAgICAgIChGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0RhdGFTZXR1cFRpbWUgPDwgOCkgfA0KKyAgICAgICAgICAgICAgKEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQ0xLRGl2aXNpb24gPDwgMjApIHwNCisgICAgICAgICAgICAgIChGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0RhdGFMYXRlbmN5IDw8IDI0KSB8DQorICAgICAgICAgICAgICAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19BY2Nlc3NNb2RlOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBGU01DX0JhbmsxRS0+QldUUltGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX0JhbmtdID0gMHgwRkZGRkZGRjsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBGU01DX05PUlNSQU1Jbml0U3RydWN0IG1lbWJlciB3aXRoIGl0cyBkZWZhdWx0IHZhbHVlLg0KKyAgKiBAcGFyYW0gIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBGU01DX05PUlNSQU1Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgDQorICAqICAgICAgICAgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRlNNQ19OT1JTUkFNU3RydWN0SW5pdChGU01DX05PUlNSQU1Jbml0VHlwZURlZiogRlNNQ19OT1JTUkFNSW5pdFN0cnVjdCkNCit7ICANCisgIC8qIFJlc2V0IE5PUi9TUkFNIEluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzICovDQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX0JhbmsgPSBGU01DX0JhbmsxX05PUlNSQU0xOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19EYXRhQWRkcmVzc011eCA9IEZTTUNfRGF0YUFkZHJlc3NNdXhfRW5hYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19NZW1vcnlUeXBlID0gRlNNQ19NZW1vcnlUeXBlX1NSQU07DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX01lbW9yeURhdGFXaWR0aCA9IEZTTUNfTWVtb3J5RGF0YVdpZHRoXzhiOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19CdXJzdEFjY2Vzc01vZGUgPSBGU01DX0J1cnN0QWNjZXNzTW9kZV9EaXNhYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Bc3luY2hyb25vdXNXYWl0ID0gRlNNQ19Bc3luY2hyb25vdXNXYWl0X0Rpc2FibGU7DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dhaXRTaWduYWxQb2xhcml0eSA9IEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5X0xvdzsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JhcE1vZGUgPSBGU01DX1dyYXBNb2RlX0Rpc2FibGU7DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dhaXRTaWduYWxBY3RpdmUgPSBGU01DX1dhaXRTaWduYWxBY3RpdmVfQmVmb3JlV2FpdFN0YXRlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZU9wZXJhdGlvbiA9IEZTTUNfV3JpdGVPcGVyYXRpb25fRW5hYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19XYWl0U2lnbmFsID0gRlNNQ19XYWl0U2lnbmFsX0VuYWJsZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfRXh0ZW5kZWRNb2RlID0gRlNNQ19FeHRlbmRlZE1vZGVfRGlzYWJsZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVCdXJzdCA9IEZTTUNfV3JpdGVCdXJzdF9EaXNhYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQWRkcmVzc1NldHVwVGltZSA9IDB4RjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NIb2xkVGltZSA9IDB4RjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0RhdGFTZXR1cFRpbWUgPSAweEZGOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQnVzVHVybkFyb3VuZER1cmF0aW9uID0gMHhGOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQ0xLRGl2aXNpb24gPSAweEY7DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1JlYWRXcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19EYXRhTGF0ZW5jeSA9IDB4RjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfUmVhZFdyaXRlVGltaW5nU3RydWN0LT5GU01DX0FjY2Vzc01vZGUgPSBGU01DX0FjY2Vzc01vZGVfQTsgDQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NTZXR1cFRpbWUgPSAweEY7DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0FkZHJlc3NIb2xkVGltZSA9IDB4RjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfRGF0YVNldHVwVGltZSA9IDB4RkY7DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0J1c1R1cm5Bcm91bmREdXJhdGlvbiA9IDB4RjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QtPkZTTUNfV3JpdGVUaW1pbmdTdHJ1Y3QtPkZTTUNfQ0xLRGl2aXNpb24gPSAweEY7DQorICBGU01DX05PUlNSQU1Jbml0U3RydWN0LT5GU01DX1dyaXRlVGltaW5nU3RydWN0LT5GU01DX0RhdGFMYXRlbmN5ID0gMHhGOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdC0+RlNNQ19Xcml0ZVRpbWluZ1N0cnVjdC0+RlNNQ19BY2Nlc3NNb2RlID0gRlNNQ19BY2Nlc3NNb2RlX0E7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBOT1IvU1JBTSBNZW1vcnkgQmFuay4NCisgICogQHBhcmFtICBGU01DX0Jhbms6IHNwZWNpZmllcyB0aGUgRlNNQyBCYW5rIHRvIGJlIHVzZWQNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazFfTk9SU1JBTTE6IEZTTUMgQmFuazEgTk9SL1NSQU0xICANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazFfTk9SU1JBTTI6IEZTTUMgQmFuazEgTk9SL1NSQU0yIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19CYW5rMV9OT1JTUkFNMzogRlNNQyBCYW5rMSBOT1IvU1JBTTMgDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsxX05PUlNSQU00OiBGU01DIEJhbmsxIE5PUi9TUkFNNCANCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBGU01DX0JhbmsuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZTTUNfTk9SU1JBTUNtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19OT1JTUkFNX0JBTksoRlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBOT1IvU1JBTSBCYW5rIGJ5IHNldHRpbmcgdGhlIFBCS0VOIGJpdCBpbiB0aGUgQkNSeCByZWdpc3RlciAqLw0KKyAgICBGU01DX0JhbmsxLT5CVENSW0ZTTUNfQmFua10gfD0gQkNSX01CS0VOX1NFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgTk9SL1NSQU0gQmFuayBieSBjbGVhcmluZyB0aGUgUEJLRU4gYml0IGluIHRoZSBCQ1J4IHJlZ2lzdGVyICovDQorICAgIEZTTUNfQmFuazEtPkJUQ1JbRlNNQ19CYW5rXSAmPSBCQ1JfTUJLRU5fUkVTRVQ7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfR3JvdXAyIE5BTkQgQ29udHJvbGxlciBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgTkFORCBDb250cm9sbGVyIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICBOQU5EIENvbnRyb2xsZXIgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyBUaGUgZm9sbG93aW5nIHNlcXVlbmNlIHNob3VsZCBiZSBmb2xsb3dlZCB0byBjb25maWd1cmUgdGhlIEZTTUMgdG8gaW50ZXJmYWNlIHdpdGgNCisgOC1iaXQgb3IgMTYtYml0IE5BTkQgbWVtb3J5IGNvbm5lY3RlZCB0byB0aGUgTkFORCBCYW5rOg0KKyANCisgICAxLiBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgRlNNQyBhbmQgYXNzb2NpYXRlZCBHUElPcyB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAgICAgUkNDX0FIQjNQZXJpcGhDbG9ja0NtZChSQ0NfQUhCM1BlcmlwaF9GU01DLCBFTkFCTEUpOw0KKyAgICAgICAgICBSQ0NfQUhCMVBlcmlwaENsb2NrQ21kKFJDQ19BSEIxUGVyaXBoX0dQSU94LCBFTkFCTEUpOw0KKw0KKyAgIDIuIEZTTUMgcGlucyBjb25maWd1cmF0aW9uIA0KKyAgICAgICAtIENvbm5lY3QgdGhlIGludm9sdmVkIEZTTUMgcGlucyB0byBBRjEyIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gDQorICAgICAgICAgIEdQSU9fUGluQUZDb25maWcoR1BJT3gsIEdQSU9fUGluU291cmNleCwgR1BJT19BRl9GU01DKTsgDQorICAgICAgIC0gQ29uZmlndXJlIHRoZXNlIEZTTUMgcGlucyBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbg0KKyAgICAgICAgICBHUElPX0luaXQoKTsgICAgDQorICAgICAgIA0KKyAgIDMuIERlY2xhcmUgYSBGU01DX05BTkRJbml0VHlwZURlZiBzdHJ1Y3R1cmUsIGZvciBleGFtcGxlOg0KKyAgICAgICAgICBGU01DX05BTkRJbml0VHlwZURlZiAgRlNNQ19OQU5ESW5pdFN0cnVjdHVyZTsNCisgICAgICBhbmQgZmlsbCB0aGUgRlNNQ19OQU5ESW5pdFN0cnVjdHVyZSB2YXJpYWJsZSB3aXRoIHRoZSBhbGxvd2VkIHZhbHVlcyBvZg0KKyAgICAgIHRoZSBzdHJ1Y3R1cmUgbWVtYmVyLg0KKyAgICAgIA0KKyAgIDQuIEluaXRpYWxpemUgdGhlIE5BTkQgQ29udHJvbGxlciBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbg0KKyAgICAgICAgICBGU01DX05BTkRJbml0KCZGU01DX05BTkRJbml0U3RydWN0dXJlKTsgDQorDQorICAgNS4gVGhlbiBlbmFibGUgdGhlIE5BTkQgQmFuaywgZm9yIGV4YW1wbGU6DQorICAgICAgICAgIEZTTUNfTkFORENtZChGU01DX0JhbmszX05BTkQsIEVOQUJMRSk7ICANCisNCisgICA2LiBBdCB0aGlzIHN0YWdlIHlvdSBjYW4gcmVhZC93cml0ZSBmcm9tL3RvIHRoZSBtZW1vcnkgY29ubmVjdGVkIHRvIHRoZSBOQU5EIEJhbmsuIA0KKyAgIA0KK0Bub3RlIFRvIGVuYWJsZSB0aGUgRXJyb3IgQ29ycmVjdGlvbiBDb2RlIChFQ0MpLCB5b3UgaGF2ZSB0byB1c2UgdGhlIGZ1bmN0aW9uDQorICAgICAgICAgIEZTTUNfTkFOREVDQ0NtZChGU01DX0JhbmszX05BTkQsIEVOQUJMRSk7ICANCisgICAgICBhbmQgdG8gZ2V0IHRoZSBjdXJyZW50IEVDQyB2YWx1ZSB5b3UgaGF2ZSB0byB1c2UgdGhlIGZ1bmN0aW9uDQorICAgICAgICAgIEVDQ3ZhbCA9IEZTTUNfR2V0RUNDKEZTTUNfQmFuazNfTkFORCk7IA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgdGhlIEZTTUMgTkFORCBCYW5rcyByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuDQorICAqIEBwYXJhbSAgRlNNQ19CYW5rOiBzcGVjaWZpZXMgdGhlIEZTTUMgQmFuayB0byBiZSB1c2VkDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsyX05BTkQ6IEZTTUMgQmFuazIgTkFORCANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazNfTkFORDogRlNNQyBCYW5rMyBOQU5EIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGU01DX05BTkREZUluaXQodWludDMyX3QgRlNNQ19CYW5rKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXIgKi8NCisgIGFzc2VydF9wYXJhbShJU19GU01DX05BTkRfQkFOSyhGU01DX0JhbmspKTsNCisgIA0KKyAgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazJfTkFORCkNCisgIHsNCisgICAgLyogU2V0IHRoZSBGU01DX0JhbmsyIHJlZ2lzdGVycyB0byB0aGVpciByZXNldCB2YWx1ZXMgKi8NCisgICAgRlNNQ19CYW5rMi0+UENSMiA9IDB4MDAwMDAwMTg7DQorICAgIEZTTUNfQmFuazItPlNSMiA9IDB4MDAwMDAwNDA7DQorICAgIEZTTUNfQmFuazItPlBNRU0yID0gMHhGQ0ZDRkNGQzsNCisgICAgRlNNQ19CYW5rMi0+UEFUVDIgPSAweEZDRkNGQ0ZDOyAgDQorICB9DQorICAvKiBGU01DX0JhbmszX05BTkQgKi8gIA0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBTZXQgdGhlIEZTTUNfQmFuazMgcmVnaXN0ZXJzIHRvIHRoZWlyIHJlc2V0IHZhbHVlcyAqLw0KKyAgICBGU01DX0JhbmszLT5QQ1IzID0gMHgwMDAwMDAxODsNCisgICAgRlNNQ19CYW5rMy0+U1IzID0gMHgwMDAwMDA0MDsNCisgICAgRlNNQ19CYW5rMy0+UE1FTTMgPSAweEZDRkNGQ0ZDOw0KKyAgICBGU01DX0JhbmszLT5QQVRUMyA9IDB4RkNGQ0ZDRkM7IA0KKyAgfSAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBGU01DIE5BTkQgQmFua3MgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycw0KKyAgKiAgICAgICAgIGluIHRoZSBGU01DX05BTkRJbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIEZTTUNfTkFOREluaXRTdHJ1Y3QgOiBwb2ludGVyIHRvIGEgRlNNQ19OQU5ESW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQNCisgICogICAgICAgICBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIEZTTUMgTkFORCBzcGVjaWZpZWQgQmFua3MuICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRlNNQ19OQU5ESW5pdChGU01DX05BTkRJbml0VHlwZURlZiogRlNNQ19OQU5ESW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXBwY3IgPSAweDAwMDAwMDAwLCB0bXBwbWVtID0gMHgwMDAwMDAwMCwgdG1wcGF0dCA9IDB4MDAwMDAwMDA7IA0KKyAgICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oIElTX0ZTTUNfTkFORF9CQU5LKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQmFuaykpOw0KKyAgYXNzZXJ0X3BhcmFtKCBJU19GU01DX1dBSVRfRkVBVFVSRShGU01DX05BTkRJbml0U3RydWN0LT5GU01DX1dhaXRmZWF0dXJlKSk7DQorICBhc3NlcnRfcGFyYW0oIElTX0ZTTUNfTUVNT1JZX1dJRFRIKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfTWVtb3J5RGF0YVdpZHRoKSk7DQorICBhc3NlcnRfcGFyYW0oIElTX0ZTTUNfRUNDX1NUQVRFKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfRUNDKSk7DQorICBhc3NlcnRfcGFyYW0oIElTX0ZTTUNfRUNDUEFHRV9TSVpFKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfRUNDUGFnZVNpemUpKTsNCisgIGFzc2VydF9wYXJhbSggSVNfRlNNQ19UQ0xSX1RJTUUoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19UQ0xSU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oIElTX0ZTTUNfVEFSX1RJTUUoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19UQVJTZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX1NFVFVQX1RJTUUoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19TZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX1dBSVRfVElNRShGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX1dhaXRTZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0hPTERfVElNRShGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX0hvbGRTZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0hJWl9USU1FKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSGlaU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19TRVRVUF9USU1FKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19XQUlUX1RJTUUoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19XYWl0U2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19IT0xEX1RJTUUoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19ISVpfVElNRShGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0F0dHJpYnV0ZVNwYWNlVGltaW5nU3RydWN0LT5GU01DX0hpWlNldHVwVGltZSkpOw0KKyAgDQorICAvKiBTZXQgdGhlIHRtcHBjciB2YWx1ZSBhY2NvcmRpbmcgdG8gRlNNQ19OQU5ESW5pdFN0cnVjdCBwYXJhbWV0ZXJzICovDQorICB0bXBwY3IgPSAodWludDMyX3QpRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19XYWl0ZmVhdHVyZSB8DQorICAgICAgICAgICAgUENSX01FTU9SWVRZUEVfTkFORCB8DQorICAgICAgICAgICAgRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19NZW1vcnlEYXRhV2lkdGggfA0KKyAgICAgICAgICAgIEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfRUNDIHwNCisgICAgICAgICAgICBGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0VDQ1BhZ2VTaXplIHwNCisgICAgICAgICAgICAoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19UQ0xSU2V0dXBUaW1lIDw8IDkgKXwNCisgICAgICAgICAgICAoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19UQVJTZXR1cFRpbWUgPDwgMTMpOw0KKyAgICAgICAgICAgIA0KKyAgLyogU2V0IHRtcHBtZW0gdmFsdWUgYWNjb3JkaW5nIHRvIEZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3R1cmUgcGFyYW1ldGVycyAqLw0KKyAgdG1wcG1lbSA9ICh1aW50MzJfdClGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX1NldHVwVGltZSB8DQorICAgICAgICAgICAgKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfV2FpdFNldHVwVGltZSA8PCA4KSB8DQorICAgICAgICAgICAgKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSG9sZFNldHVwVGltZSA8PCAxNil8DQorICAgICAgICAgICAgKEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSGlaU2V0dXBUaW1lIDw8IDI0KTsgDQorICAgICAgICAgICAgDQorICAvKiBTZXQgdG1wcGF0dCB2YWx1ZSBhY2NvcmRpbmcgdG8gRlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdHVyZSBwYXJhbWV0ZXJzICovDQorICB0bXBwYXR0ID0gKHVpbnQzMl90KUZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lIHwNCisgICAgICAgICAgICAoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19XYWl0U2V0dXBUaW1lIDw8IDgpIHwNCisgICAgICAgICAgICAoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lIDw8IDE2KXwNCisgICAgICAgICAgICAoRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19IaVpTZXR1cFRpbWUgPDwgMjQpOw0KKyAgDQorICBpZihGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0JhbmsgPT0gRlNNQ19CYW5rMl9OQU5EKQ0KKyAgew0KKyAgICAvKiBGU01DX0JhbmsyX05BTkQgcmVnaXN0ZXJzIGNvbmZpZ3VyYXRpb24gKi8NCisgICAgRlNNQ19CYW5rMi0+UENSMiA9IHRtcHBjcjsNCisgICAgRlNNQ19CYW5rMi0+UE1FTTIgPSB0bXBwbWVtOw0KKyAgICBGU01DX0JhbmsyLT5QQVRUMiA9IHRtcHBhdHQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIEZTTUNfQmFuazNfTkFORCByZWdpc3RlcnMgY29uZmlndXJhdGlvbiAqLw0KKyAgICBGU01DX0JhbmszLT5QQ1IzID0gdG1wcGNyOw0KKyAgICBGU01DX0JhbmszLT5QTUVNMyA9IHRtcHBtZW07DQorICAgIEZTTUNfQmFuazMtPlBBVFQzID0gdG1wcGF0dDsNCisgIH0NCit9DQorDQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBGU01DX05BTkRJbml0U3RydWN0IG1lbWJlciB3aXRoIGl0cyBkZWZhdWx0IHZhbHVlLg0KKyAgKiBAcGFyYW0gIEZTTUNfTkFOREluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBGU01DX05BTkRJbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2gNCisgICogICAgICAgICB3aWxsIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGU01DX05BTkRTdHJ1Y3RJbml0KEZTTUNfTkFOREluaXRUeXBlRGVmKiBGU01DX05BTkRJbml0U3RydWN0KQ0KK3sgDQorICAvKiBSZXNldCBOQU5EIEluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzICovDQorICBGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0JhbmsgPSBGU01DX0JhbmsyX05BTkQ7DQorICBGU01DX05BTkRJbml0U3RydWN0LT5GU01DX1dhaXRmZWF0dXJlID0gRlNNQ19XYWl0ZmVhdHVyZV9EaXNhYmxlOw0KKyAgRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19NZW1vcnlEYXRhV2lkdGggPSBGU01DX01lbW9yeURhdGFXaWR0aF84YjsNCisgIEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfRUNDID0gRlNNQ19FQ0NfRGlzYWJsZTsNCisgIEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfRUNDUGFnZVNpemUgPSBGU01DX0VDQ1BhZ2VTaXplXzI1NkJ5dGVzOw0KKyAgRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19UQ0xSU2V0dXBUaW1lID0gMHgwOw0KKyAgRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19UQVJTZXR1cFRpbWUgPSAweDA7DQorICBGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX1NldHVwVGltZSA9IDB4RkM7DQorICBGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX1dhaXRTZXR1cFRpbWUgPSAweEZDOw0KKyAgRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSGlaU2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfTkFOREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfV2FpdFNldHVwVGltZSA9IDB4RkM7DQorICBGU01DX05BTkRJbml0U3RydWN0LT5GU01DX0F0dHJpYnV0ZVNwYWNlVGltaW5nU3RydWN0LT5GU01DX0hvbGRTZXR1cFRpbWUgPSAweEZDOw0KKyAgRlNNQ19OQU5ESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19IaVpTZXR1cFRpbWUgPSAweEZDOwkgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgTkFORCBNZW1vcnkgQmFuay4NCisgICogQHBhcmFtICBGU01DX0Jhbms6IHNwZWNpZmllcyB0aGUgRlNNQyBCYW5rIHRvIGJlIHVzZWQNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazJfTkFORDogRlNNQyBCYW5rMiBOQU5EIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19CYW5rM19OQU5EOiBGU01DIEJhbmszIE5BTkQNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBGU01DX0JhbmsuIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZTTUNfTkFORENtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19OQU5EX0JBTksoRlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBOQU5EIEJhbmsgYnkgc2V0dGluZyB0aGUgUEJLRU4gYml0IGluIHRoZSBQQ1J4IHJlZ2lzdGVyICovDQorICAgIGlmKEZTTUNfQmFuayA9PSBGU01DX0JhbmsyX05BTkQpDQorICAgIHsNCisgICAgICBGU01DX0JhbmsyLT5QQ1IyIHw9IFBDUl9QQktFTl9TRVQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgRlNNQ19CYW5rMy0+UENSMyB8PSBQQ1JfUEJLRU5fU0VUOw0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIE5BTkQgQmFuayBieSBjbGVhcmluZyB0aGUgUEJLRU4gYml0IGluIHRoZSBQQ1J4IHJlZ2lzdGVyICovDQorICAgIGlmKEZTTUNfQmFuayA9PSBGU01DX0JhbmsyX05BTkQpDQorICAgIHsNCisgICAgICBGU01DX0JhbmsyLT5QQ1IyICY9IFBDUl9QQktFTl9SRVNFVDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBGU01DX0JhbmszLT5QQ1IzICY9IFBDUl9QQktFTl9SRVNFVDsNCisgICAgfQ0KKyAgfQ0KK30NCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBGU01DIE5BTkQgRUNDIGZlYXR1cmUuDQorICAqIEBwYXJhbSAgRlNNQ19CYW5rOiBzcGVjaWZpZXMgdGhlIEZTTUMgQmFuayB0byBiZSB1c2VkDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsyX05BTkQ6IEZTTUMgQmFuazIgTkFORCANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazNfTkFORDogRlNNQyBCYW5rMyBOQU5EDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgRlNNQyBOQU5EIEVDQyBmZWF0dXJlLiAgDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZTTUNfTkFOREVDQ0NtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19OQU5EX0JBTksoRlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBOQU5EIEJhbmsgRUNDIGZ1bmN0aW9uIGJ5IHNldHRpbmcgdGhlIEVDQ0VOIGJpdCBpbiB0aGUgUENSeCByZWdpc3RlciAqLw0KKyAgICBpZihGU01DX0JhbmsgPT0gRlNNQ19CYW5rMl9OQU5EKQ0KKyAgICB7DQorICAgICAgRlNNQ19CYW5rMi0+UENSMiB8PSBQQ1JfRUNDRU5fU0VUOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIEZTTUNfQmFuazMtPlBDUjMgfD0gUENSX0VDQ0VOX1NFVDsNCisgICAgfQ0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBOQU5EIEJhbmsgRUNDIGZ1bmN0aW9uIGJ5IGNsZWFyaW5nIHRoZSBFQ0NFTiBiaXQgaW4gdGhlIFBDUnggcmVnaXN0ZXIgKi8NCisgICAgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazJfTkFORCkNCisgICAgew0KKyAgICAgIEZTTUNfQmFuazItPlBDUjIgJj0gUENSX0VDQ0VOX1JFU0VUOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIEZTTUNfQmFuazMtPlBDUjMgJj0gUENSX0VDQ0VOX1JFU0VUOw0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIGVycm9yIGNvcnJlY3Rpb24gY29kZSByZWdpc3RlciB2YWx1ZS4NCisgICogQHBhcmFtICBGU01DX0Jhbms6IHNwZWNpZmllcyB0aGUgRlNNQyBCYW5rIHRvIGJlIHVzZWQNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazJfTkFORDogRlNNQyBCYW5rMiBOQU5EIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19CYW5rM19OQU5EOiBGU01DIEJhbmszIE5BTkQNCisgICogQHJldHZhbCBUaGUgRXJyb3IgQ29ycmVjdGlvbiBDb2RlIChFQ0MpIHZhbHVlLg0KKyAgKi8NCit1aW50MzJfdCBGU01DX0dldEVDQyh1aW50MzJfdCBGU01DX0JhbmspDQorew0KKyAgdWludDMyX3QgZWNjdmFsID0gMHgwMDAwMDAwMDsNCisgIA0KKyAgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazJfTkFORCkNCisgIHsNCisgICAgLyogR2V0IHRoZSBFQ0NSMiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICBlY2N2YWwgPSBGU01DX0JhbmsyLT5FQ0NSMjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogR2V0IHRoZSBFQ0NSMyByZWdpc3RlciB2YWx1ZSAqLw0KKyAgICBlY2N2YWwgPSBGU01DX0JhbmszLT5FQ0NSMzsNCisgIH0NCisgIC8qIFJldHVybiB0aGUgZXJyb3IgY29ycmVjdGlvbiBjb2RlIHZhbHVlICovDQorICByZXR1cm4oZWNjdmFsKTsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgRlNNQ19Hcm91cDMgUENDQVJEIENvbnRyb2xsZXIgZnVuY3Rpb25zDQorICogIEBicmllZiAgIFBDQ0FSRCBDb250cm9sbGVyIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICBQQ0NBUkQgQ29udHJvbGxlciBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugc2hvdWxkIGJlIGZvbGxvd2VkIHRvIGNvbmZpZ3VyZSB0aGUgRlNNQyB0byBpbnRlcmZhY2Ugd2l0aA0KKyAxNi1iaXQgUEMgQ2FyZCBjb21wYXRpYmxlIG1lbW9yeSBjb25uZWN0ZWQgdG8gdGhlIFBDQ0FSRCBCYW5rOg0KKyANCisgICAxLiBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgRlNNQyBhbmQgYXNzb2NpYXRlZCBHUElPcyB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAgICAgUkNDX0FIQjNQZXJpcGhDbG9ja0NtZChSQ0NfQUhCM1BlcmlwaF9GU01DLCBFTkFCTEUpOw0KKyAgICAgICAgICBSQ0NfQUhCMVBlcmlwaENsb2NrQ21kKFJDQ19BSEIxUGVyaXBoX0dQSU94LCBFTkFCTEUpOw0KKw0KKyAgIDIuIEZTTUMgcGlucyBjb25maWd1cmF0aW9uIA0KKyAgICAgICAtIENvbm5lY3QgdGhlIGludm9sdmVkIEZTTUMgcGlucyB0byBBRjEyIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gDQorICAgICAgICAgIEdQSU9fUGluQUZDb25maWcoR1BJT3gsIEdQSU9fUGluU291cmNleCwgR1BJT19BRl9GU01DKTsgDQorICAgICAgIC0gQ29uZmlndXJlIHRoZXNlIEZTTUMgcGlucyBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBieSBjYWxsaW5nIHRoZSBmdW5jdGlvbg0KKyAgICAgICAgICBHUElPX0luaXQoKTsgICAgDQorICAgICAgIA0KKyAgIDMuIERlY2xhcmUgYSBGU01DX1BDQ0FSREluaXRUeXBlRGVmIHN0cnVjdHVyZSwgZm9yIGV4YW1wbGU6DQorICAgICAgICAgIEZTTUNfUENDQVJESW5pdFR5cGVEZWYgIEZTTUNfUENDQVJESW5pdFN0cnVjdHVyZTsNCisgICAgICBhbmQgZmlsbCB0aGUgRlNNQ19QQ0NBUkRJbml0U3RydWN0dXJlIHZhcmlhYmxlIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIG9mDQorICAgICAgdGhlIHN0cnVjdHVyZSBtZW1iZXIuDQorICAgICAgDQorICAgNC4gSW5pdGlhbGl6ZSB0aGUgUENDQVJEIENvbnRyb2xsZXIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24NCisgICAgICAgICAgRlNNQ19QQ0NBUkRJbml0KCZGU01DX1BDQ0FSREluaXRTdHJ1Y3R1cmUpOyANCisNCisgICA1LiBUaGVuIGVuYWJsZSB0aGUgUENDQVJEIEJhbms6DQorICAgICAgICAgIEZTTUNfUENDQVJEQ21kKEVOQUJMRSk7ICANCisNCisgICA2LiBBdCB0aGlzIHN0YWdlIHlvdSBjYW4gcmVhZC93cml0ZSBmcm9tL3RvIHRoZSBtZW1vcnkgY29ubmVjdGVkIHRvIHRoZSBQQ0NBUkQgQmFuay4gDQorIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBGU01DIFBDQ0FSRCBCYW5rIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4NCisgICogQHBhcmFtICBOb25lICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRlNNQ19QQ0NBUkREZUluaXQodm9pZCkNCit7DQorICAvKiBTZXQgdGhlIEZTTUNfQmFuazQgcmVnaXN0ZXJzIHRvIHRoZWlyIHJlc2V0IHZhbHVlcyAqLw0KKyAgRlNNQ19CYW5rNC0+UENSNCA9IDB4MDAwMDAwMTg7IA0KKyAgRlNNQ19CYW5rNC0+U1I0ID0gMHgwMDAwMDAwMDsJDQorICBGU01DX0Jhbms0LT5QTUVNNCA9IDB4RkNGQ0ZDRkM7DQorICBGU01DX0Jhbms0LT5QQVRUNCA9IDB4RkNGQ0ZDRkM7DQorICBGU01DX0Jhbms0LT5QSU80ID0gMHhGQ0ZDRkNGQzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIEZTTUMgUENDQVJEIEJhbmsgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycw0KKyAgKiAgICAgICAgIGluIHRoZSBGU01DX1BDQ0FSREluaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgRlNNQ19QQ0NBUkRJbml0U3RydWN0IDogcG9pbnRlciB0byBhIEZTTUNfUENDQVJESW5pdFR5cGVEZWYgc3RydWN0dXJlDQorICAqICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIEZTTUMgUENDQVJEIEJhbmsuICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRlNNQ19QQ0NBUkRJbml0KEZTTUNfUENDQVJESW5pdFR5cGVEZWYqIEZTTUNfUENDQVJESW5pdFN0cnVjdCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfV0FJVF9GRUFUVVJFKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19XYWl0ZmVhdHVyZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfVENMUl9USU1FKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19UQ0xSU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19UQVJfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfVEFSU2V0dXBUaW1lKSk7DQorIA0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfU0VUVVBfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19XQUlUX1RJTUUoRlNNQ19QQ0NBUkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX1dhaXRTZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0hPTERfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSG9sZFNldHVwVGltZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfSElaX1RJTUUoRlNNQ19QQ0NBUkRJbml0U3RydWN0LT5GU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0LT5GU01DX0hpWlNldHVwVGltZSkpOw0KKyAgDQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19TRVRVUF9USU1FKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19TZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX1dBSVRfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfV2FpdFNldHVwVGltZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfSE9MRF9USU1FKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19ISVpfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSGlaU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19TRVRVUF9USU1FKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19JT1NwYWNlVGltaW5nU3RydWN0LT5GU01DX1NldHVwVGltZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfV0FJVF9USU1FKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19JT1NwYWNlVGltaW5nU3RydWN0LT5GU01DX1dhaXRTZXR1cFRpbWUpKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0hPTERfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19ISVpfVElNRShGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19IaVpTZXR1cFRpbWUpKTsNCisgIA0KKyAgLyogU2V0IHRoZSBQQ1I0IHJlZ2lzdGVyIHZhbHVlIGFjY29yZGluZyB0byBGU01DX1BDQ0FSREluaXRTdHJ1Y3QgcGFyYW1ldGVycyAqLw0KKyAgRlNNQ19CYW5rNC0+UENSNCA9ICh1aW50MzJfdClGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfV2FpdGZlYXR1cmUgfA0KKyAgICAgICAgICAgICAgICAgICAgIEZTTUNfTWVtb3J5RGF0YVdpZHRoXzE2YiB8ICANCisgICAgICAgICAgICAgICAgICAgICAoRlNNQ19QQ0NBUkRJbml0U3RydWN0LT5GU01DX1RDTFJTZXR1cFRpbWUgPDwgOSkgfA0KKyAgICAgICAgICAgICAgICAgICAgIChGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfVEFSU2V0dXBUaW1lIDw8IDEzKTsNCisgICAgICAgICAgICANCisgIC8qIFNldCBQTUVNNCByZWdpc3RlciB2YWx1ZSBhY2NvcmRpbmcgdG8gRlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdHVyZSBwYXJhbWV0ZXJzICovDQorICBGU01DX0Jhbms0LT5QTUVNNCA9ICh1aW50MzJfdClGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lIHwNCisgICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19XYWl0U2V0dXBUaW1lIDw8IDgpIHwNCisgICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lIDw8IDE2KXwNCisgICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19IaVpTZXR1cFRpbWUgPDwgMjQpOyANCisgICAgICAgICAgICANCisgIC8qIFNldCBQQVRUNCByZWdpc3RlciB2YWx1ZSBhY2NvcmRpbmcgdG8gRlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdHVyZSBwYXJhbWV0ZXJzICovDQorICBGU01DX0Jhbms0LT5QQVRUNCA9ICh1aW50MzJfdClGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lIHwNCisgICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19XYWl0U2V0dXBUaW1lIDw8IDgpIHwNCisgICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lIDw8IDE2KXwNCisgICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19IaVpTZXR1cFRpbWUgPDwgMjQpOwkNCisgICAgICAgICAgICANCisgIC8qIFNldCBQSU80IHJlZ2lzdGVyIHZhbHVlIGFjY29yZGluZyB0byBGU01DX0lPU3BhY2VUaW1pbmdTdHJ1Y3R1cmUgcGFyYW1ldGVycyAqLw0KKyAgRlNNQ19CYW5rNC0+UElPNCA9ICh1aW50MzJfdClGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19TZXR1cFRpbWUgfA0KKyAgICAgICAgICAgICAgICAgICAgIChGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19XYWl0U2V0dXBUaW1lIDw8IDgpIHwNCisgICAgICAgICAgICAgICAgICAgICAoRlNNQ19QQ0NBUkRJbml0U3RydWN0LT5GU01DX0lPU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSG9sZFNldHVwVGltZSA8PCAxNil8DQorICAgICAgICAgICAgICAgICAgICAgKEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19JT1NwYWNlVGltaW5nU3RydWN0LT5GU01DX0hpWlNldHVwVGltZSA8PCAyNCk7ICAgICAgICAgICAgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIEZTTUNfUENDQVJESW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBGU01DX1BDQ0FSREluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBGU01DX1BDQ0FSREluaXRUeXBlRGVmIHN0cnVjdHVyZQ0KKyAgKiAgICAgICAgIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEZTTUNfUENDQVJEU3RydWN0SW5pdChGU01DX1BDQ0FSREluaXRUeXBlRGVmKiBGU01DX1BDQ0FSREluaXRTdHJ1Y3QpDQorew0KKyAgLyogUmVzZXQgUENDQVJEIEluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzICovDQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfV2FpdGZlYXR1cmUgPSBGU01DX1dhaXRmZWF0dXJlX0Rpc2FibGU7DQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfVENMUlNldHVwVGltZSA9IDB4MDsNCisgIEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19UQVJTZXR1cFRpbWUgPSAweDA7DQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfU2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19XYWl0U2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19Db21tb25TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19IaVpTZXR1cFRpbWUgPSAweEZDOw0KKyAgRlNNQ19QQ0NBUkRJbml0U3RydWN0LT5GU01DX0F0dHJpYnV0ZVNwYWNlVGltaW5nU3RydWN0LT5GU01DX1NldHVwVGltZSA9IDB4RkM7DQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfV2FpdFNldHVwVGltZSA9IDB4RkM7DQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSG9sZFNldHVwVGltZSA9IDB4RkM7DQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfSGlaU2V0dXBUaW1lID0gMHhGQzsJDQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19TZXR1cFRpbWUgPSAweEZDOw0KKyAgRlNNQ19QQ0NBUkRJbml0U3RydWN0LT5GU01DX0lPU3BhY2VUaW1pbmdTdHJ1Y3QtPkZTTUNfV2FpdFNldHVwVGltZSA9IDB4RkM7DQorICBGU01DX1BDQ0FSREluaXRTdHJ1Y3QtPkZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdC0+RlNNQ19Ib2xkU2V0dXBUaW1lID0gMHhGQzsNCisgIEZTTUNfUENDQVJESW5pdFN0cnVjdC0+RlNNQ19JT1NwYWNlVGltaW5nU3RydWN0LT5GU01DX0hpWlNldHVwVGltZSA9IDB4RkM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFBDQ0FSRCBNZW1vcnkgQmFuay4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBQQ0NBUkQgTWVtb3J5IEJhbmsuICANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRlNNQ19QQ0NBUkRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIFBDQ0FSRCBCYW5rIGJ5IHNldHRpbmcgdGhlIFBCS0VOIGJpdCBpbiB0aGUgUENSNCByZWdpc3RlciAqLw0KKyAgICBGU01DX0Jhbms0LT5QQ1I0IHw9IFBDUl9QQktFTl9TRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFBDQ0FSRCBCYW5rIGJ5IGNsZWFyaW5nIHRoZSBQQktFTiBiaXQgaW4gdGhlIFBDUjQgcmVnaXN0ZXIgKi8NCisgICAgRlNNQ19CYW5rNC0+UENSNCAmPSBQQ1JfUEJLRU5fUkVTRVQ7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEZTTUNfR3JvdXA0ICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBGU01DIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgRlNNQ19CYW5rOiBzcGVjaWZpZXMgdGhlIEZTTUMgQmFuayB0byBiZSB1c2VkDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsyX05BTkQ6IEZTTUMgQmFuazIgTkFORCANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazNfTkFORDogRlNNQyBCYW5rMyBOQU5EDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0Jhbms0X1BDQ0FSRDogRlNNQyBCYW5rNCBQQ0NBUkQNCisgICogQHBhcmFtICBGU01DX0lUOiBzcGVjaWZpZXMgdGhlIEZTTUMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfSVRfUmlzaW5nRWRnZTogUmlzaW5nIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdC4gDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0lUX0xldmVsOiBMZXZlbCBlZGdlIGRldGVjdGlvbiBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0lUX0ZhbGxpbmdFZGdlOiBGYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgRlNNQyBpbnRlcnJ1cHRzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGU01DX0lUQ29uZmlnKHVpbnQzMl90IEZTTUNfQmFuaywgdWludDMyX3QgRlNNQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0lUX0JBTksoRlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19JVChGU01DX0lUKSk7CQ0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgRlNNQ19CYW5rMiBpbnRlcnJ1cHRzICovDQorICAgIGlmKEZTTUNfQmFuayA9PSBGU01DX0JhbmsyX05BTkQpDQorICAgIHsNCisgICAgICBGU01DX0JhbmsyLT5TUjIgfD0gRlNNQ19JVDsNCisgICAgfQ0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEZTTUNfQmFuazMgaW50ZXJydXB0cyAqLw0KKyAgICBlbHNlIGlmIChGU01DX0JhbmsgPT0gRlNNQ19CYW5rM19OQU5EKQ0KKyAgICB7DQorICAgICAgRlNNQ19CYW5rMy0+U1IzIHw9IEZTTUNfSVQ7DQorICAgIH0NCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBGU01DX0Jhbms0IGludGVycnVwdHMgKi8NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgRlNNQ19CYW5rNC0+U1I0IHw9IEZTTUNfSVQ7ICAgIA0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEZTTUNfQmFuazIgaW50ZXJydXB0cyAqLw0KKyAgICBpZihGU01DX0JhbmsgPT0gRlNNQ19CYW5rMl9OQU5EKQ0KKyAgICB7DQorICAgICAgDQorICAgICAgRlNNQ19CYW5rMi0+U1IyICY9ICh1aW50MzJfdCl+RlNNQ19JVDsNCisgICAgfQ0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBGU01DX0JhbmszIGludGVycnVwdHMgKi8NCisgICAgZWxzZSBpZiAoRlNNQ19CYW5rID09IEZTTUNfQmFuazNfTkFORCkNCisgICAgew0KKyAgICAgIEZTTUNfQmFuazMtPlNSMyAmPSAodWludDMyX3QpfkZTTUNfSVQ7DQorICAgIH0NCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgRlNNQ19CYW5rNCBpbnRlcnJ1cHRzICovDQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIEZTTUNfQmFuazQtPlNSNCAmPSAodWludDMyX3QpfkZTTUNfSVQ7ICAgIA0KKyAgICB9DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRlNNQyBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgRlNNQ19CYW5rOiBzcGVjaWZpZXMgdGhlIEZTTUMgQmFuayB0byBiZSB1c2VkDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsyX05BTkQ6IEZTTUMgQmFuazIgTkFORCANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazNfTkFORDogRlNNQyBCYW5rMyBOQU5EDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0Jhbms0X1BDQ0FSRDogRlNNQyBCYW5rNCBQQ0NBUkQNCisgICogQHBhcmFtICBGU01DX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfRkxBR19SaXNpbmdFZGdlOiBSaXNpbmcgZWRnZSBkZXRlY3Rpb24gRmxhZy4NCisgICogICAgICAgICAgICBAYXJnIEZTTUNfRkxBR19MZXZlbDogTGV2ZWwgZGV0ZWN0aW9uIEZsYWcuDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0ZMQUdfRmFsbGluZ0VkZ2U6IEZhbGxpbmcgZWRnZSBkZXRlY3Rpb24gRmxhZy4NCisgICogICAgICAgICAgICBAYXJnIEZTTUNfRkxBR19GRU1QVDogRmlmbyBlbXB0eSBGbGFnLiANCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEZTTUNfRkxBRyAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorRmxhZ1N0YXR1cyBGU01DX0dldEZsYWdTdGF0dXModWludDMyX3QgRlNNQ19CYW5rLCB1aW50MzJfdCBGU01DX0ZMQUcpDQorew0KKyAgRmxhZ1N0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIHVpbnQzMl90IHRtcHNyID0gMHgwMDAwMDAwMDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GU01DX0dFVEZMQUdfQkFOSyhGU01DX0JhbmspKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0dFVF9GTEFHKEZTTUNfRkxBRykpOw0KKyAgDQorICBpZihGU01DX0JhbmsgPT0gRlNNQ19CYW5rMl9OQU5EKQ0KKyAgew0KKyAgICB0bXBzciA9IEZTTUNfQmFuazItPlNSMjsNCisgIH0gIA0KKyAgZWxzZSBpZihGU01DX0JhbmsgPT0gRlNNQ19CYW5rM19OQU5EKQ0KKyAgew0KKyAgICB0bXBzciA9IEZTTUNfQmFuazMtPlNSMzsNCisgIH0NCisgIC8qIEZTTUNfQmFuazRfUENDQVJEKi8NCisgIGVsc2UNCisgIHsNCisgICAgdG1wc3IgPSBGU01DX0Jhbms0LT5TUjQ7DQorICB9IA0KKyAgDQorICAvKiBHZXQgdGhlIGZsYWcgc3RhdHVzICovDQorICBpZiAoKHRtcHNyICYgRlNNQ19GTEFHKSAhPSAodWludDE2X3QpUkVTRVQgKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBmbGFnIHN0YXR1cyAqLw0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBGU01DJ3MgcGVuZGluZyBmbGFncy4NCisgICogQHBhcmFtICBGU01DX0Jhbms6IHNwZWNpZmllcyB0aGUgRlNNQyBCYW5rIHRvIGJlIHVzZWQNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazJfTkFORDogRlNNQyBCYW5rMiBOQU5EIA0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19CYW5rM19OQU5EOiBGU01DIEJhbmszIE5BTkQNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazRfUENDQVJEOiBGU01DIEJhbms0IFBDQ0FSRA0KKyAgKiBAcGFyYW0gIEZTTUNfRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNsZWFyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19GTEFHX1Jpc2luZ0VkZ2U6IFJpc2luZyBlZGdlIGRldGVjdGlvbiBGbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgRlNNQ19GTEFHX0xldmVsOiBMZXZlbCBkZXRlY3Rpb24gRmxhZy4NCisgICogICAgICAgICAgICBAYXJnIEZTTUNfRkxBR19GYWxsaW5nRWRnZTogRmFsbGluZyBlZGdlIGRldGVjdGlvbiBGbGFnLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBGU01DX0NsZWFyRmxhZyh1aW50MzJfdCBGU01DX0JhbmssIHVpbnQzMl90IEZTTUNfRkxBRykNCit7DQorIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19HRVRGTEFHX0JBTksoRlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19DTEVBUl9GTEFHKEZTTUNfRkxBRykpIDsNCisgICAgDQorICBpZihGU01DX0JhbmsgPT0gRlNNQ19CYW5rMl9OQU5EKQ0KKyAgew0KKyAgICBGU01DX0JhbmsyLT5TUjIgJj0gfkZTTUNfRkxBRzsgDQorICB9ICANCisgIGVsc2UgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazNfTkFORCkNCisgIHsNCisgICAgRlNNQ19CYW5rMy0+U1IzICY9IH5GU01DX0ZMQUc7DQorICB9DQorICAvKiBGU01DX0Jhbms0X1BDQ0FSRCovDQorICBlbHNlDQorICB7DQorICAgIEZTTUNfQmFuazQtPlNSNCAmPSB+RlNNQ19GTEFHOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZTTUMgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuDQorICAqIEBwYXJhbSAgRlNNQ19CYW5rOiBzcGVjaWZpZXMgdGhlIEZTTUMgQmFuayB0byBiZSB1c2VkDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsyX05BTkQ6IEZTTUMgQmFuazIgTkFORCANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazNfTkFORDogRlNNQyBCYW5rMyBOQU5EDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0Jhbms0X1BDQ0FSRDogRlNNQyBCYW5rNCBQQ0NBUkQNCisgICogQHBhcmFtICBGU01DX0lUOiBzcGVjaWZpZXMgdGhlIEZTTUMgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfSVRfUmlzaW5nRWRnZTogUmlzaW5nIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdC4gDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0lUX0xldmVsOiBMZXZlbCBlZGdlIGRldGVjdGlvbiBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0lUX0ZhbGxpbmdFZGdlOiBGYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdC4gDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBGU01DX0lUIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBGU01DX0dldElUU3RhdHVzKHVpbnQzMl90IEZTTUNfQmFuaywgdWludDMyX3QgRlNNQ19JVCkNCit7DQorICBJVFN0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIHVpbnQzMl90IHRtcHNyID0gMHgwLCBpdHN0YXR1cyA9IDB4MCwgaXRlbmFibGUgPSAweDA7IA0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZTTUNfSVRfQkFOSyhGU01DX0JhbmspKTsNCisgIGFzc2VydF9wYXJhbShJU19GU01DX0dFVF9JVChGU01DX0lUKSk7DQorICANCisgIGlmKEZTTUNfQmFuayA9PSBGU01DX0JhbmsyX05BTkQpDQorICB7DQorICAgIHRtcHNyID0gRlNNQ19CYW5rMi0+U1IyOw0KKyAgfSAgDQorICBlbHNlIGlmKEZTTUNfQmFuayA9PSBGU01DX0JhbmszX05BTkQpDQorICB7DQorICAgIHRtcHNyID0gRlNNQ19CYW5rMy0+U1IzOw0KKyAgfQ0KKyAgLyogRlNNQ19CYW5rNF9QQ0NBUkQqLw0KKyAgZWxzZQ0KKyAgew0KKyAgICB0bXBzciA9IEZTTUNfQmFuazQtPlNSNDsNCisgIH0gDQorICANCisgIGl0c3RhdHVzID0gdG1wc3IgJiBGU01DX0lUOw0KKyAgDQorICBpdGVuYWJsZSA9IHRtcHNyICYgKEZTTUNfSVQgPj4gMyk7DQorICBpZiAoKGl0c3RhdHVzICE9ICh1aW50MzJfdClSRVNFVCkgICYmIChpdGVuYWJsZSAhPSAodWludDMyX3QpUkVTRVQpKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgRlNNQydzIGludGVycnVwdCBwZW5kaW5nIGJpdHMuDQorICAqIEBwYXJhbSAgRlNNQ19CYW5rOiBzcGVjaWZpZXMgdGhlIEZTTUMgQmFuayB0byBiZSB1c2VkDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0JhbmsyX05BTkQ6IEZTTUMgQmFuazIgTkFORCANCisgICogICAgICAgICAgICBAYXJnIEZTTUNfQmFuazNfTkFORDogRlNNQyBCYW5rMyBOQU5EDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0Jhbms0X1BDQ0FSRDogRlNNQyBCYW5rNCBQQ0NBUkQNCisgICogQHBhcmFtICBGU01DX0lUOiBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEZTTUNfSVRfUmlzaW5nRWRnZTogUmlzaW5nIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdC4gDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0lUX0xldmVsOiBMZXZlbCBlZGdlIGRldGVjdGlvbiBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBGU01DX0lUX0ZhbGxpbmdFZGdlOiBGYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uIGludGVycnVwdC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgRlNNQ19DbGVhcklUUGVuZGluZ0JpdCh1aW50MzJfdCBGU01DX0JhbmssIHVpbnQzMl90IEZTTUNfSVQpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GU01DX0lUX0JBTksoRlNNQ19CYW5rKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlNNQ19JVChGU01DX0lUKSk7DQorICAgIA0KKyAgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazJfTkFORCkNCisgIHsNCisgICAgRlNNQ19CYW5rMi0+U1IyICY9IH4oRlNNQ19JVCA+PiAzKTsgDQorICB9ICANCisgIGVsc2UgaWYoRlNNQ19CYW5rID09IEZTTUNfQmFuazNfTkFORCkNCisgIHsNCisgICAgRlNNQ19CYW5rMy0+U1IzICY9IH4oRlNNQ19JVCA+PiAzKTsNCisgIH0NCisgIC8qIEZTTUNfQmFuazRfUENDQVJEKi8NCisgIGVsc2UNCisgIHsNCisgICAgRlNNQ19CYW5rNC0+U1I0ICY9IH4oRlNNQ19JVCA+PiAzKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2dwaW8uYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZjhkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2dwaW8uYwpAQCAtMCwwICsxLDU2NiBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2dwaW8uYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBHUElPIHBlcmlwaGVyYWw6ICAgICAgICAgICANCisgICogICAgICAgICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gR1BJTyBSZWFkIGFuZCBXcml0ZQ0KKyAgKiAgICAgICAgICAgLSBHUElPIEFsdGVybmF0ZSBmdW5jdGlvbnMgY29uZmlndXJhdGlvbg0KKyAgKiANCisgICogIEB2ZXJiYXRpbQ0KKyAgKg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgIA0KKyAgKiAgICAgICAgICAgMS4gRW5hYmxlIHRoZSBHUElPIEFIQiBjbG9jayB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgIFJDQ19BSEIxUGVyaXBoQ2xvY2tDbWQoUkNDX0FIQjFQZXJpcGhfR1BJT3gsIEVOQUJMRSk7DQorICAqICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgMi4gQ29uZmlndXJlIHRoZSBHUElPIHBpbihzKSB1c2luZyBHUElPX0luaXQoKQ0KKyAgKiAgICAgICAgICAgICAgRm91ciBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGFyZSBhdmFpbGFibGUgZm9yIGVhY2ggcGluOg0KKyAgKiAgICAgICAgICAgICAgICAtIElucHV0OiBGbG9hdGluZywgUHVsbC11cCwgUHVsbC1kb3duLg0KKyAgKiAgICAgICAgICAgICAgICAtIE91dHB1dDogUHVzaC1QdWxsIChQdWxsLXVwLCBQdWxsLWRvd24gb3Igbm8gUHVsbCkNCisgICogICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gRHJhaW4gKFB1bGwtdXAsIFB1bGwtZG93biBvciBubyBQdWxsKS4NCisgICogICAgICAgICAgICAgICAgICBJbiBvdXRwdXQgbW9kZSwgdGhlIHNwZWVkIGlzIGNvbmZpZ3VyYWJsZTogMiBNSHosIDI1IE1IeiwNCisgICogICAgICAgICAgICAgICAgICA1MCBNSHogb3IgMTAwIE1Iei4NCisgICogICAgICAgICAgICAgICAgLSBBbHRlcm5hdGUgRnVuY3Rpb246IFB1c2gtUHVsbCAoUHVsbC11cCwgUHVsbC1kb3duIG9yIG5vIFB1bGwpDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluIChQdWxsLXVwLCBQdWxsLWRvd24gb3Igbm8gUHVsbCkuDQorICAqICAgICAgICAgICAgICAgIC0gQW5hbG9nOiByZXF1aXJlZCBtb2RlIHdoZW4gYSBwaW4gaXMgdG8gYmUgdXNlZCBhcyBBREMgY2hhbm5lbA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgREFDIG91dHB1dC4NCisgICogDQorICAqICAgICAgICAgIDMtIFBlcmlwaGVyYWxzIGFsdGVybmF0ZSBmdW5jdGlvbjoNCisgICogICAgICAgICAgICAgIC0gRm9yIEFEQyBhbmQgREFDLCBjb25maWd1cmUgdGhlIGRlc2lyZWQgcGluIGluIGFuYWxvZyBtb2RlIHVzaW5nIA0KKyAgKiAgICAgICAgICAgICAgICAgIEdQSU9fSW5pdFN0cnVjdC0+R1BJT19Nb2RlID0gR1BJT19Nb2RlX0FOOw0KKyAgKiAgICAgICAgICAgICAgLSBGb3Igb3RoZXIgcGVyaXBoZXJhbHMgKFRJTSwgVVNBUlQuLi4pOg0KKyAgKiAgICAgICAgICAgICAgICAgLSBDb25uZWN0IHRoZSBwaW4gdG8gdGhlIGRlc2lyZWQgcGVyaXBoZXJhbHMnIEFsdGVybmF0ZSANCisgICogICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gKEFGKSB1c2luZyBHUElPX1BpbkFGQ29uZmlnKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBkZXNpcmVkIHBpbiBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSB1c2luZw0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX0luaXRTdHJ1Y3QtPkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BRg0KKyAgKiAgICAgICAgICAgICAgICAgLSBTZWxlY3QgdGhlIHR5cGUsIHB1bGwtdXAvcHVsbC1kb3duIGFuZCBvdXRwdXQgc3BlZWQgdmlhIA0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX1B1UGQsIEdQSU9fT1R5cGUgYW5kIEdQSU9fU3BlZWQgbWVtYmVycw0KKyAgKiAgICAgICAgICAgICAgICAgLSBDYWxsIEdQSU9fSW5pdCgpIGZ1bmN0aW9uDQorICAqICAgICAgICANCisgICogICAgICAgICAgNC4gVG8gZ2V0IHRoZSBsZXZlbCBvZiBhIHBpbiBjb25maWd1cmVkIGluIGlucHV0IG1vZGUgdXNlIEdQSU9fUmVhZElucHV0RGF0YUJpdCgpDQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICA1LiBUbyBzZXQvcmVzZXQgdGhlIGxldmVsIG9mIGEgcGluIGNvbmZpZ3VyZWQgaW4gb3V0cHV0IG1vZGUgdXNlDQorICAqICAgICAgICAgICAgIEdQSU9fU2V0Qml0cygpL0dQSU9fUmVzZXRCaXRzKCkNCisgICogICAgICAgICAgICAgICANCisgICogICAgICAgICAgNi4gRHVyaW5nIGFuZCBqdXN0IGFmdGVyIHJlc2V0LCB0aGUgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBhcmUgbm90IA0KKyAgKiAgICAgICAgICAgICBhY3RpdmUgYW5kIHRoZSBHUElPIHBpbnMgYXJlIGNvbmZpZ3VyZWQgaW4gaW5wdXQgZmxvYXRpbmcgbW9kZQ0KKyAgKiAgICAgICAgICAgICAoZXhjZXB0IEpUQUcgcGlucykuDQorICAqDQorICAqICAgICAgICAgIDcuIFRoZSBMU0Ugb3NjaWxsYXRvciBwaW5zIE9TQzMyX0lOIGFuZCBPU0MzMl9PVVQgY2FuIGJlIHVzZWQgYXMgDQorICAqICAgICAgICAgICAgIGdlbmVyYWwtcHVycG9zZSAoUEMxNCBhbmQgUEMxNSwgcmVzcGVjdGl2ZWx5KSB3aGVuIHRoZSBMU0UNCisgICogICAgICAgICAgICAgb3NjaWxsYXRvciBpcyBvZmYuIFRoZSBMU0UgaGFzIHByaW9yaXR5IG92ZXIgdGhlIEdQSU8gZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDguIFRoZSBIU0Ugb3NjaWxsYXRvciBwaW5zIE9TQ19JTi9PU0NfT1VUIGNhbiBiZSB1c2VkIGFzIA0KKyAgKiAgICAgICAgICAgICBnZW5lcmFsLXB1cnBvc2UgUEgwIGFuZCBQSDEsIHJlc3BlY3RpdmVseSwgd2hlbiB0aGUgSFNFIA0KKyAgKiAgICAgICAgICAgICBvc2NpbGxhdG9yIGlzIG9mZi4gVGhlIEhTRSBoYXMgcHJpb3JpdHkgb3ZlciB0aGUgR1BJTyBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgDQorICAqICBAZW5kdmVyYmF0aW0gICAgICAgIA0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2dwaW8uaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEdQSU8gDQorICAqIEBicmllZiBHUElPIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLyANCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIEdQSU9fUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgR1BJT19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgKiAgQGJyaWVmICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgdGhlIEdQSU94IHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAbm90ZSAgIEJ5IGRlZmF1bHQsIFRoZSBHUElPIHBpbnMgYXJlIGNvbmZpZ3VyZWQgaW4gaW5wdXQgZmxvYXRpbmcgbW9kZSAoZXhjZXB0IEpUQUcgcGlucykuDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgR1BJT19EZUluaXQoR1BJT19UeXBlRGVmKiBHUElPeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKw0KKyAgaWYgKEdQSU94ID09IEdQSU9BKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9BLCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9BLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9CKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9CLCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9CLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9DKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9DLCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9DLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9EKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9ELCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9ELCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9FKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9FLCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9FLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9GKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9GLCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9GLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9HKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9HLCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9HLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKEdQSU94ID09IEdQSU9IKQ0KKyAgew0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9ILCBFTkFCTEUpOw0KKyAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9ILCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgaWYgKEdQSU94ID09IEdQSU9JKQ0KKyAgICB7DQorICAgICAgUkNDX0FIQjFQZXJpcGhSZXNldENtZChSQ0NfQUhCMVBlcmlwaF9HUElPSSwgRU5BQkxFKTsNCisgICAgICBSQ0NfQUhCMVBlcmlwaFJlc2V0Q21kKFJDQ19BSEIxUGVyaXBoX0dQSU9JLCBESVNBQkxFKTsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgR1BJT3ggcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGluIHRoZSBHUElPX0luaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBHUElPX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBHUElPX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgR1BJTyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBHUElPX0luaXQoR1BJT19UeXBlRGVmKiBHUElPeCwgR1BJT19Jbml0VHlwZURlZiogR1BJT19Jbml0U3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHBpbnBvcyA9IDB4MDAsIHBvcyA9IDB4MDAgLCBjdXJyZW50cGluID0gMHgwMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BTExfUEVSSVBIKEdQSU94KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfR1BJT19QSU4oR1BJT19Jbml0U3RydWN0LT5HUElPX1BpbikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fTU9ERShHUElPX0luaXRTdHJ1Y3QtPkdQSU9fTW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fUFVQRChHUElPX0luaXRTdHJ1Y3QtPkdQSU9fUHVQZCkpOw0KKw0KKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNvbmZpZ3VyZSB0aGUgcG9ydCBwaW5zLS0tLS0tLS0tLS0tLS0tLSAqLw0KKyAgLyotLSBHUElPIE1vZGUgQ29uZmlndXJhdGlvbiAtLSovDQorICBmb3IgKHBpbnBvcyA9IDB4MDA7IHBpbnBvcyA8IDB4MTA7IHBpbnBvcysrKQ0KKyAgew0KKyAgICBwb3MgPSAoKHVpbnQzMl90KTB4MDEpIDw8IHBpbnBvczsNCisgICAgLyogR2V0IHRoZSBwb3J0IHBpbnMgcG9zaXRpb24gKi8NCisgICAgY3VycmVudHBpbiA9IChHUElPX0luaXRTdHJ1Y3QtPkdQSU9fUGluKSAmIHBvczsNCisNCisgICAgaWYgKGN1cnJlbnRwaW4gPT0gcG9zKQ0KKyAgICB7DQorICAgICAgR1BJT3gtPk1PREVSICAmPSB+KEdQSU9fTU9ERVJfTU9ERVIwIDw8IChwaW5wb3MgKiAyKSk7DQorICAgICAgR1BJT3gtPk1PREVSIHw9ICgoKHVpbnQzMl90KUdQSU9fSW5pdFN0cnVjdC0+R1BJT19Nb2RlKSA8PCAocGlucG9zICogMikpOw0KKw0KKyAgICAgIGlmICgoR1BJT19Jbml0U3RydWN0LT5HUElPX01vZGUgPT0gR1BJT19Nb2RlX09VVCkgfHwgKEdQSU9fSW5pdFN0cnVjdC0+R1BJT19Nb2RlID09IEdQSU9fTW9kZV9BRikpDQorICAgICAgew0KKyAgICAgICAgLyogQ2hlY2sgU3BlZWQgbW9kZSBwYXJhbWV0ZXJzICovDQorICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19TUEVFRChHUElPX0luaXRTdHJ1Y3QtPkdQSU9fU3BlZWQpKTsNCisNCisgICAgICAgIC8qIFNwZWVkIG1vZGUgY29uZmlndXJhdGlvbiAqLw0KKyAgICAgICAgR1BJT3gtPk9TUEVFRFIgJj0gfihHUElPX09TUEVFREVSX09TUEVFRFIwIDw8IChwaW5wb3MgKiAyKSk7DQorICAgICAgICBHUElPeC0+T1NQRUVEUiB8PSAoKHVpbnQzMl90KShHUElPX0luaXRTdHJ1Y3QtPkdQSU9fU3BlZWQpIDw8IChwaW5wb3MgKiAyKSk7DQorDQorICAgICAgICAvKiBDaGVjayBPdXRwdXQgbW9kZSBwYXJhbWV0ZXJzICovDQorICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19PVFlQRShHUElPX0luaXRTdHJ1Y3QtPkdQSU9fT1R5cGUpKTsNCisNCisgICAgICAgIC8qIE91dHB1dCBtb2RlIGNvbmZpZ3VyYXRpb24qLw0KKyAgICAgICAgR1BJT3gtPk9UWVBFUiAgJj0gfigoR1BJT19PVFlQRVJfT1RfMCkgPDwgKCh1aW50MTZfdClwaW5wb3MpKSA7DQorICAgICAgICBHUElPeC0+T1RZUEVSIHw9ICh1aW50MTZfdCkoKCh1aW50MTZfdClHUElPX0luaXRTdHJ1Y3QtPkdQSU9fT1R5cGUpIDw8ICgodWludDE2X3QpcGlucG9zKSk7DQorICAgICAgfQ0KKw0KKyAgICAgIC8qIFB1bGwtdXAgUHVsbCBkb3duIHJlc2lzdG9yIGNvbmZpZ3VyYXRpb24qLw0KKyAgICAgIEdQSU94LT5QVVBEUiAmPSB+KEdQSU9fUFVQRFJfUFVQRFIwIDw8ICgodWludDE2X3QpcGlucG9zICogMikpOw0KKyAgICAgIEdQSU94LT5QVVBEUiB8PSAoKCh1aW50MzJfdClHUElPX0luaXRTdHJ1Y3QtPkdQSU9fUHVQZCkgPDwgKHBpbnBvcyAqIDIpKTsNCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIEdQSU9fSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBHUElPX0luaXRTdHJ1Y3QgOiBwb2ludGVyIHRvIGEgR1BJT19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgR1BJT19TdHJ1Y3RJbml0KEdQSU9fSW5pdFR5cGVEZWYqIEdQSU9fSW5pdFN0cnVjdCkNCit7DQorICAvKiBSZXNldCBHUElPIGluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzICovDQorICBHUElPX0luaXRTdHJ1Y3QtPkdQSU9fUGluICA9IEdQSU9fUGluX0FsbDsNCisgIEdQSU9fSW5pdFN0cnVjdC0+R1BJT19Nb2RlID0gR1BJT19Nb2RlX0lOOw0KKyAgR1BJT19Jbml0U3RydWN0LT5HUElPX1NwZWVkID0gR1BJT19TcGVlZF8yTUh6Ow0KKyAgR1BJT19Jbml0U3RydWN0LT5HUElPX09UeXBlID0gR1BJT19PVHlwZV9QUDsNCisgIEdQSU9fSW5pdFN0cnVjdC0+R1BJT19QdVBkID0gR1BJT19QdVBkX05PUFVMTDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgTG9ja3MgR1BJTyBQaW5zIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLg0KKyAgKiBAbm90ZSAgIFRoZSBsb2NrZWQgcmVnaXN0ZXJzIGFyZSBHUElPeF9NT0RFUiwgR1BJT3hfT1RZUEVSLCBHUElPeF9PU1BFRURSLA0KKyAgKiAgICAgICAgIEdQSU94X1BVUERSLCBHUElPeF9BRlJMIGFuZCBHUElPeF9BRlJILg0KKyAgKiBAbm90ZSAgIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBsb2NrZWQgR1BJTyBwaW5zIGNhbiBubyBsb25nZXIgYmUgbW9kaWZpZWQNCisgICogICAgICAgICB1bnRpbCB0aGUgbmV4dCByZXNldC4NCisgICogQHBhcmFtICBHUElPeDogd2hlcmUgeCBjYW4gYmUgKEEuLkkpIHRvIHNlbGVjdCB0aGUgR1BJTyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEdQSU9fUGluOiBzcGVjaWZpZXMgdGhlIHBvcnQgYml0IHRvIGJlIGxvY2tlZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBHUElPX1Bpbl94IHdoZXJlIHggY2FuIGJlICgwLi4xNSkuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEdQSU9fUGluTG9ja0NvbmZpZyhHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1BpbikNCit7DQorICBfX0lPIHVpbnQzMl90IHRtcCA9IDB4MDAwMTAwMDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fUElOKEdQSU9fUGluKSk7DQorDQorICB0bXAgfD0gR1BJT19QaW47DQorICAvKiBTZXQgTENLSyBiaXQgKi8NCisgIEdQSU94LT5MQ0tSID0gdG1wOw0KKyAgLyogUmVzZXQgTENLSyBiaXQgKi8NCisgIEdQSU94LT5MQ0tSID0gIEdQSU9fUGluOw0KKyAgLyogU2V0IExDS0sgYml0ICovDQorICBHUElPeC0+TENLUiA9IHRtcDsNCisgIC8qIFJlYWQgTENLSyBiaXQqLw0KKyAgdG1wID0gR1BJT3gtPkxDS1I7DQorICAvKiBSZWFkIExDS0sgYml0Ki8NCisgIHRtcCA9IEdQSU94LT5MQ0tSOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBHUElPX0dyb3VwMiBHUElPIFJlYWQgYW5kIFdyaXRlDQorICogIEBicmllZiAgIEdQSU8gUmVhZCBhbmQgV3JpdGUNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJTyBSZWFkIGFuZCBXcml0ZQ0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgUmVhZHMgdGhlIHNwZWNpZmllZCBpbnB1dCBwb3J0IHBpbi4NCisgICogQHBhcmFtICBHUElPeDogd2hlcmUgeCBjYW4gYmUgKEEuLkkpIHRvIHNlbGVjdCB0aGUgR1BJTyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEdQSU9fUGluOiBzcGVjaWZpZXMgdGhlIHBvcnQgYml0IHRvIHJlYWQuDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIEdQSU9fUGluX3ggd2hlcmUgeCBjYW4gYmUgKDAuLjE1KS4NCisgICogQHJldHZhbCBUaGUgaW5wdXQgcG9ydCBwaW4gdmFsdWUuDQorICAqLw0KK3VpbnQ4X3QgR1BJT19SZWFkSW5wdXREYXRhQml0KEdQSU9fVHlwZURlZiogR1BJT3gsIHVpbnQxNl90IEdQSU9fUGluKQ0KK3sNCisgIHVpbnQ4X3QgYml0c3RhdHVzID0gMHgwMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BTExfUEVSSVBIKEdQSU94KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfR0VUX0dQSU9fUElOKEdQSU9fUGluKSk7DQorDQorICBpZiAoKEdQSU94LT5JRFIgJiBHUElPX1BpbikgIT0gKHVpbnQzMl90KUJpdF9SRVNFVCkNCisgIHsNCisgICAgYml0c3RhdHVzID0gKHVpbnQ4X3QpQml0X1NFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgYml0c3RhdHVzID0gKHVpbnQ4X3QpQml0X1JFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmVhZHMgdGhlIHNwZWNpZmllZCBHUElPIGlucHV0IGRhdGEgcG9ydC4NCisgICogQHBhcmFtICBHUElPeDogd2hlcmUgeCBjYW4gYmUgKEEuLkkpIHRvIHNlbGVjdCB0aGUgR1BJTyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIEdQSU8gaW5wdXQgZGF0YSBwb3J0IHZhbHVlLg0KKyAgKi8NCit1aW50MTZfdCBHUElPX1JlYWRJbnB1dERhdGEoR1BJT19UeXBlRGVmKiBHUElPeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKw0KKyAgcmV0dXJuICgodWludDE2X3QpR1BJT3gtPklEUik7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlYWRzIHRoZSBzcGVjaWZpZWQgb3V0cHV0IGRhdGEgcG9ydCBiaXQuDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBHUElPX1Bpbjogc3BlY2lmaWVzIHRoZSBwb3J0IGJpdCB0byByZWFkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgR1BJT19QaW5feCB3aGVyZSB4IGNhbiBiZSAoMC4uMTUpLg0KKyAgKiBAcmV0dmFsIFRoZSBvdXRwdXQgcG9ydCBwaW4gdmFsdWUuDQorICAqLw0KK3VpbnQ4X3QgR1BJT19SZWFkT3V0cHV0RGF0YUJpdChHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1BpbikNCit7DQorICB1aW50OF90IGJpdHN0YXR1cyA9IDB4MDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dFVF9HUElPX1BJTihHUElPX1BpbikpOw0KKw0KKyAgaWYgKChHUElPeC0+T0RSICYgR1BJT19QaW4pICE9ICh1aW50MzJfdClCaXRfUkVTRVQpDQorICB7DQorICAgIGJpdHN0YXR1cyA9ICh1aW50OF90KUJpdF9TRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9ICh1aW50OF90KUJpdF9SRVNFVDsNCisgIH0NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlYWRzIHRoZSBzcGVjaWZpZWQgR1BJTyBvdXRwdXQgZGF0YSBwb3J0Lg0KKyAgKiBAcGFyYW0gIEdQSU94OiB3aGVyZSB4IGNhbiBiZSAoQS4uSSkgdG8gc2VsZWN0IHRoZSBHUElPIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgR1BJTyBvdXRwdXQgZGF0YSBwb3J0IHZhbHVlLg0KKyAgKi8NCit1aW50MTZfdCBHUElPX1JlYWRPdXRwdXREYXRhKEdQSU9fVHlwZURlZiogR1BJT3gpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19HUElPX0FMTF9QRVJJUEgoR1BJT3gpKTsNCisNCisgIHJldHVybiAoKHVpbnQxNl90KUdQSU94LT5PRFIpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBzZWxlY3RlZCBkYXRhIHBvcnQgYml0cy4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9ucyB1c2VzIEdQSU94X0JTUlIgcmVnaXN0ZXIgdG8gYWxsb3cgYXRvbWljIHJlYWQvbW9kaWZ5IA0KKyAgKiAgICAgICAgIGFjY2Vzc2VzLiBJbiB0aGlzIHdheSwgdGhlcmUgaXMgbm8gcmlzayBvZiBhbiBJUlEgb2NjdXJyaW5nIGJldHdlZW4NCisgICogICAgICAgICB0aGUgcmVhZCBhbmQgdGhlIG1vZGlmeSBhY2Nlc3MuDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBHUElPX1Bpbjogc3BlY2lmaWVzIHRoZSBwb3J0IGJpdHMgdG8gYmUgd3JpdHRlbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBHUElPX1Bpbl94IHdoZXJlIHggY2FuIGJlICgwLi4xNSkuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEdQSU9fU2V0Qml0cyhHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1BpbikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fUElOKEdQSU9fUGluKSk7DQorDQorICBHUElPeC0+QlNSUkwgPSBHUElPX1BpbjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBzZWxlY3RlZCBkYXRhIHBvcnQgYml0cy4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9ucyB1c2VzIEdQSU94X0JTUlIgcmVnaXN0ZXIgdG8gYWxsb3cgYXRvbWljIHJlYWQvbW9kaWZ5IA0KKyAgKiAgICAgICAgIGFjY2Vzc2VzLiBJbiB0aGlzIHdheSwgdGhlcmUgaXMgbm8gcmlzayBvZiBhbiBJUlEgb2NjdXJyaW5nIGJldHdlZW4NCisgICogICAgICAgICB0aGUgcmVhZCBhbmQgdGhlIG1vZGlmeSBhY2Nlc3MuDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBHUElPX1Bpbjogc3BlY2lmaWVzIHRoZSBwb3J0IGJpdHMgdG8gYmUgd3JpdHRlbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBHUElPX1Bpbl94IHdoZXJlIHggY2FuIGJlICgwLi4xNSkuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEdQSU9fUmVzZXRCaXRzKEdQSU9fVHlwZURlZiogR1BJT3gsIHVpbnQxNl90IEdQSU9fUGluKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BTExfUEVSSVBIKEdQSU94KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfR1BJT19QSU4oR1BJT19QaW4pKTsNCisNCisgIEdQSU94LT5CU1JSSCA9IEdQSU9fUGluOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIG9yIGNsZWFycyB0aGUgc2VsZWN0ZWQgZGF0YSBwb3J0IGJpdC4NCisgICogQHBhcmFtICBHUElPeDogd2hlcmUgeCBjYW4gYmUgKEEuLkkpIHRvIHNlbGVjdCB0aGUgR1BJTyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEdQSU9fUGluOiBzcGVjaWZpZXMgdGhlIHBvcnQgYml0IHRvIGJlIHdyaXR0ZW4uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgR1BJT19QaW5feCB3aGVyZSB4IGNhbiBiZSAoMC4uMTUpLg0KKyAgKiBAcGFyYW0gIEJpdFZhbDogc3BlY2lmaWVzIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBzZWxlY3RlZCBiaXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIEJpdEFjdGlvbiBlbnVtIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEJpdF9SRVNFVDogdG8gY2xlYXIgdGhlIHBvcnQgcGluDQorICAqICAgICAgICAgICAgQGFyZyBCaXRfU0VUOiB0byBzZXQgdGhlIHBvcnQgcGluDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEdQSU9fV3JpdGVCaXQoR1BJT19UeXBlRGVmKiBHUElPeCwgdWludDE2X3QgR1BJT19QaW4sIEJpdEFjdGlvbiBCaXRWYWwpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19HUElPX0FMTF9QRVJJUEgoR1BJT3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19HRVRfR1BJT19QSU4oR1BJT19QaW4pKTsNCisgIGFzc2VydF9wYXJhbShJU19HUElPX0JJVF9BQ1RJT04oQml0VmFsKSk7DQorDQorICBpZiAoQml0VmFsICE9IEJpdF9SRVNFVCkNCisgIHsNCisgICAgR1BJT3gtPkJTUlJMID0gR1BJT19QaW47DQorICB9DQorICBlbHNlDQorICB7DQorICAgIEdQSU94LT5CU1JSSCA9IEdQSU9fUGluIDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgV3JpdGVzIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBHUElPIGRhdGEgcG9ydC4NCisgICogQHBhcmFtICBHUElPeDogd2hlcmUgeCBjYW4gYmUgKEEuLkkpIHRvIHNlbGVjdCB0aGUgR1BJTyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFBvcnRWYWw6IHNwZWNpZmllcyB0aGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgcG9ydCBvdXRwdXQgZGF0YSByZWdpc3Rlci4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgR1BJT19Xcml0ZShHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBQb3J0VmFsKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BTExfUEVSSVBIKEdQSU94KSk7DQorDQorICBHUElPeC0+T0RSID0gUG9ydFZhbDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgVG9nZ2xlcyB0aGUgc3BlY2lmaWVkIEdQSU8gcGlucy4uDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBHUElPX1BpbjogU3BlY2lmaWVzIHRoZSBwaW5zIHRvIGJlIHRvZ2dsZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEdQSU9fVG9nZ2xlQml0cyhHUElPX1R5cGVEZWYqIEdQSU94LCB1aW50MTZfdCBHUElPX1BpbikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKw0KKyAgR1BJT3gtPk9EUiBePSBHUElPX1BpbjsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgR1BJT19Hcm91cDMgR1BJTyBBbHRlcm5hdGUgZnVuY3Rpb25zIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24NCisgKiAgQGJyaWVmICAgR1BJTyBBbHRlcm5hdGUgZnVuY3Rpb25zIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24NCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgR1BJTyBBbHRlcm5hdGUgZnVuY3Rpb25zIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24NCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoYW5nZXMgdGhlIG1hcHBpbmcgb2YgdGhlIHNwZWNpZmllZCBwaW4uDQorICAqIEBwYXJhbSAgR1BJT3g6IHdoZXJlIHggY2FuIGJlIChBLi5JKSB0byBzZWxlY3QgdGhlIEdQSU8gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBHUElPX1BpblNvdXJjZTogc3BlY2lmaWVzIHRoZSBwaW4gZm9yIHRoZSBBbHRlcm5hdGUgZnVuY3Rpb24uDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIEdQSU9fUGluU291cmNleCB3aGVyZSB4IGNhbiBiZSAoMC4uMTUpLg0KKyAgKiBAcGFyYW0gIEdQSU9fQUZTZWxlY3Rpb246IHNlbGVjdHMgdGhlIHBpbiB0byB1c2VkIGFzIEFsdGVybmF0ZSBmdW5jdGlvbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfUlRDXzUwSHo6IENvbm5lY3QgUlRDXzUwSHogcGluIHRvIEFGMCAoZGVmYXVsdCBhZnRlciByZXNldCkgDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX01DTzogQ29ubmVjdCBNQ08gcGluIChNQ08xIGFuZCBNQ08yKSB0byBBRjAgKGRlZmF1bHQgYWZ0ZXIgcmVzZXQpIA0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9UQU1QRVI6IENvbm5lY3QgVEFNUEVSIHBpbnMgKFRBTVBFUl8xIGFuZCBUQU1QRVJfMikgdG8gQUYwIChkZWZhdWx0IGFmdGVyIHJlc2V0KSANCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfU1dKOiBDb25uZWN0IFNXSiBwaW5zIChTV0QgYW5kIEpUQUcpdG8gQUYwIChkZWZhdWx0IGFmdGVyIHJlc2V0KSANCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVFJBQ0U6IENvbm5lY3QgVFJBQ0UgcGlucyB0byBBRjAgKGRlZmF1bHQgYWZ0ZXIgcmVzZXQpDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1RJTTE6IENvbm5lY3QgVElNMSBwaW5zIHRvIEFGMQ0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9USU0yOiBDb25uZWN0IFRJTTIgcGlucyB0byBBRjENCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVElNMzogQ29ubmVjdCBUSU0zIHBpbnMgdG8gQUYyDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1RJTTQ6IENvbm5lY3QgVElNNCBwaW5zIHRvIEFGMg0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9USU01OiBDb25uZWN0IFRJTTUgcGlucyB0byBBRjINCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVElNODogQ29ubmVjdCBUSU04IHBpbnMgdG8gQUYzDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1RJTTk6IENvbm5lY3QgVElNOSBwaW5zIHRvIEFGMw0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9USU0xMDogQ29ubmVjdCBUSU0xMCBwaW5zIHRvIEFGMw0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9USU0xMTogQ29ubmVjdCBUSU0xMSBwaW5zIHRvIEFGMw0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9JMkMxOiBDb25uZWN0IEkyQzEgcGlucyB0byBBRjQNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfSTJDMjogQ29ubmVjdCBJMkMyIHBpbnMgdG8gQUY0DQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX0kyQzM6IENvbm5lY3QgSTJDMyBwaW5zIHRvIEFGNA0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9TUEkxOiBDb25uZWN0IFNQSTEgcGlucyB0byBBRjUNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfU1BJMjogQ29ubmVjdCBTUEkyL0kyUzIgcGlucyB0byBBRjUNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfU1BJMzogQ29ubmVjdCBTUEkzL0kyUzMgcGlucyB0byBBRjYNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVVNBUlQxOiBDb25uZWN0IFVTQVJUMSBwaW5zIHRvIEFGNw0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9VU0FSVDI6IENvbm5lY3QgVVNBUlQyIHBpbnMgdG8gQUY3DQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1VTQVJUMzogQ29ubmVjdCBVU0FSVDMgcGlucyB0byBBRjcNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVUFSVDQ6IENvbm5lY3QgVUFSVDQgcGlucyB0byBBRjgNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVUFSVDU6IENvbm5lY3QgVUFSVDUgcGlucyB0byBBRjgNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfVVNBUlQ2OiBDb25uZWN0IFVTQVJUNiBwaW5zIHRvIEFGOA0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9DQU4xOiBDb25uZWN0IENBTjEgcGlucyB0byBBRjkNCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfQ0FOMjogQ29ubmVjdCBDQU4yIHBpbnMgdG8gQUY5DQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1RJTTEyOiBDb25uZWN0IFRJTTEyIHBpbnMgdG8gQUY5DQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1RJTTEzOiBDb25uZWN0IFRJTTEzIHBpbnMgdG8gQUY5DQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX1RJTTE0OiBDb25uZWN0IFRJTTE0IHBpbnMgdG8gQUY5DQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX09UR19GUzogQ29ubmVjdCBPVEdfRlMgcGlucyB0byBBRjEwDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX09UR19IUzogQ29ubmVjdCBPVEdfSFMgcGlucyB0byBBRjEwDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX0VUSDogQ29ubmVjdCBFVEhFUk5FVCBwaW5zIHRvIEFGMTENCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfRlNNQzogQ29ubmVjdCBGU01DIHBpbnMgdG8gQUYxMg0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9PVEdfSFNfRlM6IENvbm5lY3QgT1RHIEhTIChjb25maWd1cmVkIGluIEZTKSBwaW5zIHRvIEFGMTINCisgICogICAgICAgICAgICBAYXJnIEdQSU9fQUZfU0RJTzogQ29ubmVjdCBTRElPIHBpbnMgdG8gQUYxMg0KKyAgKiAgICAgICAgICAgIEBhcmcgR1BJT19BRl9EQ01JOiBDb25uZWN0IERDTUkgcGlucyB0byBBRjEzDQorICAqICAgICAgICAgICAgQGFyZyBHUElPX0FGX0VWRU5UT1VUOiBDb25uZWN0IEVWRU5UT1VUIHBpbnMgdG8gQUYxNQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBHUElPX1BpbkFGQ29uZmlnKEdQSU9fVHlwZURlZiogR1BJT3gsIHVpbnQxNl90IEdQSU9fUGluU291cmNlLCB1aW50OF90IEdQSU9fQUYpDQorew0KKyAgdWludDMyX3QgdGVtcCA9IDB4MDA7DQorICB1aW50MzJfdCB0ZW1wXzIgPSAweDAwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUxMX1BFUklQSChHUElPeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fUElOX1NPVVJDRShHUElPX1BpblNvdXJjZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUYoR1BJT19BRikpOw0KKyAgDQorICB0ZW1wID0gKCh1aW50MzJfdCkoR1BJT19BRikgPDwgKCh1aW50MzJfdCkoKHVpbnQzMl90KUdQSU9fUGluU291cmNlICYgKHVpbnQzMl90KTB4MDcpICogNCkpIDsNCisgIEdQSU94LT5BRlJbR1BJT19QaW5Tb3VyY2UgPj4gMHgwM10gJj0gfigodWludDMyX3QpMHhGIDw8ICgodWludDMyX3QpKCh1aW50MzJfdClHUElPX1BpblNvdXJjZSAmICh1aW50MzJfdCkweDA3KSAqIDQpKSA7DQorICB0ZW1wXzIgPSBHUElPeC0+QUZSW0dQSU9fUGluU291cmNlID4+IDB4MDNdIHwgdGVtcDsNCisgIEdQSU94LT5BRlJbR1BJT19QaW5Tb3VyY2UgPj4gMHgwM10gPSB0ZW1wXzI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfaGFzaC5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhYzI4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfaGFzaC5jCkBAIC0wLDAgKzEsNzA2IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfaGFzaC5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEhBU0ggLyBITUFDIFByb2Nlc3NvciAoSEFTSCkgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgICogICAgICAgICAgIC0gTWVzc2FnZSBEaWdlc3QgZ2VuZXJhdGlvbiBmdW5jdGlvbnMNCisgICogICAgICAgICAgIC0gY29udGV4dCBzd2FwcGluZyBmdW5jdGlvbnMgICANCisgICogICAgICAgICAgIC0gRE1BIGludGVyZmFjZSBmdW5jdGlvbiAgICAgICANCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCAgICAgICANCisgICogICAgICAgICANCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgIEhBU0ggb3BlcmF0aW9uIDogDQorICAqICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgMS4gRW5hYmxlIHRoZSBIQVNIIGNvbnRyb2xsZXIgY2xvY2sgdXNpbmcgDQorICAqICAgICAgICAgICAgUkNDX0FIQjJQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMlBlcmlwaF9IQVNILCBFTkFCTEUpIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgDQorICAqICAgICAgICAgMi4gSW5pdGlhbGlzZSB0aGUgSEFTSCB1c2luZyBIQVNIX0luaXQoKSBmdW5jdGlvbi4gDQorICAqICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgMyAuIFJlc2V0IHRoZSBIQVNIIHByb2Nlc3NvciBjb3JlLCBzbyB0aGF0IHRoZSBIQVNIIHdpbGwgYmUgcmVhZHkgDQorICAqICAgICAgICAgICAgIHRvIGNvbXB1dGUgaGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBuZXcgbWVzc2FnZSBieSB1c2luZyANCisgICogICAgICAgICAgICAgSEFTSF9SZXNldCgpIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgIDQuIEVuYWJsZSB0aGUgSEFTSCBjb250cm9sbGVyIHVzaW5nIHRoZSBIQVNIX0NtZCgpIGZ1bmN0aW9uLiANCisgICogICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgNS4gaWYgdXNpbmcgRE1BIGZvciBEYXRhIGlucHV0IHRyYW5zZmVyLCBBY3RpdmF0ZSB0aGUgRE1BIFJlcXVlc3QgDQorICAqICAgICAgICAgICAgdXNpbmcgSEFTSF9ETUFDbWQoKSBmdW5jdGlvbiANCisgICogICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgIDYuIGlmIERNQSBpcyBub3QgdXNlZCBmb3IgZGF0YSB0cmFuc2ZlciwgdXNlIEhBU0hfRGF0YUluKCkgZnVuY3Rpb24gDQorICAqICAgICAgICAgICAgdG8gZW50ZXIgZGF0YSB0byBJTiBGSUZPLg0KKyAgKiAgICAgICAgICAgICANCisgICogICAgICAgICAgDQorICAqICAgICAgICAgNy4gQ29uZmlndXJlIHRoZSBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIG1lc3NhZ2UgDQorICAqICAgICAgICAgICAgdXNpbmcgSEFTSF9TZXRMYXN0V29yZFZhbGlkQml0c05icigpIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgICANCisgICogICAgICAgICA4LiBpZiB0aGUgbWVzc2FnZSBsZW5ndGggaXMgbm90IGFuIGV4YWN0IG11bHRpcGxlIG9mIDUxMiBiaXRzLCANCisgICogICAgICAgICAgICB0aGVuIHRoZSBmdW5jdGlvbiBIQVNIX1N0YXJ0RGlnZXN0KCkgbXVzdCBiZSBjYWxsZWQgdG8gDQorICAqICAgICAgICAgICAgbGF1bmNoIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgZmluYWwgZGlnZXN0LiAgICAgDQorICAqICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgIDkuIE9uY2UgY29tcHV0ZWQsIHRoZSBkaWdlc3QgY2FuIGJlIHJlYWQgdXNpbmcgSEFTSF9HZXREaWdlc3QoKSANCisgICogICAgICAgICAgICBmdW5jdGlvbi4gICAgICAgICANCisgICogICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAxMC4gVG8gY29udHJvbCBIQVNIIGV2ZW50cyB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgICAgIHR3byBtZXRob2RzOg0KKyAgKiAgICAgICAgICAgICAgIGEtIENoZWNrIG9uIEhBU0ggZmxhZ3MgdXNpbmcgdGhlIEhBU0hfR2V0RmxhZ1N0YXR1cygpIGZ1bmN0aW9uLiAgDQorICAqICAgICAgICAgICAgICAgYi0gVXNlIEhBU0ggaW50ZXJydXB0cyB0aHJvdWdoIHRoZSBmdW5jdGlvbiBIQVNIX0lUQ29uZmlnKCkgYXQgDQorICAqICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gcGhhc2UgYW5kIEhBU0hfR2V0SVRTdGF0dXMoKSBmdW5jdGlvbiBpbnRvIA0KKyAgKiAgICAgICAgICAgICAgICAgIGludGVycnVwdCByb3V0aW5lcyBpbiBoYXNoaW5nIHBoYXNlLg0KKyAgKiAgICAgICAgICBBZnRlciBjaGVja2luZyBvbiBhIGZsYWcgeW91IHNob3VsZCBjbGVhciBpdCB1c2luZyBIQVNIX0NsZWFyRmxhZygpDQorICAqICAgICAgICAgIGZ1bmN0aW9uLiBBbmQgYWZ0ZXIgY2hlY2tpbmcgb24gYW4gaW50ZXJydXB0IGV2ZW50IHlvdSBzaG91bGQgDQorICAqICAgICAgICAgIGNsZWFyIGl0IHVzaW5nIEhBU0hfQ2xlYXJJVFBlbmRpbmdCaXQoKSBmdW5jdGlvbi4gICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgMTEuIFNhdmUgYW5kIHJlc3RvcmUgaGFzaCBwcm9jZXNzb3IgY29udGV4dCB1c2luZyANCisgICogICAgICAgICAgICBIQVNIX1NhdmVDb250ZXh0KCkgYW5kIEhBU0hfUmVzdG9yZUNvbnRleHQoKSBmdW5jdGlvbnMuICAgICANCisgICogICAgICAgICAgICAgIA0KKyAgKg0KKyAgKiAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICBITUFDIG9wZXJhdGlvbiA6IA0KKyAgKiAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tICANCisgICogICAgICAgICAgVGhlIEhNQUMgYWxnb3JpdGhtIGlzIHVzZWQgZm9yIG1lc3NhZ2UgYXV0aGVudGljYXRpb24sIGJ5IA0KKyAgKiAgICAgICAgICBpcnJldmVyc2libHkgYmluZGluZyB0aGUgbWVzc2FnZSBiZWluZyBwcm9jZXNzZWQgdG8gYSBrZXkgY2hvc2VuIA0KKyAgKiAgICAgICAgICBieSB0aGUgdXNlci4gDQorICAqICAgICAgICAgIEZvciBITUFDIHNwZWNpZmljYXRpb25zLCByZWZlciB0byAiSE1BQzoga2V5ZWQtaGFzaGluZyBmb3IgbWVzc2FnZSANCisgICogICAgICAgICAgYXV0aGVudGljYXRpb24sIEguIEtyYXdjenlrLCBNLiBCZWxsYXJlLCBSLiBDYW5ldHRpLCBGZWJydWFyeSAxOTk3Ig0KKyAgKiAgICAgICAgICANCisgICogICAgICAgICAgQmFzaWNhbGx5LCB0aGUgSE1BQyBhbGdvcml0aG0gY29uc2lzdHMgb2YgdHdvIG5lc3RlZCBoYXNoIG9wZXJhdGlvbnM6DQorICAqICAgICAgICAgIEhNQUMobWVzc2FnZSkgPSBIYXNoWygoa2V5IHwgcGFkKSBYT1IgMHg1QykgfCBIYXNoKCgoa2V5IHwgcGFkKSBYT1IgMHgzNikgfCBtZXNzYWdlKV0NCisgICogICAgICAgICAgd2hlcmU6DQorICAqICAgICAgICAgIC0gInBhZCIgaXMgYSBzZXF1ZW5jZSBvZiB6ZXJvZXMgbmVlZGVkIHRvIGV4dGVuZCB0aGUga2V5IHRvIHRoZSANCisgICogICAgICAgICAgICAgICAgICBsZW5ndGggb2YgdGhlIHVuZGVybHlpbmcgaGFzaCBmdW5jdGlvbiBkYXRhIGJsb2NrICh0aGF0IGlzIA0KKyAgKiAgICAgICAgICAgICAgICAgIDUxMiBiaXRzIGZvciBib3RoIHRoZSBTSEEtMSBhbmQgTUQ1IGhhc2ggYWxnb3JpdGhtcykNCisgICogICAgICAgICAgLSAifCIgICByZXByZXNlbnRzIHRoZSBjb25jYXRlbmF0aW9uIG9wZXJhdG9yIA0KKyAgKiAgICAgICAgICANCisgICogICAgICAgICANCisgICogICAgICAgICBUbyBjb21wdXRlIHRoZSBITUFDLCBmb3VyIGRpZmZlcmVudCBwaGFzZXMgYXJlIHJlcXVpcmVkOg0KKyAgKiAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgMS4gIEluaXRpYWxpc2UgdGhlIEhBU0ggdXNpbmcgSEFTSF9Jbml0KCkgZnVuY3Rpb24gdG8gZG8gSE1BQyANCisgICogICAgICAgICAgICAgb3BlcmF0aW9uLiANCisgICogICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgMi4gIFRoZSBrZXkgKHRvIGJlIHVzZWQgZm9yIHRoZSBpbm5lciBoYXNoIGZ1bmN0aW9uKSBpcyB0aGVuIGdpdmVuIA0KKyAgKiAgICAgICAgICAgICB0byB0aGUgY29yZS4gVGhpcyBvcGVyYXRpb24gZm9sbG93cyB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdGhlIA0KKyAgKiAgICAgICAgICAgICBvbmUgdXNlZCB0byBzZW5kIHRoZSBtZXNzYWdlIGluIHRoZSBoYXNoIG9wZXJhdGlvbiAodGhhdCBpcywgDQorICAqICAgICAgICAgICAgIGJ5IEhBU0hfRGF0YUluKCkgZnVuY3Rpb24gYW5kLCBmaW5hbGx5LCANCisgICogICAgICAgICAgICAgSEFTSF9TdGFydERpZ2VzdCgpIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICANCisgICogICAgICAgICAzLiAgT25jZSB0aGUgbGFzdCB3b3JkIGhhcyBiZWVuIGVudGVyZWQgYW5kIGNvbXB1dGF0aW9uIGhhcyBzdGFydGVkLCANCisgICogICAgICAgICAgICAgdGhlIGhhc2ggcHJvY2Vzc29yIGVsYWJvcmF0ZXMgdGhlIGtleS4gSXQgaXMgdGhlbiByZWFkeSB0byANCisgICogICAgICAgICAgICAgYWNjZXB0IHRoZSBtZXNzYWdlIHRleHQgdXNpbmcgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHRoZSBvbmUgDQorICAqICAgICAgICAgICAgIHVzZWQgdG8gc2VuZCB0aGUgbWVzc2FnZSBpbiB0aGUgaGFzaCBvcGVyYXRpb24uDQorICAqICAgICAgIA0KKyAgKiAgICAgICAgIDQuICBBZnRlciB0aGUgZmlyc3QgaGFzaCByb3VuZCwgdGhlIGhhc2ggcHJvY2Vzc29yIHJldHVybnMgInJlYWR5IiANCisgICogICAgICAgICAgICAgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyByZWFkeSB0byByZWNlaXZlIHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgDQorICAqICAgICAgICAgICAgIHRoZSBvdXRlciBoYXNoIGZ1bmN0aW9uIChub3JtYWxseSwgdGhpcyBrZXkgaXMgdGhlIHNhbWUgYXMgdGhlIA0KKyAgKiAgICAgICAgICAgICBvbmUgdXNlZCBmb3IgdGhlIGlubmVyIGhhc2ggZnVuY3Rpb24pLiBXaGVuIHRoZSBsYXN0IHdvcmQgb2YgDQorICAqICAgICAgICAgICAgIHRoZSBrZXkgaXMgZW50ZXJlZCBhbmQgY29tcHV0YXRpb24gc3RhcnRzLCB0aGUgSE1BQyByZXN1bHQgaXMgDQorICAqICAgICAgICAgICAgIG1hZGUgYXZhaWxhYmxlIHVzaW5nIEhBU0hfR2V0RGlnZXN0KCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAgICANCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKiAgICAgICAgIA0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2hhc2guaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEhBU0ggDQorICAqIEBicmllZiBIQVNIIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLyANCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gDQorDQorLyoqIEBkZWZncm91cCBIQVNIX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIEhBU0hfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gDQorICAgLSBJbml0aWFsaXplIHRoZSBIQVNIIHBlcmlwaGVyYWwNCisgICAtIENvbmZpZ3VyZSB0aGUgSEFTSCBQcm9jZXNzb3IgDQorICAgICAgLSBNRDUvU0hBMSwgDQorICAgICAgLSBIQVNIL0hNQUMsIA0KKyAgICAgIC0gZGF0YXR5cGUgDQorICAgICAgLSBITUFDIEtleSAoaWYgbW9kZSA9IEhNQUMpDQorICAgLSBSZXNldCB0aGUgSEFTSCBQcm9jZXNzb3IgDQorICAgDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKyAgDQorLyoqDQorICAqIEBicmllZiAgRGVpbml0aWFsaXplcyB0aGUgSEFTSCBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcw0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSEFTSF9EZUluaXQodm9pZCkNCit7DQorICAvKiBFbmFibGUgSEFTSCByZXNldCBzdGF0ZSAqLw0KKyAgUkNDX0FIQjJQZXJpcGhSZXNldENtZChSQ0NfQUhCMlBlcmlwaF9IQVNILCBFTkFCTEUpOw0KKyAgLyogUmVsZWFzZSBIQVNIIGZyb20gcmVzZXQgc3RhdGUgKi8NCisgIFJDQ19BSEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FIQjJQZXJpcGhfSEFTSCwgRElTQUJMRSk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBIQVNIIHBlcmlwaGVyYWwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycw0KKyAgKiAgICAgICAgIGluIHRoZSBIQVNIX0luaXRTdHJ1Y3Qgc3RydWN0dXJlLg0KKyAgKiBAbm90ZSAgIHRoZSBoYXNoIHByb2Nlc3NvciBpcyByZXNldCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBzbyB0aGF0IHRoZQ0KKyAgKiAgICAgICAgIEhBU0ggd2lsbCBiZSByZWFkeSB0byBjb21wdXRlIHRoZSBtZXNzYWdlIGRpZ2VzdCBvZiBhIG5ldyBtZXNzYWdlLg0KKyAgKiAgICAgICAgIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBIQVNIX1Jlc2V0KCkgZnVuY3Rpb24uICAgICAgICAgICANCisgICogQHBhcmFtICBIQVNIX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBIQVNIX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBIQVNIIHBlcmlwaGVyYWwuDQorICAqIEBub3RlICAgVGhlIGZpZWxkIEhBU0hfSE1BQ0tleVR5cGUgaW4gSEFTSF9Jbml0VHlwZURlZiBtdXN0IGJlIGZpbGxlZCBvbmx5IA0KKyAgKiAgICAgICAgICBpZiB0aGUgYWxnb3JpdGhtIG1vZGUgaXMgSE1BQy4gICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEhBU0hfSW5pdChIQVNIX0luaXRUeXBlRGVmKiBIQVNIX0luaXRTdHJ1Y3QpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19IQVNIX0FMR09TRUxFQ1RJT04oSEFTSF9Jbml0U3RydWN0LT5IQVNIX0FsZ29TZWxlY3Rpb24pKTsNCisgIGFzc2VydF9wYXJhbShJU19IQVNIX0RBVEFUWVBFKEhBU0hfSW5pdFN0cnVjdC0+SEFTSF9EYXRhVHlwZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfQUxHT01PREUoSEFTSF9Jbml0U3RydWN0LT5IQVNIX0FsZ29Nb2RlKSk7DQorICANCisgIC8qIENvbmZpZ3VyZSB0aGUgQWxnb3JpdGhtIHVzZWQsIGFsZ29yaXRobSBtb2RlIGFuZCB0aGUgZGF0YXR5cGUgKi8NCisgIEhBU0gtPkNSICY9IH4gKEhBU0hfQ1JfQUxHTyB8IEhBU0hfQ1JfREFUQVRZUEUgfCBIQVNIX0NSX01PREUpOw0KKyAgSEFTSC0+Q1IgfD0gKEhBU0hfSW5pdFN0cnVjdC0+SEFTSF9BbGdvU2VsZWN0aW9uIHwgXA0KKyAgICAgICAgICAgICAgIEhBU0hfSW5pdFN0cnVjdC0+SEFTSF9EYXRhVHlwZSB8IFwNCisgICAgICAgICAgICAgICBIQVNIX0luaXRTdHJ1Y3QtPkhBU0hfQWxnb01vZGUpOw0KKyAgDQorICAvKiBpZiBhbGdvcml0aG0gbW9kZSBpcyBITUFDLCBzZXQgdGhlIEtleSAqLyAgDQorICBpZihIQVNIX0luaXRTdHJ1Y3QtPkhBU0hfQWxnb01vZGUgPT0gSEFTSF9BbGdvTW9kZV9ITUFDKSANCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfSE1BQ19LRVlUWVBFKEhBU0hfSW5pdFN0cnVjdC0+SEFTSF9ITUFDS2V5VHlwZSkpOw0KKyAgICBIQVNILT5DUiAmPSB+SEFTSF9DUl9MS0VZOw0KKyAgICBIQVNILT5DUiB8PSBIQVNIX0luaXRTdHJ1Y3QtPkhBU0hfSE1BQ0tleVR5cGU7DQorICB9DQorDQorICAvKiBSZXNldCB0aGUgSEFTSCBwcm9jZXNzb3IgY29yZSwgc28gdGhhdCB0aGUgSEFTSCB3aWxsIGJlIHJlYWR5IHRvIGNvbXB1dGUgDQorICAgICB0aGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBuZXcgbWVzc2FnZSAqLw0KKyAgSEFTSC0+Q1IgfD0gSEFTSF9DUl9JTklUOyAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggSEFTSF9Jbml0U3RydWN0IG1lbWJlciB3aXRoIGl0cyBkZWZhdWx0IHZhbHVlLg0KKyAgKiBAcGFyYW0gIEhBU0hfSW5pdFN0cnVjdCA6IHBvaW50ZXIgdG8gYSBIQVNIX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsDQorICAqICAgICAgICAgIGJlIGluaXRpYWxpemVkLiAgDQorICAqICBAbm90ZSAgVGhlIGRlZmF1bHQgdmFsdWVzIHNldCBhcmUgOiBQcm9jZXNzb3IgbW9kZSBpcyBIQVNILCBBbGdvcml0aG0gc2VsZWN0ZWQgaXMgU0hBMSwNCisgICogICAgICAgICAgRGF0YSB0eXBlIHNlbGVjdGVkIGlzIDMyYiBhbmQgSE1BQyBLZXkgVHlwZSBpcyBzaG9ydCBrZXkuICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSEFTSF9TdHJ1Y3RJbml0KEhBU0hfSW5pdFR5cGVEZWYqIEhBU0hfSW5pdFN0cnVjdCkNCit7DQorICAvKiBJbml0aWFsaXplIHRoZSBIQVNIX0FsZ29TZWxlY3Rpb24gbWVtYmVyICovDQorICBIQVNIX0luaXRTdHJ1Y3QtPkhBU0hfQWxnb1NlbGVjdGlvbiA9IEhBU0hfQWxnb1NlbGVjdGlvbl9TSEExOw0KKw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgSEFTSF9BbGdvTW9kZSBtZW1iZXIgKi8NCisgIEhBU0hfSW5pdFN0cnVjdC0+SEFTSF9BbGdvTW9kZSA9IEhBU0hfQWxnb01vZGVfSEFTSDsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIEhBU0hfRGF0YVR5cGUgbWVtYmVyICovDQorICBIQVNIX0luaXRTdHJ1Y3QtPkhBU0hfRGF0YVR5cGUgPSBIQVNIX0RhdGFUeXBlXzMyYjsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIEhBU0hfSE1BQ0tleVR5cGUgbWVtYmVyICovDQorICBIQVNIX0luaXRTdHJ1Y3QtPkhBU0hfSE1BQ0tleVR5cGUgPSBIQVNIX0hNQUNLZXlUeXBlX1Nob3J0S2V5Ow0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXNldHMgdGhlIEhBU0ggcHJvY2Vzc29yIGNvcmUsIHNvIHRoYXQgdGhlIEhBU0ggd2lsbCBiZSByZWFkeQ0KKyAgKiAgICAgICAgIHRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgbmV3IG1lc3NhZ2UuDQorICAqIEBub3RlICAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIEhBU0hfU1JfRENJUyAoRGlnZXN0IGNhbGN1bGF0aW9uIA0KKyAgKiAgICAgICAgIGNvbXBsZXRpb24gaW50ZXJydXB0IHN0YXR1cykgYml0IGNvcnJlc3BvbmRpbmcgdG8gSEFTSF9JVF9EQ0kgDQorICAqICAgICAgICAgaW50ZXJydXB0IGFuZCBIQVNIX0ZMQUdfRENJUyBmbGFnLiANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEhBU0hfUmVzZXQodm9pZCkNCit7DQorICAvKiBSZXNldCB0aGUgSEFTSCBwcm9jZXNzb3IgY29yZSAqLw0KKyAgSEFTSC0+Q1IgfD0gSEFTSF9DUl9JTklUOw0KK30NCisvKioNCisgICogQH0NCisgICovDQorIA0KKy8qKiBAZGVmZ3JvdXAgSEFTSF9Hcm91cDIgTWVzc2FnZSBEaWdlc3QgZ2VuZXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgIE1lc3NhZ2UgRGlnZXN0IGdlbmVyYXRpb24gZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSBEaWdlc3QgZ2VuZXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRoZSBnZW5lcmF0aW9uIG9mIG1lc3NhZ2UgZGlnZXN0OiANCisgIC0gUHVzaCBkYXRhIGluIHRoZSBJTiBGSUZPIDogdXNpbmcgSEFTSF9EYXRhSW4oKQ0KKyAgLSBHZXQgdGhlIG51bWJlciBvZiB3b3JkcyBzZXQgaW4gSU4gRklGTywgdXNlIEhBU0hfR2V0SW5GSUZPV29yZHNOYnIoKSAgDQorICAtIHNldCB0aGUgbGFzdCB3b3JkIHZhbGlkIGJpdHMgbnVtYmVyIHVzaW5nIEhBU0hfU2V0TGFzdFdvcmRWYWxpZEJpdHNOYnIoKSANCisgIC0gc3RhcnQgZGlnZXN0IGNhbGN1bGF0aW9uIDogdXNpbmcgSEFTSF9TdGFydERpZ2VzdCgpDQorICAtIEdldCB0aGUgRGlnZXN0IG1lc3NhZ2UgOiB1c2luZyBIQVNIX0dldERpZ2VzdCgpDQorIA0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmUgdGhlIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgbWVzc2FnZQ0KKyAgKiBAcGFyYW0gIFZhbGlkTnVtYmVyOiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIG1lc3NhZ2UuDQorICAqICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMHgxRi4NCisgICogICAgICAgICAgICAgLSAweDAwOiBBbGwgMzIgYml0cyBvZiB0aGUgbGFzdCBkYXRhIHdyaXR0ZW4gYXJlIHZhbGlkDQorICAqICAgICAgICAgICAgIC0gMHgwMTogT25seSBiaXQgWzBdIG9mIHRoZSBsYXN0IGRhdGEgd3JpdHRlbiBpcyB2YWxpZA0KKyAgKiAgICAgICAgICAgICAtIDB4MDI6IE9ubHkgYml0c1sxOjBdIG9mIHRoZSBsYXN0IGRhdGEgd3JpdHRlbiBhcmUgdmFsaWQNCisgICogICAgICAgICAgICAgLSAweDAzOiBPbmx5IGJpdHNbMjowXSBvZiB0aGUgbGFzdCBkYXRhIHdyaXR0ZW4gYXJlIHZhbGlkDQorICAqICAgICAgICAgICAgIC0gLi4uDQorICAqICAgICAgICAgICAgIC0gMHgxRjogT25seSBiaXRzWzMwOjBdIG9mIHRoZSBsYXN0IGRhdGEgd3JpdHRlbiBhcmUgdmFsaWQgICAgDQorICAqIEBub3RlICAgVGhlIE51bWJlciBvZiB2YWxpZCBiaXRzIG11c3QgYmUgc2V0IGJlZm9yZSB0byBzdGFydCB0aGUgbWVzc2FnZSANCisgICogICAgICAgICBkaWdlc3QgY29tcGV0aXRpb24gKGluIEhhc2ggYW5kIEhNQUMpIGFuZCBrZXkgdHJlYXRtZW50KGluIEhNQUMpLiAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSEFTSF9TZXRMYXN0V29yZFZhbGlkQml0c05icih1aW50MTZfdCBWYWxpZE51bWJlcikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfVkFMSURCSVRTTlVNQkVSKFZhbGlkTnVtYmVyKSk7DQorICANCisgIC8qIENvbmZpZ3VyZSB0aGUgTnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBtZXNzYWdlICovDQorICBIQVNILT5TVFIgJj0gfihIQVNIX1NUUl9OQlcpOw0KKyAgSEFTSC0+U1RSIHw9IFZhbGlkTnVtYmVyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBXcml0ZXMgZGF0YSBpbiB0aGUgRGF0YSBJbnB1dCBGSUZPDQorICAqIEBwYXJhbSAgRGF0YTogbmV3IGRhdGEgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgcHJvY2Vzc2VkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBIQVNIX0RhdGFJbih1aW50MzJfdCBEYXRhKQ0KK3sNCisgIC8qIFdyaXRlIGluIHRoZSBESU4gcmVnaXN0ZXIgYSBuZXcgZGF0YSAqLw0KKyAgSEFTSC0+RElOID0gRGF0YTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdvcmRzIGFscmVhZHkgcHVzaGVkIGludG8gdGhlIElOIEZJRk8uDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIFRoZSB2YWx1ZSBvZiB3b3JkcyBhbHJlYWR5IHB1c2hlZCBpbnRvIHRoZSBJTiBGSUZPLg0KKyAgKi8NCit1aW50OF90IEhBU0hfR2V0SW5GSUZPV29yZHNOYnIodm9pZCkNCit7DQorICAvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIE5CVyBiaXRzICovDQorICByZXR1cm4gKChIQVNILT5DUiAmIEhBU0hfQ1JfTkJXKSA+PiA4KTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUHJvdmlkZXMgdGhlIG1lc3NhZ2UgZGlnZXN0IHJlc3VsdC4NCisgICogQG5vdGUgICBJbiBNRDUgbW9kZSwgRGF0YVs0XSBmaWxlZCBvZiBIQVNIX01zZ0RpZ2VzdCBzdHJ1Y3R1cmUgaXMgbm90IHVzZWQNCisgICogICAgICAgICBhbmQgaXMgcmVhZCBhcyB6ZXJvLiAgDQorICAqIEBwYXJhbSAgSEFTSF9NZXNzYWdlRGlnZXN0OiBwb2ludGVyIHRvIGEgSEFTSF9Nc2dEaWdlc3Qgc3RydWN0dXJlIHdoaWNoIHdpbGwgDQorICAqICAgICAgICAgaG9sZCB0aGUgbWVzc2FnZSBkaWdlc3QgcmVzdWx0IA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBIQVNIX0dldERpZ2VzdChIQVNIX01zZ0RpZ2VzdCogSEFTSF9NZXNzYWdlRGlnZXN0KQ0KK3sNCisgIC8qIEdldCB0aGUgZGF0YSBmaWVsZCAqLw0KKyAgSEFTSF9NZXNzYWdlRGlnZXN0LT5EYXRhWzBdID0gSEFTSC0+SFJbMF07DQorICBIQVNIX01lc3NhZ2VEaWdlc3QtPkRhdGFbMV0gPSBIQVNILT5IUlsxXTsNCisgIEhBU0hfTWVzc2FnZURpZ2VzdC0+RGF0YVsyXSA9IEhBU0gtPkhSWzJdOw0KKyAgSEFTSF9NZXNzYWdlRGlnZXN0LT5EYXRhWzNdID0gSEFTSC0+SFJbM107DQorICBIQVNIX01lc3NhZ2VEaWdlc3QtPkRhdGFbNF0gPSBIQVNILT5IUls0XTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU3RhcnRzIHRoZSBtZXNzYWdlIHBhZGRpbmcgYW5kIGNhbGN1bGF0aW9uIG9mIHRoZSBmaW5hbCBtZXNzYWdlICAgICANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEhBU0hfU3RhcnREaWdlc3Qodm9pZCkNCit7DQorICAvKiBTdGFydCB0aGUgRGlnZXN0IGNhbGN1bGF0aW9uICovDQorICBIQVNILT5TVFIgfD0gSEFTSF9TVFJfRENBTDsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSEFTSF9Hcm91cDMgQ29udGV4dCBzd2FwcGluZyBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgQ29udGV4dCBzd2FwcGluZyBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0IHN3YXBwaW5nIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gc2F2ZSBhbmQgc3RvcmUgSEFTSCBDb250ZXh0DQorICANCisgIEl0IGlzIHBvc3NpYmxlIHRvIGludGVycnVwdCBhIEhBU0gvSE1BQyBwcm9jZXNzIHRvIHBlcmZvcm0gYW5vdGhlciBwcm9jZXNzaW5nIA0KKyAgd2l0aCBhIGhpZ2hlciBwcmlvcml0eSwgYW5kIHRvIGNvbXBsZXRlIHRoZSBpbnRlcnJ1cHRlZCBwcm9jZXNzIGxhdGVyIG9uLCB3aGVuIA0KKyAgdGhlIGhpZ2hlciBwcmlvcml0eSB0YXNrIGlzIGNvbXBsZXRlLiBUbyBkbyBzbywgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdGVkIA0KKyAgdGFzayBtdXN0IGJlIHNhdmVkIGZyb20gdGhlIEhBU0ggcmVnaXN0ZXJzIHRvIG1lbW9yeSwgYW5kIHRoZW4gYmUgcmVzdG9yZWQgDQorICBmcm9tIG1lbW9yeSB0byB0aGUgSEFTSCByZWdpc3RlcnMuDQorICANCisgIDEuIFRvIHNhdmUgdGhlIGN1cnJlbnQgY29udGV4dCwgdXNlIEhBU0hfU2F2ZUNvbnRleHQoKSBmdW5jdGlvbg0KKyAgMi4gVG8gcmVzdG9yZSB0aGUgc2F2ZWQgY29udGV4dCwgdXNlIEhBU0hfUmVzdG9yZUNvbnRleHQoKSBmdW5jdGlvbiANCisgIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIFNhdmUgdGhlIEhhc2ggcGVyaXBoZXJhbCBDb250ZXh0LiANCisgICogQG5vdGUgICBUaGUgY29udGV4dCBjYW4gYmUgc2F2ZWQgb25seSB3aGVuIG5vIGJsb2NrIGlzIGN1cnJlbnRseSBiZWluZyANCisgICogICAgICAgICBwcm9jZXNzZWQuIFNvIHVzZXIgbXVzdCB3YWl0IGZvciBESU5JUyA9IDEgKHRoZSBsYXN0IGJsb2NrIGhhcyBiZWVuIA0KKyAgKiAgICAgICAgIHByb2Nlc3NlZCBhbmQgdGhlIGlucHV0IEZJRk8gaXMgZW1wdHkpIG9yIE5CVyAhPSAwICh0aGUgRklGTyBpcyBub3QgDQorICAqICAgICAgICAgZnVsbCBhbmQgbm8gcHJvY2Vzc2luZyBpcyBvbmdvaW5nKS4gICANCisgICogQHBhcmFtICBIQVNIX0NvbnRleHRTYXZlOiBwb2ludGVyIHRvIGEgSEFTSF9Db250ZXh0IHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIHJlcG9zaXRvcnkgZm9yIGN1cnJlbnQgY29udGV4dC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSEFTSF9TYXZlQ29udGV4dChIQVNIX0NvbnRleHQqIEhBU0hfQ29udGV4dFNhdmUpDQorew0KKyAgdWludDhfdCBpID0gMDsNCisgIA0KKyAgLyogc2F2ZSBjb250ZXh0IHJlZ2lzdGVycyAqLw0KKyAgSEFTSF9Db250ZXh0U2F2ZS0+SEFTSF9JTVIgPSBIQVNILT5JTVI7ICANCisgIEhBU0hfQ29udGV4dFNhdmUtPkhBU0hfU1RSID0gSEFTSC0+U1RSOyAgICAgIA0KKyAgSEFTSF9Db250ZXh0U2F2ZS0+SEFTSF9DUiAgPSBIQVNILT5DUjsgICAgIA0KKyAgZm9yKGk9MDsgaTw9NTA7aSsrKQ0KKyAgew0KKyAgICAgSEFTSF9Db250ZXh0U2F2ZS0+SEFTSF9DU1JbaV0gPSBIQVNILT5DU1JbaV07DQorICB9ICAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlc3RvcmUgdGhlIEhhc2ggcGVyaXBoZXJhbCBDb250ZXh0LiAgDQorICAqIEBub3RlICAgQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB1c2VyIGNhbiByZXN0YXJ0IHRoZSBwcm9jZXNzaW5nIGZyb20gdGhlDQorICAqICAgICAgICAgcG9pbnQgd2hlcmUgaXQgaGFzIGJlZW4gaW50ZXJydXB0ZWQuICANCisgICogQHBhcmFtICBIQVNIX0NvbnRleHRSZXN0b3JlOiBwb2ludGVyIHRvIGEgSEFTSF9Db250ZXh0IHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIHJlcG9zaXRvcnkgZm9yIHNhdmVkIGNvbnRleHQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEhBU0hfUmVzdG9yZUNvbnRleHQoSEFTSF9Db250ZXh0KiBIQVNIX0NvbnRleHRSZXN0b3JlKSAgDQorew0KKyAgdWludDhfdCBpID0gMDsNCisgIA0KKyAgLyogcmVzdG9yZSBjb250ZXh0IHJlZ2lzdGVycyAqLw0KKyAgSEFTSC0+SU1SID0gSEFTSF9Db250ZXh0UmVzdG9yZS0+SEFTSF9JTVI7ICAgDQorICBIQVNILT5TVFIgPSBIQVNIX0NvbnRleHRSZXN0b3JlLT5IQVNIX1NUUjsgICAgIA0KKyAgSEFTSC0+Q1IgPSBIQVNIX0NvbnRleHRSZXN0b3JlLT5IQVNIX0NSOw0KKyAgDQorICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHByb2Nlc3NvciAqLw0KKyAgSEFTSC0+Q1IgfD0gSEFTSF9DUl9JTklUOyANCisgIA0KKyAgIC8qIGNvbnRpbnVlIHJlc3RvcmluZyBjb250ZXh0IHJlZ2lzdGVycyAqLyAgICAgDQorICBmb3IoaT0wOyBpPD01MDtpKyspDQorICB7DQorICAgICBIQVNILT5DU1JbaV0gPSBIQVNIX0NvbnRleHRSZXN0b3JlLT5IQVNIX0NTUltpXTsNCisgIH0gICANCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSEFTSF9Hcm91cDQgSEFTSCdzIERNQSBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBmdW5jdGlvbg0KKyAqICBAYnJpZWYgICBIQVNIJ3MgRE1BIGludGVyZmFjZSBDb25maWd1cmF0aW9uIGZ1bmN0aW9uIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgSEFTSCdzIERNQSBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBmdW5jdGlvbg0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBETUEgaW50ZXJmYWNlIGZvciANCisgIEhBU0gvIEhNQUMgZGF0YSBpbnB1dCB0cmFuc2Zlci4NCisgICANCisgIFdoZW4gdGhlIERNQSBtb2RlIGlzIGVuYWJsZWQgKHVzaW5nIHRoZSBIQVNIX0RNQUNtZCgpIGZ1bmN0aW9uKSwgZGF0YSBjYW4gYmUgDQorICBzZW50IHRvIHRoZSBJTiBGSUZPIHVzaW5nIHRoZSBETUEgcGVyaXBoZXJhbC4NCisNCisNCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBIQVNIIERNQSBpbnRlcmZhY2UuDQorICAqIEBub3RlICAgVGhlIERNQSBpcyBkaXNhYmxlZCBieSBoYXJkd2FyZSBhZnRlciB0aGUgZW5kIG9mIHRyYW5zZmVyLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNlbGVjdGVkIEhBU0ggRE1BIHRyYW5zZmVyIHJlcXVlc3QuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEhBU0hfRE1BQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIEhBU0ggRE1BIHJlcXVlc3QgKi8NCisgICAgSEFTSC0+Q1IgfD0gSEFTSF9DUl9ETUFFOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBIQVNIIERNQSByZXF1ZXN0ICovDQorICAgIEhBU0gtPkNSICY9IH5IQVNIX0NSX0RNQUU7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEhBU0hfR3JvdXA1IEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBIQVNIIEludGVycnVwdHMgYW5kIA0KKyAgdG8gZ2V0IHRoZSBzdGF0dXMgYW5kIGNsZWFyIGZsYWdzIGFuZCBJbnRlcnJ1cHRzIHBlbmRpbmcgYml0cy4NCisgIA0KKyAgVGhlIEhBU0ggcHJvdmlkZXMgMiBJbnRlcnJ1cHRzIHNvdXJjZXMgYW5kIDUgRmxhZ3M6DQorICANCisgIEZsYWdzIDoNCisgIC0tLS0tLS0tLS0gDQorICAgICAxLiBIQVNIX0ZMQUdfRElOSVMgOiBzZXQgd2hlbiAxNiBsb2NhdGlvbnMgYXJlIGZyZWUgaW4gdGhlIERhdGEgSU4gRklGTyANCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgYSAgbmV3IGJsb2NrICg1MTIgYml0KSBjYW4gYmUgZW50ZXJlZCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGlucHV0IGJ1ZmZlci4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgMi4gSEFTSF9GTEFHX0RDSVMgOiAgc2V0IHdoZW4gRGlnZXN0IGNhbGN1bGF0aW9uIGlzIGNvbXBsZXRlDQorICAgICAgDQorICAgICAzLiBIQVNIX0ZMQUdfRE1BUyA6ICBzZXQgd2hlbiBIQVNIJ3MgRE1BIGludGVyZmFjZSBpcyBlbmFibGVkIChETUFFPTEpIG9yIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgYSB0cmFuc2ZlciBpcyBvbmdvaW5nLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBGbGFnIGlzIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgIDQuIEhBU0hfRkxBR19CVVNZIDogIHNldCB3aGVuIFRoZSBoYXNoIGNvcmUgaXMgcHJvY2Vzc2luZyBhIGJsb2NrIG9mIGRhdGENCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgRmxhZyBpcyBjbGVhcmVkIG9ubHkgYnkgaGFyZHdhcmUuIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgNS4gSEFTSF9GTEFHX0RJTk5FIDogc2V0IHdoZW4gRGF0YSBJTiBGSUZPIGlzIG5vdCBlbXB0eSB3aGljaCBtZWFucyB0aGF0IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERhdGEgSU4gRklGTyBjb250YWlucyBhdCBsZWFzdCBvbmUgd29yZCBvZiBkYXRhLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBGbGFnIGlzIGNsZWFyZWQgb25seSBieSBoYXJkd2FyZS4NCisgICAgIA0KKyAgSW50ZXJydXB0cyA6DQorICAtLS0tLS0tLS0tLS0NCisgICAgDQorICAgMS4gSEFTSF9JVF9ESU5JICA6IGlmIGVuYWJsZWQsIHRoaXMgaW50ZXJydXB0IHNvdXJjZSBpcyBwZW5kaW5nIHdoZW4gMTYgDQorICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucyBhcmUgZnJlZSBpbiB0aGUgRGF0YSBJTiBGSUZPICB3aGljaCBtZWFucyB0aGF0IA0KKyAgICAgICAgICAgICAgICAgICAgICBhIG5ldyBibG9jayAoNTEyIGJpdCkgY2FuIGJlIGVudGVyZWQgaW50byB0aGUgaW5wdXQgYnVmZmVyLg0KKyAgICAgICAgICAgICAgICAgICAgICBUaGlzIGludGVycnVwdCBzb3VyY2UgaXMgY2xlYXJlZCB1c2luZyANCisgICAgICAgICAgICAgICAgICAgICAgSEFTSF9DbGVhcklUUGVuZGluZ0JpdChIQVNIX0lUX0RJTkkpIGZ1bmN0aW9uLg0KKyAgIA0KKyAgIDIuIEhBU0hfSVRfRENJICAgOiBpZiBlbmFibGVkLCB0aGlzIGludGVycnVwdCBzb3VyY2UgaXMgcGVuZGluZyB3aGVuIERpZ2VzdCANCisgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRpb24gaXMgY29tcGxldGUuDQorICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaW50ZXJydXB0IHNvdXJjZSBpcyBjbGVhcmVkIHVzaW5nIA0KKyAgICAgICAgICAgICAgICAgICAgICBIQVNIX0NsZWFySVRQZW5kaW5nQml0KEhBU0hfSVRfRENJKSBmdW5jdGlvbi4NCisNCisgIE1hbmFnaW5nIHRoZSBIQVNIIGNvbnRyb2xsZXIgZXZlbnRzIDoNCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSANCisgIFRoZSB1c2VyIHNob3VsZCBpZGVudGlmeSB3aGljaCBtb2RlIHdpbGwgYmUgdXNlZCBpbiBoaXMgYXBwbGljYXRpb24gdG8gbWFuYWdlIA0KKyAgdGhlIEhBU0ggY29udHJvbGxlciBldmVudHM6IFBvbGxpbmcgbW9kZSBvciBJbnRlcnJ1cHQgbW9kZS4NCisgIA0KKyAgMS4gIEluIHRoZSBQb2xsaW5nIE1vZGUgaXQgaXMgYWR2aXNlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQorICAgICAgLSBIQVNIX0dldEZsYWdTdGF0dXMoKSA6IHRvIGNoZWNrIGlmIGZsYWdzIGV2ZW50cyBvY2N1ci4gDQorICAgICAgLSBIQVNIX0NsZWFyRmxhZygpICAgICA6IHRvIGNsZWFyIHRoZSBmbGFncyBldmVudHMuDQorICAgIA0KKyAgMi4gIEluIHRoZSBJbnRlcnJ1cHQgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAtIEhBU0hfSVRDb25maWcoKSAgICAgICA6IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgc291cmNlLg0KKyAgICAgIC0gSEFTSF9HZXRJVFN0YXR1cygpICAgIDogdG8gY2hlY2sgaWYgSW50ZXJydXB0IG9jY3Vycy4NCisgICAgICAtIEhBU0hfQ2xlYXJJVFBlbmRpbmdCaXQoKSA6IHRvIGNsZWFyIHRoZSBJbnRlcnJ1cHQgcGVuZGluZyBCaXQgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ycmVzcG9uZGluZyBGbGFnKS4gDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLyANCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBIQVNIIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgSEFTSF9JVDogc3BlY2lmaWVzIHRoZSBIQVNIIGludGVycnVwdCBzb3VyY2UgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfSVRfRElOSTogRGF0YSBJbnB1dCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfSVRfRENJOiBEaWdlc3QgQ2FsY3VsYXRpb24gQ29tcGxldGlvbiBJbnRlcnJ1cHQNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgSEFTSCBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBIQVNIX0lUQ29uZmlnKHVpbnQ4X3QgSEFTSF9JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSEFTSF9JVChIQVNIX0lUKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgSEFTSCBpbnRlcnJ1cHQgKi8NCisgICAgSEFTSC0+SU1SIHw9IEhBU0hfSVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEhBU0ggaW50ZXJydXB0ICovDQorICAgIEhBU0gtPklNUiAmPSAodWludDhfdCkgfkhBU0hfSVQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSEFTSCBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgSEFTSF9GTEFHOiBzcGVjaWZpZXMgdGhlIEhBU0ggZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfRkxBR19ESU5JUzogRGF0YSBpbnB1dCBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfRkxBR19EQ0lTOiBEaWdlc3QgY2FsY3VsYXRpb24gY29tcGxldGlvbiBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfRkxBR19CVVNZOiBCdXN5IGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfRkxBR19ETUFTOiBETUFTIFN0YXR1cyBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBIQVNIX0ZMQUdfRElOTkU6IERhdGEgSW5wdXQgcmVnaXN0ZXIgKERJTikgbm90IGVtcHR5IHN0YXR1cyBmbGFnDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBIQVNIX0ZMQUcgKFNFVCBvciBSRVNFVCkNCisgICovDQorRmxhZ1N0YXR1cyBIQVNIX0dldEZsYWdTdGF0dXModWludDE2X3QgSEFTSF9GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCB0ZW1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSEFTSF9HRVRfRkxBRyhIQVNIX0ZMQUcpKTsNCisNCisgIC8qIGNoZWNrIGlmIHRoZSBGTEFHIGlzIGluIENSIHJlZ2lzdGVyICovDQorICBpZiAoKEhBU0hfRkxBRyAmIEhBU0hfRkxBR19ESU5ORSkgIT0gKHVpbnQxNl90KVJFU0VUICkgDQorICB7DQorICAgIHRlbXByZWcgPSBIQVNILT5DUjsNCisgIH0NCisgIGVsc2UgLyogVGhlIEZMQUcgaXMgaW4gU1IgcmVnaXN0ZXIgKi8NCisgIHsNCisgICAgdGVtcHJlZyA9IEhBU0gtPlNSOw0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIEhBU0ggZmxhZyAqLw0KKyAgaWYgKCh0ZW1wcmVnICYgSEFTSF9GTEFHKSAhPSAodWludDE2X3QpUkVTRVQpDQorICB7DQorICAgIC8qIEhBU0ggaXMgc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogSEFTSF9GTEFHIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKw0KKyAgLyogUmV0dXJuIHRoZSBIQVNIX0ZMQUcgc3RhdHVzICovDQorICByZXR1cm4gIGJpdHN0YXR1czsNCit9DQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBIQVNIIGZsYWdzLg0KKyAgKiBAcGFyYW0gIEhBU0hfRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNsZWFyLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfRkxBR19ESU5JUzogRGF0YSBJbnB1dCBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBIQVNIX0ZMQUdfRENJUzogRGlnZXN0IENhbGN1bGF0aW9uIENvbXBsZXRpb24gRmxhZyAgICAgICAgICAgICAgICAgICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEhBU0hfQ2xlYXJGbGFnKHVpbnQxNl90IEhBU0hfRkxBRykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfQ0xFQVJfRkxBRyhIQVNIX0ZMQUcpKTsNCisgIA0KKyAgLyogQ2xlYXIgdGhlIHNlbGVjdGVkIEhBU0ggZmxhZ3MgKi8NCisgIEhBU0gtPlNSID0gfih1aW50MzJfdClIQVNIX0ZMQUc7DQorfQ0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSEFTSCBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4NCisgICogQHBhcmFtICBIQVNIX0lUOiBzcGVjaWZpZXMgdGhlIEhBU0ggaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfSVRfRElOSTogRGF0YSBJbnB1dCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIEhBU0hfSVRfRENJOiBEaWdlc3QgQ2FsY3VsYXRpb24gQ29tcGxldGlvbiBJbnRlcnJ1cHQNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEhBU0hfSVQgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0lUU3RhdHVzIEhBU0hfR2V0SVRTdGF0dXModWludDhfdCBIQVNIX0lUKQ0KK3sNCisgIElUU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSEFTSF9HRVRfSVQoSEFTSF9JVCkpOyAgDQorDQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgSEFTSCBpbnRlcnJ1cHQgKi8NCisgIHRtcHJlZyA9ICBIQVNILT5TUjsNCisNCisgIGlmICgoKEhBU0gtPklNUiAmIHRtcHJlZykgJiBIQVNIX0lUKSAhPSBSRVNFVCkNCisgIHsNCisgICAgLyogSEFTSF9JVCBpcyBzZXQgKi8NCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBIQVNIX0lUIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBIQVNIX0lUIHN0YXR1cyAqLw0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBIQVNIIGludGVycnVwdCBwZW5kaW5nIGJpdChzKS4NCisgICogQHBhcmFtICBIQVNIX0lUOiBzcGVjaWZpZXMgdGhlIEhBU0ggaW50ZXJydXB0IHBlbmRpbmcgYml0KHMpIHRvIGNsZWFyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgSEFTSF9JVF9ESU5JOiBEYXRhIElucHV0IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgSEFTSF9JVF9EQ0k6IERpZ2VzdCBDYWxjdWxhdGlvbiBDb21wbGV0aW9uIEludGVycnVwdA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBIQVNIX0NsZWFySVRQZW5kaW5nQml0KHVpbnQ4X3QgSEFTSF9JVCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0hBU0hfSVQoSEFTSF9JVCkpOw0KKw0KKyAgLyogQ2xlYXIgdGhlIHNlbGVjdGVkIEhBU0ggaW50ZXJydXB0IHBlbmRpbmcgYml0ICovDQorICBIQVNILT5TUiA9ICh1aW50OF90KX5IQVNIX0lUOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9oYXNoX21kNS5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9oYXNoX21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjM0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2hhc2hfbWQ1LmMKQEAgLTAsMCArMSwzMjAgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9oYXNoX21kNS5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgaGlnaCBsZXZlbCBmdW5jdGlvbnMgdG8gY29tcHV0ZSB0aGUgSEFTSCBNRDUgYW5kDQorICAqICAgICAgICAgIEhNQUMgTUQ1IERpZ2VzdCBvZiBhbiBpbnB1dCBtZXNzYWdlLg0KKyAgKiAgICAgICAgICBJdCB1c2VzIHRoZSBzdG0zMmYyeHhfaGFzaC5jLy5oIGRyaXZlcnMgdG8gYWNjZXNzIHRoZSBTVE0zMkYyeHggSEFTSA0KKyAgKiAgICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKg0KKyAgKiAgQHZlcmJhdGltDQorICAqICAgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgMS4gRW5hYmxlIFRoZSBIQVNIIGNvbnRyb2xsZXIgY2xvY2sgdXNpbmcgDQorICAqICAgICAgICAgICAgUkNDX0FIQjJQZXJpcGhDbG9ja0NtZChSQ0NfQUhCMlBlcmlwaF9IQVNILCBFTkFCTEUpOyBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgMi4gQ2FsY3VsYXRlIHRoZSBIQVNIIE1ENSBEaWdlc3QgdXNpbmcgSEFTSF9NRDUoKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgMy4gQ2FsY3VsYXRlIHRoZSBITUFDIE1ENSBEaWdlc3QgdXNpbmcgSE1BQ19NRDUoKSBmdW5jdGlvbi4NCisgICoNCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2hhc2guaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBIQVNIIA0KKyAgKiBAYnJpZWYgSEFTSCBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2RlZmluZSBNRDVCVVNZX1RJTUVPVVQgICAgKCh1aW50MzJfdCkgMHgwMDAxMDAwMCkNCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSEFTSF9Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBIQVNIX0dyb3VwNyBIaWdoIExldmVsIE1ENSBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSGlnaCBMZXZlbCBNRDUgSGFzaCBhbmQgSE1BQyBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgSGlnaCBMZXZlbCBNRDUgSGFzaCBhbmQgSE1BQyBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDb21wdXRlIHRoZSBIQVNIIE1ENSBkaWdlc3QuDQorICAqIEBwYXJhbSAgSW5wdXQ6IHBvaW50ZXIgdG8gdGhlIElucHV0IGJ1ZmZlciB0byBiZSB0cmVhdGVkLg0KKyAgKiBAcGFyYW0gIElsZW46IGxlbmd0aCBvZiB0aGUgSW5wdXQgYnVmZmVyLg0KKyAgKiBAcGFyYW0gIE91dHB1dDogdGhlIHJldHVybmVkIGRpZ2VzdA0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IGRpZ2VzdCBjb21wdXRhdGlvbiBkb25lDQorICAqICAgICAgICAgIC0gRVJST1I6IGRpZ2VzdCBjb21wdXRhdGlvbiBmYWlsZWQNCisgICovDQorRXJyb3JTdGF0dXMgSEFTSF9NRDUodWludDhfdCAqSW5wdXQsIHVpbnQzMl90IElsZW4sIHVpbnQ4X3QgT3V0cHV0WzE2XSkNCit7DQorICBIQVNIX0luaXRUeXBlRGVmIE1ENV9IQVNIX0luaXRTdHJ1Y3R1cmU7DQorICBIQVNIX01zZ0RpZ2VzdCBNRDVfTWVzc2FnZURpZ2VzdDsNCisgIF9fSU8gdWludDE2X3QgbmJ2YWxpZGJpdHNkYXRhID0gMDsNCisgIHVpbnQzMl90IGkgPSAwOw0KKyAgX19JTyB1aW50MzJfdCBjb3VudGVyID0gMDsNCisgIHVpbnQzMl90IGJ1c3lzdGF0dXMgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsNCisgIHVpbnQzMl90IGlucHV0YWRkciAgPSAodWludDMyX3QpSW5wdXQ7DQorICB1aW50MzJfdCBvdXRwdXRhZGRyID0gKHVpbnQzMl90KU91dHB1dDsNCisNCisNCisgIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgSW5wdXQgZGF0YSAqLw0KKyAgbmJ2YWxpZGJpdHNkYXRhID0gOCAqIChJbGVuICUgNCk7DQorDQorICAvKiBIQVNIIHBlcmlwaGVyYWwgaW5pdGlhbGl6YXRpb24gKi8NCisgIEhBU0hfRGVJbml0KCk7DQorDQorICAvKiBIQVNIIENvbmZpZ3VyYXRpb24gKi8NCisgIE1ENV9IQVNIX0luaXRTdHJ1Y3R1cmUuSEFTSF9BbGdvU2VsZWN0aW9uID0gSEFTSF9BbGdvU2VsZWN0aW9uX01ENTsNCisgIE1ENV9IQVNIX0luaXRTdHJ1Y3R1cmUuSEFTSF9BbGdvTW9kZSA9IEhBU0hfQWxnb01vZGVfSEFTSDsNCisgIE1ENV9IQVNIX0luaXRTdHJ1Y3R1cmUuSEFTSF9EYXRhVHlwZSA9IEhBU0hfRGF0YVR5cGVfOGI7DQorICBIQVNIX0luaXQoJk1ENV9IQVNIX0luaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIGRhdGEgKi8NCisgIEhBU0hfU2V0TGFzdFdvcmRWYWxpZEJpdHNOYnIobmJ2YWxpZGJpdHNkYXRhKTsNCisNCisgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLw0KKyAgZm9yKGk9MDsgaTxJbGVuOyBpKz00KQ0KKyAgew0KKyAgICBIQVNIX0RhdGFJbigqKHVpbnQzMl90KilpbnB1dGFkZHIpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorICB9DQorDQorICAvKiBTdGFydCB0aGUgSEFTSCBwcm9jZXNzb3IgKi8NCisgIEhBU0hfU3RhcnREaWdlc3QoKTsNCisNCisgIC8qIHdhaXQgdW50aWwgdGhlIEJ1c3kgZmxhZyBpcyBSRVNFVCAqLw0KKyAgZG8NCisgIHsNCisgICAgYnVzeXN0YXR1cyA9IEhBU0hfR2V0RmxhZ1N0YXR1cyhIQVNIX0ZMQUdfQlVTWSk7DQorICAgIGNvdW50ZXIrKzsNCisgIH13aGlsZSAoKGNvdW50ZXIgIT0gTUQ1QlVTWV9USU1FT1VUKSAmJiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkpOw0KKw0KKyAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICB7DQorICAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogUmVhZCB0aGUgbWVzc2FnZSBkaWdlc3QgKi8NCisgICAgSEFTSF9HZXREaWdlc3QoJk1ENV9NZXNzYWdlRGlnZXN0KTsNCisgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpICA9IF9fUkVWKE1ENV9NZXNzYWdlRGlnZXN0LkRhdGFbMF0pOw0KKyAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoTUQ1X01lc3NhZ2VEaWdlc3QuRGF0YVsxXSk7DQorICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihNRDVfTWVzc2FnZURpZ2VzdC5EYXRhWzJdKTsNCisgICAgb3V0cHV0YWRkcis9NDsNCisgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpICA9IF9fUkVWKE1ENV9NZXNzYWdlRGlnZXN0LkRhdGFbM10pOw0KKyAgfQ0KKyAgcmV0dXJuIHN0YXR1czsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbXB1dGUgdGhlIEhNQUMgTUQ1IGRpZ2VzdC4NCisgICogQHBhcmFtICBLZXk6IHBvaW50ZXIgdG8gdGhlIEtleSB1c2VkIGZvciBITUFDLg0KKyAgKiBAcGFyYW0gIEtleWxlbjogbGVuZ3RoIG9mIHRoZSBLZXkgdXNlZCBmb3IgSE1BQy4NCisgICogQHBhcmFtICBJbnB1dDogcG9pbnRlciB0byB0aGUgSW5wdXQgYnVmZmVyIHRvIGJlIHRyZWF0ZWQuDQorICAqIEBwYXJhbSAgSWxlbjogbGVuZ3RoIG9mIHRoZSBJbnB1dCBidWZmZXIuDQorICAqIEBwYXJhbSAgT3V0cHV0OiB0aGUgcmV0dXJuZWQgZGlnZXN0ICANCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBkaWdlc3QgY29tcHV0YXRpb24gZG9uZQ0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBkaWdlc3QgY29tcHV0YXRpb24gZmFpbGVkDQorICAqLw0KK0Vycm9yU3RhdHVzIEhNQUNfTUQ1KHVpbnQ4X3QgKktleSwgdWludDMyX3QgS2V5bGVuLCB1aW50OF90ICpJbnB1dCwgDQorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSWxlbiwgdWludDhfdCBPdXRwdXRbMTZdKQ0KK3sNCisgIEhBU0hfSW5pdFR5cGVEZWYgTUQ1X0hBU0hfSW5pdFN0cnVjdHVyZTsNCisgIEhBU0hfTXNnRGlnZXN0IE1ENV9NZXNzYWdlRGlnZXN0Ow0KKyAgX19JTyB1aW50MTZfdCBuYnZhbGlkYml0c2RhdGEgPSAwOw0KKyAgX19JTyB1aW50MTZfdCBuYnZhbGlkYml0c2tleSA9IDA7DQorICB1aW50MzJfdCBpID0gMDsNCisgIF9fSU8gdWludDMyX3QgY291bnRlciA9IDA7DQorICB1aW50MzJfdCBidXN5c3RhdHVzID0gMDsNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7DQorICB1aW50MzJfdCBrZXlhZGRyICAgID0gKHVpbnQzMl90KUtleTsNCisgIHVpbnQzMl90IGlucHV0YWRkciAgPSAodWludDMyX3QpSW5wdXQ7DQorICB1aW50MzJfdCBvdXRwdXRhZGRyID0gKHVpbnQzMl90KU91dHB1dDsNCisNCisgIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgSW5wdXQgZGF0YSAqLw0KKyAgbmJ2YWxpZGJpdHNkYXRhID0gOCAqIChJbGVuICUgNCk7DQorDQorICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIEtleSAqLw0KKyAgbmJ2YWxpZGJpdHNrZXkgPSA4ICogKEtleWxlbiAlIDQpOw0KKyAgIA0KKyAgLyogSEFTSCBwZXJpcGhlcmFsIGluaXRpYWxpemF0aW9uICovDQorICBIQVNIX0RlSW5pdCgpOw0KKw0KKyAgLyogSEFTSCBDb25maWd1cmF0aW9uICovDQorICBNRDVfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfQWxnb1NlbGVjdGlvbiA9IEhBU0hfQWxnb1NlbGVjdGlvbl9NRDU7DQorICBNRDVfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfQWxnb01vZGUgPSBIQVNIX0FsZ29Nb2RlX0hNQUM7DQorICBNRDVfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfRGF0YVR5cGUgPSBIQVNIX0RhdGFUeXBlXzhiOw0KKyAgaWYoS2V5bGVuID4gNjQpDQorICB7DQorICAgIC8qIEhNQUMgbG9uZyBLZXkgKi8NCisgICAgTUQ1X0hBU0hfSW5pdFN0cnVjdHVyZS5IQVNIX0hNQUNLZXlUeXBlID0gSEFTSF9ITUFDS2V5VHlwZV9Mb25nS2V5Ow0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBITUFDIHNob3J0IEtleSAqLw0KKyAgICBNRDVfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfSE1BQ0tleVR5cGUgPSBIQVNIX0hNQUNLZXlUeXBlX1Nob3J0S2V5Ow0KKyAgfQ0KKyAgSEFTSF9Jbml0KCZNRDVfSEFTSF9Jbml0U3RydWN0dXJlKTsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBLZXkgKi8NCisgIEhBU0hfU2V0TGFzdFdvcmRWYWxpZEJpdHNOYnIobmJ2YWxpZGJpdHNrZXkpOw0KKw0KKyAgLyogV3JpdGUgdGhlIEtleSAqLw0KKyAgZm9yKGk9MDsgaTxLZXlsZW47IGkrPTQpDQorICB7DQorICAgIEhBU0hfRGF0YUluKCoodWludDMyX3QqKWtleWFkZHIpOw0KKyAgICBrZXlhZGRyKz00Ow0KKyAgfQ0KKyAgDQorICAvKiBTdGFydCB0aGUgSEFTSCBwcm9jZXNzb3IgKi8NCisgIEhBU0hfU3RhcnREaWdlc3QoKTsNCisNCisgIC8qIHdhaXQgdW50aWwgdGhlIEJ1c3kgZmxhZyBpcyBSRVNFVCAqLw0KKyAgZG8NCisgIHsNCisgICAgYnVzeXN0YXR1cyA9IEhBU0hfR2V0RmxhZ1N0YXR1cyhIQVNIX0ZMQUdfQlVTWSk7DQorICAgIGNvdW50ZXIrKzsNCisgIH13aGlsZSAoKGNvdW50ZXIgIT0gTUQ1QlVTWV9USU1FT1VUKSAmJiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkpOw0KKw0KKyAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICB7DQorICAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIElucHV0IGRhdGEgKi8NCisgICAgSEFTSF9TZXRMYXN0V29yZFZhbGlkQml0c05icihuYnZhbGlkYml0c2RhdGEpOw0KKw0KKyAgICAvKiBXcml0ZSB0aGUgSW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8NCisgICAgZm9yKGk9MDsgaTxJbGVuOyBpKz00KQ0KKyAgICB7DQorICAgICAgSEFTSF9EYXRhSW4oKih1aW50MzJfdCopaW5wdXRhZGRyKTsNCisgICAgICBpbnB1dGFkZHIrPTQ7DQorICAgIH0NCisNCisgICAgLyogU3RhcnQgdGhlIEhBU0ggcHJvY2Vzc29yICovDQorICAgIEhBU0hfU3RhcnREaWdlc3QoKTsNCisNCisgICAgLyogd2FpdCB1bnRpbCB0aGUgQnVzeSBmbGFnIGlzIFJFU0VUICovDQorICAgIGNvdW50ZXIgPTA7DQorICAgIGRvDQorICAgIHsNCisgICAgICAgYnVzeXN0YXR1cyA9IEhBU0hfR2V0RmxhZ1N0YXR1cyhIQVNIX0ZMQUdfQlVTWSk7DQorICAgICAgIGNvdW50ZXIrKzsNCisgICAgfXdoaWxlICgoY291bnRlciAhPSBNRDVCVVNZX1RJTUVPVVQpICYmIChidXN5c3RhdHVzICE9IFJFU0VUKSk7DQorDQorICAgIGlmIChidXN5c3RhdHVzICE9IFJFU0VUKQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7ICANCisgICAgICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgS2V5ICovDQorICAgICAgSEFTSF9TZXRMYXN0V29yZFZhbGlkQml0c05icihuYnZhbGlkYml0c2tleSk7DQorDQorICAgICAgLyogV3JpdGUgdGhlIEtleSAqLw0KKyAgICAgIGtleWFkZHIgPSAodWludDMyX3QpS2V5Ow0KKyAgICAgIGZvcihpPTA7IGk8S2V5bGVuOyBpKz00KQ0KKyAgICAgIHsNCisgICAgICAgIEhBU0hfRGF0YUluKCoodWludDMyX3QqKWtleWFkZHIpOw0KKyAgICAgICAga2V5YWRkcis9NDsNCisgICAgICB9DQorICANCisgICAgICAgLyogU3RhcnQgdGhlIEhBU0ggcHJvY2Vzc29yICovDQorICAgICAgIEhBU0hfU3RhcnREaWdlc3QoKTsNCisNCisgICAgICAgLyogd2FpdCB1bnRpbCB0aGUgQnVzeSBmbGFnIGlzIFJFU0VUICovDQorICAgICAgIGNvdW50ZXIgPTA7DQorICAgICAgIGRvDQorICAgICAgIHsNCisgICAgICAgICAgYnVzeXN0YXR1cyA9IEhBU0hfR2V0RmxhZ1N0YXR1cyhIQVNIX0ZMQUdfQlVTWSk7DQorICAgICAgICAgIGNvdW50ZXIrKzsNCisgICAgICB9d2hpbGUgKChjb3VudGVyICE9IE1ENUJVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgICBpZiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkNCisgICAgICB7DQorICAgICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgICAgfQ0KKyAgICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICAgLyogUmVhZCB0aGUgbWVzc2FnZSBkaWdlc3QgKi8NCisgICAgICAgICBIQVNIX0dldERpZ2VzdCgmTUQ1X01lc3NhZ2VEaWdlc3QpOw0KKyAgICAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihNRDVfTWVzc2FnZURpZ2VzdC5EYXRhWzBdKTsNCisgICAgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihNRDVfTWVzc2FnZURpZ2VzdC5EYXRhWzFdKTsNCisgICAgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihNRDVfTWVzc2FnZURpZ2VzdC5EYXRhWzJdKTsNCisgICAgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihNRDVfTWVzc2FnZURpZ2VzdC5EYXRhWzNdKTsNCisgICAgICB9DQorICAgIH0NCisgIH0NCisgIHJldHVybiBzdGF0dXM7ICANCit9DQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KKw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfaGFzaF9zaGExLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2hhc2hfc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDQ5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2hhc2hfc2hhMS5jCkBAIC0wLDAgKzEsMzIzIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfaGFzaF9zaGExLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBoaWdoIGxldmVsIGZ1bmN0aW9ucyB0byBjb21wdXRlIHRoZSBIQVNIIFNIQTEgYW5kDQorICAqICAgICAgICAgIEhNQUMgU0hBMSBEaWdlc3Qgb2YgYW4gaW5wdXQgbWVzc2FnZS4NCisgICogICAgICAgICAgSXQgdXNlcyB0aGUgc3RtMzJmMnh4X2hhc2guYy8uaCBkcml2ZXJzIHRvIGFjY2VzcyB0aGUgU1RNMzJGMnh4IEhBU0gNCisgICogICAgICAgICAgcGVyaXBoZXJhbC4NCisgICoNCisgICogIEB2ZXJiYXRpbQ0KKyAgKiANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgIDEuIEVuYWJsZSBUaGUgSEFTSCBjb250cm9sbGVyIGNsb2NrIHVzaW5nIA0KKyAgKiAgICAgICAgICAgIFJDQ19BSEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FIQjJQZXJpcGhfSEFTSCwgRU5BQkxFKTsgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDIuIENhbGN1bGF0ZSB0aGUgSEFTSCBTSEExIERpZ2VzdCB1c2luZyBIQVNIX1NIQTEoKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgMy4gQ2FsY3VsYXRlIHRoZSBITUFDIFNIQTEgRGlnZXN0IHVzaW5nIEhNQUNfU0hBMSgpIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfaGFzaC5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEhBU0ggDQorICAqIEBicmllZiBIQVNIIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLw0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjZGVmaW5lIFNIQTFCVVNZX1RJTUVPVVQgICAgKCh1aW50MzJfdCkgMHgwMDAxMDAwMCkNCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSEFTSF9Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyoqIEBkZWZncm91cCBIQVNIX0dyb3VwNiBIaWdoIExldmVsIFNIQTEgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEhpZ2ggTGV2ZWwgU0hBMSBIYXNoIGFuZCBITUFDIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICBIaWdoIExldmVsIFNIQTEgSGFzaCBhbmQgSE1BQyBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDb21wdXRlIHRoZSBIQVNIIFNIQTEgZGlnZXN0Lg0KKyAgKiBAcGFyYW0gIElucHV0OiBwb2ludGVyIHRvIHRoZSBJbnB1dCBidWZmZXIgdG8gYmUgdHJlYXRlZC4NCisgICogQHBhcmFtICBJbGVuOiBsZW5ndGggb2YgdGhlIElucHV0IGJ1ZmZlci4NCisgICogQHBhcmFtICBPdXRwdXQ6IHRoZSByZXR1cm5lZCBkaWdlc3QNCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBkaWdlc3QgY29tcHV0YXRpb24gZG9uZQ0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBkaWdlc3QgY29tcHV0YXRpb24gZmFpbGVkDQorICAqLw0KK0Vycm9yU3RhdHVzIEhBU0hfU0hBMSh1aW50OF90ICpJbnB1dCwgdWludDMyX3QgSWxlbiwgdWludDhfdCBPdXRwdXRbMjBdKQ0KK3sNCisgIEhBU0hfSW5pdFR5cGVEZWYgU0hBMV9IQVNIX0luaXRTdHJ1Y3R1cmU7DQorICBIQVNIX01zZ0RpZ2VzdCBTSEExX01lc3NhZ2VEaWdlc3Q7DQorICBfX0lPIHVpbnQxNl90IG5idmFsaWRiaXRzZGF0YSA9IDA7DQorICB1aW50MzJfdCBpID0gMDsNCisgIF9fSU8gdWludDMyX3QgY291bnRlciA9IDA7DQorICB1aW50MzJfdCBidXN5c3RhdHVzID0gMDsNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7DQorICB1aW50MzJfdCBpbnB1dGFkZHIgID0gKHVpbnQzMl90KUlucHV0Ow0KKyAgdWludDMyX3Qgb3V0cHV0YWRkciA9ICh1aW50MzJfdClPdXRwdXQ7DQorDQorICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIElucHV0IGRhdGEgKi8NCisgIG5idmFsaWRiaXRzZGF0YSA9IDggKiAoSWxlbiAlIDQpOw0KKw0KKyAgLyogSEFTSCBwZXJpcGhlcmFsIGluaXRpYWxpemF0aW9uICovDQorICBIQVNIX0RlSW5pdCgpOw0KKw0KKyAgLyogSEFTSCBDb25maWd1cmF0aW9uICovDQorICBTSEExX0hBU0hfSW5pdFN0cnVjdHVyZS5IQVNIX0FsZ29TZWxlY3Rpb24gPSBIQVNIX0FsZ29TZWxlY3Rpb25fU0hBMTsNCisgIFNIQTFfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfQWxnb01vZGUgPSBIQVNIX0FsZ29Nb2RlX0hBU0g7DQorICBTSEExX0hBU0hfSW5pdFN0cnVjdHVyZS5IQVNIX0RhdGFUeXBlID0gSEFTSF9EYXRhVHlwZV84YjsNCisgIEhBU0hfSW5pdCgmU0hBMV9IQVNIX0luaXRTdHJ1Y3R1cmUpOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIGRhdGEgKi8NCisgIEhBU0hfU2V0TGFzdFdvcmRWYWxpZEJpdHNOYnIobmJ2YWxpZGJpdHNkYXRhKTsNCisNCisgIC8qIFdyaXRlIHRoZSBJbnB1dCBibG9jayBpbiB0aGUgSU4gRklGTyAqLw0KKyAgZm9yKGk9MDsgaTxJbGVuOyBpKz00KQ0KKyAgew0KKyAgICBIQVNIX0RhdGFJbigqKHVpbnQzMl90KilpbnB1dGFkZHIpOw0KKyAgICBpbnB1dGFkZHIrPTQ7DQorICB9DQorDQorICAvKiBTdGFydCB0aGUgSEFTSCBwcm9jZXNzb3IgKi8NCisgIEhBU0hfU3RhcnREaWdlc3QoKTsNCisNCisgIC8qIHdhaXQgdW50aWwgdGhlIEJ1c3kgZmxhZyBpcyBSRVNFVCAqLw0KKyAgZG8NCisgIHsNCisgICAgYnVzeXN0YXR1cyA9IEhBU0hfR2V0RmxhZ1N0YXR1cyhIQVNIX0ZMQUdfQlVTWSk7DQorICAgIGNvdW50ZXIrKzsNCisgIH13aGlsZSAoKGNvdW50ZXIgIT0gU0hBMUJVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgIGlmIChidXN5c3RhdHVzICE9IFJFU0VUKQ0KKyAgew0KKyAgICAgc3RhdHVzID0gRVJST1I7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFJlYWQgdGhlIG1lc3NhZ2UgZGlnZXN0ICovDQorICAgIEhBU0hfR2V0RGlnZXN0KCZTSEExX01lc3NhZ2VEaWdlc3QpOw0KKyAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoU0hBMV9NZXNzYWdlRGlnZXN0LkRhdGFbMF0pOw0KKyAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoU0hBMV9NZXNzYWdlRGlnZXN0LkRhdGFbMV0pOw0KKyAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoU0hBMV9NZXNzYWdlRGlnZXN0LkRhdGFbMl0pOw0KKyAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoU0hBMV9NZXNzYWdlRGlnZXN0LkRhdGFbM10pOw0KKyAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoU0hBMV9NZXNzYWdlRGlnZXN0LkRhdGFbNF0pOw0KKyAgfQ0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29tcHV0ZSB0aGUgSE1BQyBTSEExIGRpZ2VzdC4NCisgICogQHBhcmFtICBLZXk6IHBvaW50ZXIgdG8gdGhlIEtleSB1c2VkIGZvciBITUFDLg0KKyAgKiBAcGFyYW0gIEtleWxlbjogbGVuZ3RoIG9mIHRoZSBLZXkgdXNlZCBmb3IgSE1BQy4gIA0KKyAgKiBAcGFyYW0gIElucHV0OiBwb2ludGVyIHRvIHRoZSBJbnB1dCBidWZmZXIgdG8gYmUgdHJlYXRlZC4NCisgICogQHBhcmFtICBJbGVuOiBsZW5ndGggb2YgdGhlIElucHV0IGJ1ZmZlci4NCisgICogQHBhcmFtICBPdXRwdXQ6IHRoZSByZXR1cm5lZCBkaWdlc3QNCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBkaWdlc3QgY29tcHV0YXRpb24gZG9uZQ0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBkaWdlc3QgY29tcHV0YXRpb24gZmFpbGVkDQorICAqLw0KK0Vycm9yU3RhdHVzIEhNQUNfU0hBMSh1aW50OF90ICpLZXksIHVpbnQzMl90IEtleWxlbiwgdWludDhfdCAqSW5wdXQsDQorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElsZW4sIHVpbnQ4X3QgT3V0cHV0WzIwXSkNCit7DQorICBIQVNIX0luaXRUeXBlRGVmIFNIQTFfSEFTSF9Jbml0U3RydWN0dXJlOw0KKyAgSEFTSF9Nc2dEaWdlc3QgU0hBMV9NZXNzYWdlRGlnZXN0Ow0KKyAgX19JTyB1aW50MTZfdCBuYnZhbGlkYml0c2RhdGEgPSAwOw0KKyAgX19JTyB1aW50MTZfdCBuYnZhbGlkYml0c2tleSA9IDA7DQorICB1aW50MzJfdCBpID0gMDsNCisgIF9fSU8gdWludDMyX3QgY291bnRlciA9IDA7DQorICB1aW50MzJfdCBidXN5c3RhdHVzID0gMDsNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7DQorICB1aW50MzJfdCBrZXlhZGRyICAgID0gKHVpbnQzMl90KUtleTsNCisgIHVpbnQzMl90IGlucHV0YWRkciAgPSAodWludDMyX3QpSW5wdXQ7DQorICB1aW50MzJfdCBvdXRwdXRhZGRyID0gKHVpbnQzMl90KU91dHB1dDsNCisNCisgIC8qIE51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgSW5wdXQgZGF0YSAqLw0KKyAgbmJ2YWxpZGJpdHNkYXRhID0gOCAqIChJbGVuICUgNCk7DQorDQorICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIEtleSAqLw0KKyAgbmJ2YWxpZGJpdHNrZXkgPSA4ICogKEtleWxlbiAlIDQpOw0KKw0KKyAgLyogSEFTSCBwZXJpcGhlcmFsIGluaXRpYWxpemF0aW9uICovDQorICBIQVNIX0RlSW5pdCgpOw0KKw0KKyAgLyogSEFTSCBDb25maWd1cmF0aW9uICovDQorICBTSEExX0hBU0hfSW5pdFN0cnVjdHVyZS5IQVNIX0FsZ29TZWxlY3Rpb24gPSBIQVNIX0FsZ29TZWxlY3Rpb25fU0hBMTsNCisgIFNIQTFfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfQWxnb01vZGUgPSBIQVNIX0FsZ29Nb2RlX0hNQUM7DQorICBTSEExX0hBU0hfSW5pdFN0cnVjdHVyZS5IQVNIX0RhdGFUeXBlID0gSEFTSF9EYXRhVHlwZV84YjsNCisgIGlmKEtleWxlbiA+IDY0KQ0KKyAgew0KKyAgICAvKiBITUFDIGxvbmcgS2V5ICovDQorICAgIFNIQTFfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfSE1BQ0tleVR5cGUgPSBIQVNIX0hNQUNLZXlUeXBlX0xvbmdLZXk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIEhNQUMgc2hvcnQgS2V5ICovDQorICAgIFNIQTFfSEFTSF9Jbml0U3RydWN0dXJlLkhBU0hfSE1BQ0tleVR5cGUgPSBIQVNIX0hNQUNLZXlUeXBlX1Nob3J0S2V5Ow0KKyAgfQ0KKyAgSEFTSF9Jbml0KCZTSEExX0hBU0hfSW5pdFN0cnVjdHVyZSk7DQorDQorICAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiB2YWxpZCBiaXRzIGluIGxhc3Qgd29yZCBvZiB0aGUgS2V5ICovDQorICBIQVNIX1NldExhc3RXb3JkVmFsaWRCaXRzTmJyKG5idmFsaWRiaXRza2V5KTsNCisNCisgIC8qIFdyaXRlIHRoZSBLZXkgKi8NCisgIGZvcihpPTA7IGk8S2V5bGVuOyBpKz00KQ0KKyAgew0KKyAgICBIQVNIX0RhdGFJbigqKHVpbnQzMl90KilrZXlhZGRyKTsNCisgICAga2V5YWRkcis9NDsNCisgIH0NCisNCisgIC8qIFN0YXJ0IHRoZSBIQVNIIHByb2Nlc3NvciAqLw0KKyAgSEFTSF9TdGFydERpZ2VzdCgpOw0KKw0KKyAgLyogd2FpdCB1bnRpbCB0aGUgQnVzeSBmbGFnIGlzIFJFU0VUICovDQorICBkbw0KKyAgew0KKyAgICBidXN5c3RhdHVzID0gSEFTSF9HZXRGbGFnU3RhdHVzKEhBU0hfRkxBR19CVVNZKTsNCisgICAgY291bnRlcisrOw0KKyAgfXdoaWxlICgoY291bnRlciAhPSBTSEExQlVTWV9USU1FT1VUKSAmJiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkpOw0KKw0KKyAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICB7DQorICAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgdmFsaWQgYml0cyBpbiBsYXN0IHdvcmQgb2YgdGhlIElucHV0IGRhdGEgKi8NCisgICAgSEFTSF9TZXRMYXN0V29yZFZhbGlkQml0c05icihuYnZhbGlkYml0c2RhdGEpOw0KKw0KKyAgICAvKiBXcml0ZSB0aGUgSW5wdXQgYmxvY2sgaW4gdGhlIElOIEZJRk8gKi8NCisgICAgZm9yKGk9MDsgaTxJbGVuOyBpKz00KQ0KKyAgICB7DQorICAgICAgSEFTSF9EYXRhSW4oKih1aW50MzJfdCopaW5wdXRhZGRyKTsNCisgICAgICBpbnB1dGFkZHIrPTQ7DQorICAgIH0NCisNCisgICAgLyogU3RhcnQgdGhlIEhBU0ggcHJvY2Vzc29yICovDQorICAgIEhBU0hfU3RhcnREaWdlc3QoKTsNCisNCisNCisgICAgLyogd2FpdCB1bnRpbCB0aGUgQnVzeSBmbGFnIGlzIFJFU0VUICovDQorICAgIGNvdW50ZXIgPTA7DQorICAgIGRvDQorICAgIHsNCisgICAgICBidXN5c3RhdHVzID0gSEFTSF9HZXRGbGFnU3RhdHVzKEhBU0hfRkxBR19CVVNZKTsNCisgICAgICBjb3VudGVyKys7DQorICAgIH13aGlsZSAoKGNvdW50ZXIgIT0gU0hBMUJVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgaWYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpDQorICAgIHsNCisgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsgIA0KKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIHZhbGlkIGJpdHMgaW4gbGFzdCB3b3JkIG9mIHRoZSBLZXkgKi8NCisgICAgICBIQVNIX1NldExhc3RXb3JkVmFsaWRCaXRzTmJyKG5idmFsaWRiaXRza2V5KTsNCisNCisgICAgICAvKiBXcml0ZSB0aGUgS2V5ICovDQorICAgICAga2V5YWRkciA9ICh1aW50MzJfdClLZXk7DQorICAgICAgZm9yKGk9MDsgaTxLZXlsZW47IGkrPTQpDQorICAgICAgew0KKyAgICAgICAgSEFTSF9EYXRhSW4oKih1aW50MzJfdCopa2V5YWRkcik7DQorICAgICAgICBrZXlhZGRyKz00Ow0KKyAgICAgIH0NCisNCisgICAgICAvKiBTdGFydCB0aGUgSEFTSCBwcm9jZXNzb3IgKi8NCisgICAgICBIQVNIX1N0YXJ0RGlnZXN0KCk7DQorDQorICAgICAgLyogd2FpdCB1bnRpbCB0aGUgQnVzeSBmbGFnIGlzIFJFU0VUICovDQorICAgICAgY291bnRlciA9MDsNCisgICAgICBkbw0KKyAgICAgIHsNCisgICAgICAgIGJ1c3lzdGF0dXMgPSBIQVNIX0dldEZsYWdTdGF0dXMoSEFTSF9GTEFHX0JVU1kpOw0KKyAgICAgICAgY291bnRlcisrOw0KKyAgICAgIH13aGlsZSAoKGNvdW50ZXIgIT0gU0hBMUJVU1lfVElNRU9VVCkgJiYgKGJ1c3lzdGF0dXMgIT0gUkVTRVQpKTsNCisNCisgICAgICBpZiAoYnVzeXN0YXR1cyAhPSBSRVNFVCkNCisgICAgICB7DQorICAgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgICB9DQorICAgICAgZWxzZQ0KKyAgICAgIHsNCisgICAgICAgIC8qIFJlYWQgdGhlIG1lc3NhZ2UgZGlnZXN0ICovDQorICAgICAgICBIQVNIX0dldERpZ2VzdCgmU0hBMV9NZXNzYWdlRGlnZXN0KTsNCisgICAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihTSEExX01lc3NhZ2VEaWdlc3QuRGF0YVswXSk7DQorICAgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpICA9IF9fUkVWKFNIQTFfTWVzc2FnZURpZ2VzdC5EYXRhWzFdKTsNCisgICAgICAgIG91dHB1dGFkZHIrPTQ7DQorICAgICAgICAqKHVpbnQzMl90Kikob3V0cHV0YWRkcikgID0gX19SRVYoU0hBMV9NZXNzYWdlRGlnZXN0LkRhdGFbMl0pOw0KKyAgICAgICAgb3V0cHV0YWRkcis9NDsNCisgICAgICAgICoodWludDMyX3QqKShvdXRwdXRhZGRyKSAgPSBfX1JFVihTSEExX01lc3NhZ2VEaWdlc3QuRGF0YVszXSk7DQorICAgICAgICBvdXRwdXRhZGRyKz00Ow0KKyAgICAgICAgKih1aW50MzJfdCopKG91dHB1dGFkZHIpICA9IF9fUkVWKFNIQTFfTWVzc2FnZURpZ2VzdC5EYXRhWzRdKTsNCisgICAgICB9DQorICAgIH0gIA0KKyAgfQ0KKyAgcmV0dXJuIHN0YXR1czsgIA0KK30NCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9pMmMuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjMjRjMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfaTJjLmMKQEAgLTAsMCArMSwxNDAxIEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfaTJjLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgSW50ZXItaW50ZWdyYXRlZCBjaXJjdWl0IChJMkMpDQorICAqICAgICAgICAgICAtIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIERhdGEgdHJhbnNmZXJzDQorICAqICAgICAgICAgICAtIFBFQyBtYW5hZ2VtZW50DQorICAqICAgICAgICAgICAtIERNQSB0cmFuc2ZlcnMgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgLSBJbnRlcnJ1cHRzLCBldmVudHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgDQorICAqICAgICAgICAgICANCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAxLiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jayB1c2luZyBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKFJDQ19BUEIxUGVyaXBoX0kyQ3gsIEVOQUJMRSkNCisgICogICAgICAgICAgICAgZnVuY3Rpb24gZm9yIEkyQzEsIEkyQzIgb3IgSTJDMy4NCisgICoNCisgICogICAgICAgICAgMi4gRW5hYmxlIFNEQSwgU0NMICBhbmQgU01CQSAod2hlbiB1c2VkKSBHUElPIGNsb2NrcyB1c2luZyANCisgICogICAgICAgICAgICAgUkNDX0FIQlBlcmlwaENsb2NrQ21kKCkgZnVuY3Rpb24uIA0KKyAgKg0KKyAgKiAgICAgICAgICAzLiBQZXJpcGhlcmFscyBhbHRlcm5hdGUgZnVuY3Rpb246IA0KKyAgKiAgICAgICAgICAgICAgICAgLSBDb25uZWN0IHRoZSBwaW4gdG8gdGhlIGRlc2lyZWQgcGVyaXBoZXJhbHMnIEFsdGVybmF0ZSANCisgICogICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gKEFGKSB1c2luZyBHUElPX1BpbkFGQ29uZmlnKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBkZXNpcmVkIHBpbiBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gYnk6DQorICAqICAgICAgICAgICAgICAgICAgIEdQSU9fSW5pdFN0cnVjdC0+R1BJT19Nb2RlID0gR1BJT19Nb2RlX0FGDQorICAqICAgICAgICAgICAgICAgICAtIFNlbGVjdCB0aGUgdHlwZSwgcHVsbC11cC9wdWxsLWRvd24gYW5kIG91dHB1dCBzcGVlZCB2aWEgDQorICAqICAgICAgICAgICAgICAgICAgIEdQSU9fUHVQZCwgR1BJT19PVHlwZSBhbmQgR1BJT19TcGVlZCBtZW1iZXJzDQorICAqICAgICAgICAgICAgICAgICAtIENhbGwgR1BJT19Jbml0KCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgIFJlY29tbWVuZGVkIGNvbmZpZ3VyYXRpb24gaXMgUHVzaC1QdWxsLCBQdWxsLXVwLCBPcGVuLURyYWluLg0KKyAgKiAgICAgICAgICAgICAgICAgQWRkIGFuIGV4dGVybmFsIHB1bGwgdXAgaWYgbmVjZXNzYXJ5ICh0eXBpY2FsbHkgNC43IEtPaG0pLiAgICAgIA0KKyAgKiAgICAgICAgDQorICAqICAgICAgICAgIDQuIFByb2dyYW0gdGhlIE1vZGUsIGR1dHkgY3ljbGUgLCBPd24gYWRkcmVzcywgQWNrLCBTcGVlZCBhbmQgQWNrbm93bGVkZ2VkDQorICAqICAgICAgICAgICAgIEFkZHJlc3MgdXNpbmcgdGhlIEkyQ19Jbml0KCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDUuIE9wdGlvbmFsbHkgeW91IGNhbiBlbmFibGUvY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyB3aXRob3V0DQorICAqICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIChpLmUgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGFnYWluIEkyQ19Jbml0KCkgZnVuY3Rpb24pOg0KKyAgKiAgICAgICAgICAgICAgLSBFbmFibGUgdGhlIGFja25vd2xlZGdlIGZlYXR1cmUgdXNpbmcgSTJDX0Fja25vd2xlZGdlQ29uZmlnKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgIC0gRW5hYmxlIHRoZSBkdWFsIGFkZHJlc3NpbmcgbW9kZSB1c2luZyBJMkNfRHVhbEFkZHJlc3NDbWQoKSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgLSBFbmFibGUgdGhlIGdlbmVyYWwgY2FsbCB1c2luZyB0aGUgSTJDX0dlbmVyYWxDYWxsQ21kKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgIC0gRW5hYmxlIHRoZSBjbG9jayBzdHJldGNoaW5nIHVzaW5nIEkyQ19TdHJldGNoQ2xvY2tDbWQoKSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgLSBFbmFibGUgdGhlIGZhc3QgbW9kZSBkdXR5IGN5Y2xlIHVzaW5nIHRoZSBJMkNfRmFzdE1vZGVEdXR5Q3ljbGVDb25maWcoKQ0KKyAgKiAgICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBOQUNLIHBvc2l0aW9uIGZvciBNYXN0ZXIgUmVjZWl2ZXIgbW9kZSBpbiBjYXNlIG9mIA0KKyAgKiAgICAgICAgICAgICAgICAyIGJ5dGVzIHJlY2VwdGlvbiB1c2luZyB0aGUgZnVuY3Rpb24gSTJDX05BQ0tQb3NpdGlvbkNvbmZpZygpLiAgDQorICAqICAgICAgICAgICAgICAtIEVuYWJsZSB0aGUgUEVDIENhbGN1bGF0aW9uIHVzaW5nIEkyQ19DYWxjdWxhdGVQRUMoKSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgLSBGb3IgU01CdXMgTW9kZTogDQorICAqICAgICAgICAgICAgICAgICAgIC0gRW5hYmxlIHRoZSBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkgdXNpbmcgSTJDX0FSUENtZCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBTTUJ1c0FsZXJ0IHBpbiB1c2luZyBJMkNfU01CdXNBbGVydENvbmZpZygpIGZ1bmN0aW9uDQorICAqDQorICAqICAgICAgICAgIDYuIEVuYWJsZSB0aGUgTlZJQyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHVzaW5nIHRoZSBmdW5jdGlvbiANCisgICogICAgICAgICAgICAgSTJDX0lUQ29uZmlnKCkgaWYgeW91IG5lZWQgdG8gdXNlIGludGVycnVwdCBtb2RlLiANCisgICoNCisgICogICAgICAgICAgNy4gV2hlbiB1c2luZyB0aGUgRE1BIG1vZGUgDQorICAqICAgICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBETUEgdXNpbmcgRE1BX0luaXQoKSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgICAgICAtIEFjdGl2ZSB0aGUgbmVlZGVkIGNoYW5uZWwgUmVxdWVzdCB1c2luZyBJMkNfRE1BQ21kKCkgb3INCisgICogICAgICAgICAgICAgICAgICAgICBJMkNfRE1BTGFzdFRyYW5zZmVyQ21kKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgICBAbm90ZSBXaGVuIHVzaW5nIERNQSBtb2RlLCBJMkMgaW50ZXJydXB0cyBtYXkgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lIHRvDQorICAqICAgICAgICAgICAgICAgICAgICBjb250cm9sIHRoZSBjb21tdW5pY2F0aW9uIGZsb3cgKFN0YXJ0L1N0b3AvQWNrLi4uIGV2ZW50cyBhbmQgZXJyb3JzKS4NCisgICogDQorICAqICAgICAgICAgIDguIEVuYWJsZSB0aGUgSTJDIHVzaW5nIHRoZSBJMkNfQ21kKCkgZnVuY3Rpb24uDQorICAqIA0KKyAgKiAgICAgICAgICA5LiBFbmFibGUgdGhlIERNQSB1c2luZyB0aGUgRE1BX0NtZCgpIGZ1bmN0aW9uIHdoZW4gdXNpbmcgRE1BIG1vZGUgaW4gdGhlIA0KKyAgKiAgICAgICAgICAgICB0cmFuc2ZlcnMuIA0KKyAgKg0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9pMmMuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEkyQyANCisgICogQGJyaWVmIEkyQyBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgQ1IxX0NMRUFSX01BU0sgICAgKCh1aW50MTZfdCkweEZCRjUpICAgICAgLyo8ISBJMkMgcmVnaXN0ZXJzIE1hc2tzICovDQorI2RlZmluZSBGTEFHX01BU0sgICAgICAgICAoKHVpbnQzMl90KTB4MDBGRkZGRkYpICAvKjwhIEkyQyBGTEFHIG1hc2sgKi8NCisjZGVmaW5lIElURU5fTUFTSyAgICAgICAgICgodWludDMyX3QpMHgwNzAwMDAwMCkgIC8qPCEgSTJDIEludGVycnVwdCBFbmFibGUgbWFzayAqLw0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBJMkNfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBJMkNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZSB0aGUgSTJDeCBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX0RlSW5pdChJMkNfVHlwZURlZiogSTJDeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisNCisgIGlmIChJMkN4ID09IEkyQzEpDQorICB7DQorICAgIC8qIEVuYWJsZSBJMkMxIHJlc2V0IHN0YXRlICovDQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfSTJDMSwgRU5BQkxFKTsNCisgICAgLyogUmVsZWFzZSBJMkMxIGZyb20gcmVzZXQgc3RhdGUgKi8NCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9JMkMxLCBESVNBQkxFKTsgICAgDQorICB9DQorICBlbHNlIGlmIChJMkN4ID09IEkyQzIpDQorICB7DQorICAgIC8qIEVuYWJsZSBJMkMyIHJlc2V0IHN0YXRlICovDQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfSTJDMiwgRU5BQkxFKTsNCisgICAgLyogUmVsZWFzZSBJMkMyIGZyb20gcmVzZXQgc3RhdGUgKi8NCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9JMkMyLCBESVNBQkxFKTsgICAgICANCisgIH0NCisgIGVsc2UgDQorICB7DQorICAgIGlmIChJMkN4ID09IEkyQzMpDQorICAgIHsNCisgICAgICAvKiBFbmFibGUgSTJDMyByZXNldCBzdGF0ZSAqLw0KKyAgICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfSTJDMywgRU5BQkxFKTsNCisgICAgICAvKiBSZWxlYXNlIEkyQzMgZnJvbSByZXNldCBzdGF0ZSAqLw0KKyAgICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfSTJDMywgRElTQUJMRSk7ICAgICANCisgICAgfQ0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgSTJDeCBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIA0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIEkyQ19Jbml0U3RydWN0Lg0KKyAgKiAgICAgICAgICAgDQorICAqIEBub3RlICAgVG8gdXNlIHRoZSBJMkMgYXQgNDAwIEtIeiAoaW4gZmFzdCBtb2RlKSwgdGhlIFBDTEsxIGZyZXF1ZW5jeSANCisgICogICAgICAgICAoSTJDIHBlcmlwaGVyYWwgaW5wdXQgY2xvY2spIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxMCBNSHouICANCisgICogICAgICAgICAgIA0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ19Jbml0U3RydWN0OiBwb2ludGVyIHRvIGEgSTJDX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIA0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfSW5pdChJMkNfVHlwZURlZiogSTJDeCwgSTJDX0luaXRUeXBlRGVmKiBJMkNfSW5pdFN0cnVjdCkNCit7DQorICB1aW50MTZfdCB0bXByZWcgPSAwLCBmcmVxcmFuZ2UgPSAwOw0KKyAgdWludDE2X3QgcmVzdWx0ID0gMHgwNDsNCisgIHVpbnQzMl90IHBjbGsxID0gODAwMDAwMDsNCisgIFJDQ19DbG9ja3NUeXBlRGVmICByY2NfY2xvY2tzOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0NMT0NLX1NQRUVEKEkyQ19Jbml0U3RydWN0LT5JMkNfQ2xvY2tTcGVlZCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19NT0RFKEkyQ19Jbml0U3RydWN0LT5JMkNfTW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19EVVRZX0NZQ0xFKEkyQ19Jbml0U3RydWN0LT5JMkNfRHV0eUN5Y2xlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX09XTl9BRERSRVNTMShJMkNfSW5pdFN0cnVjdC0+STJDX093bkFkZHJlc3MxKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FDS19TVEFURShJMkNfSW5pdFN0cnVjdC0+STJDX0FjaykpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BQ0tOT1dMRURHRV9BRERSRVNTKEkyQ19Jbml0U3RydWN0LT5JMkNfQWNrbm93bGVkZ2VkQWRkcmVzcykpOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJMkN4IENSMiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBHZXQgdGhlIEkyQ3ggQ1IyIHZhbHVlICovDQorICB0bXByZWcgPSBJMkN4LT5DUjI7DQorICAvKiBDbGVhciBmcmVxdWVuY3kgRlJFUVs1OjBdIGJpdHMgKi8NCisgIHRtcHJlZyAmPSAodWludDE2X3QpfigodWludDE2X3QpSTJDX0NSMl9GUkVRKTsNCisgIC8qIEdldCBwY2xrMSBmcmVxdWVuY3kgdmFsdWUgKi8NCisgIFJDQ19HZXRDbG9ja3NGcmVxKCZyY2NfY2xvY2tzKTsNCisgIHBjbGsxID0gcmNjX2Nsb2Nrcy5QQ0xLMV9GcmVxdWVuY3k7DQorICAvKiBTZXQgZnJlcXVlbmN5IGJpdHMgZGVwZW5kaW5nIG9uIHBjbGsxIHZhbHVlICovDQorICBmcmVxcmFuZ2UgPSAodWludDE2X3QpKHBjbGsxIC8gMTAwMDAwMCk7DQorICB0bXByZWcgfD0gZnJlcXJhbmdlOw0KKyAgLyogV3JpdGUgdG8gSTJDeCBDUjIgKi8NCisgIEkyQ3gtPkNSMiA9IHRtcHJlZzsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJDeCBDQ1IgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgSTJDIHBlcmlwaGVyYWwgdG8gY29uZmlndXJlIFRSSVNFICovDQorICBJMkN4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KUkyQ19DUjFfUEUpOw0KKyAgLyogUmVzZXQgdG1wcmVnIHZhbHVlICovDQorICAvKiBDbGVhciBGL1MsIERVVFkgYW5kIENDUlsxMTowXSBiaXRzICovDQorICB0bXByZWcgPSAwOw0KKw0KKyAgLyogQ29uZmlndXJlIHNwZWVkIGluIHN0YW5kYXJkIG1vZGUgKi8NCisgIGlmIChJMkNfSW5pdFN0cnVjdC0+STJDX0Nsb2NrU3BlZWQgPD0gMTAwMDAwKQ0KKyAgew0KKyAgICAvKiBTdGFuZGFyZCBtb2RlIHNwZWVkIGNhbGN1bGF0ZSAqLw0KKyAgICByZXN1bHQgPSAodWludDE2X3QpKHBjbGsxIC8gKEkyQ19Jbml0U3RydWN0LT5JMkNfQ2xvY2tTcGVlZCA8PCAxKSk7DQorICAgIC8qIFRlc3QgaWYgQ0NSIHZhbHVlIGlzIHVuZGVyIDB4NCovDQorICAgIGlmIChyZXN1bHQgPCAweDA0KQ0KKyAgICB7DQorICAgICAgLyogU2V0IG1pbmltdW0gYWxsb3dlZCB2YWx1ZSAqLw0KKyAgICAgIHJlc3VsdCA9IDB4MDQ7ICANCisgICAgfQ0KKyAgICAvKiBTZXQgc3BlZWQgdmFsdWUgZm9yIHN0YW5kYXJkIG1vZGUgKi8NCisgICAgdG1wcmVnIHw9IHJlc3VsdDsJICANCisgICAgLyogU2V0IE1heGltdW0gUmlzZSBUaW1lIGZvciBzdGFuZGFyZCBtb2RlICovDQorICAgIEkyQ3gtPlRSSVNFID0gZnJlcXJhbmdlICsgMTsgDQorICB9DQorICAvKiBDb25maWd1cmUgc3BlZWQgaW4gZmFzdCBtb2RlICovDQorICAvKiBUbyB1c2UgdGhlIEkyQyBhdCA0MDAgS0h6IChpbiBmYXN0IG1vZGUpLCB0aGUgUENMSzEgZnJlcXVlbmN5IChJMkMgcGVyaXBoZXJhbA0KKyAgICAgaW5wdXQgY2xvY2spIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxMCBNSHogKi8NCisgIGVsc2UgLyooSTJDX0luaXRTdHJ1Y3QtPkkyQ19DbG9ja1NwZWVkIDw9IDQwMDAwMCkqLw0KKyAgew0KKyAgICBpZiAoSTJDX0luaXRTdHJ1Y3QtPkkyQ19EdXR5Q3ljbGUgPT0gSTJDX0R1dHlDeWNsZV8yKQ0KKyAgICB7DQorICAgICAgLyogRmFzdCBtb2RlIHNwZWVkIGNhbGN1bGF0ZTogVGxvdy9UaGlnaCA9IDIgKi8NCisgICAgICByZXN1bHQgPSAodWludDE2X3QpKHBjbGsxIC8gKEkyQ19Jbml0U3RydWN0LT5JMkNfQ2xvY2tTcGVlZCAqIDMpKTsNCisgICAgfQ0KKyAgICBlbHNlIC8qSTJDX0luaXRTdHJ1Y3QtPkkyQ19EdXR5Q3ljbGUgPT0gSTJDX0R1dHlDeWNsZV8xNl85Ki8NCisgICAgew0KKyAgICAgIC8qIEZhc3QgbW9kZSBzcGVlZCBjYWxjdWxhdGU6IFRsb3cvVGhpZ2ggPSAxNi85ICovDQorICAgICAgcmVzdWx0ID0gKHVpbnQxNl90KShwY2xrMSAvIChJMkNfSW5pdFN0cnVjdC0+STJDX0Nsb2NrU3BlZWQgKiAyNSkpOw0KKyAgICAgIC8qIFNldCBEVVRZIGJpdCAqLw0KKyAgICAgIHJlc3VsdCB8PSBJMkNfRHV0eUN5Y2xlXzE2Xzk7DQorICAgIH0NCisNCisgICAgLyogVGVzdCBpZiBDQ1IgdmFsdWUgaXMgdW5kZXIgMHgxKi8NCisgICAgaWYgKChyZXN1bHQgJiBJMkNfQ0NSX0NDUikgPT0gMCkNCisgICAgew0KKyAgICAgIC8qIFNldCBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKi8NCisgICAgICByZXN1bHQgfD0gKHVpbnQxNl90KTB4MDAwMTsgIA0KKyAgICB9DQorICAgIC8qIFNldCBzcGVlZCB2YWx1ZSBhbmQgc2V0IEYvUyBiaXQgZm9yIGZhc3QgbW9kZSAqLw0KKyAgICB0bXByZWcgfD0gKHVpbnQxNl90KShyZXN1bHQgfCBJMkNfQ0NSX0ZTKTsNCisgICAgLyogU2V0IE1heGltdW0gUmlzZSBUaW1lIGZvciBmYXN0IG1vZGUgKi8NCisgICAgSTJDeC0+VFJJU0UgPSAodWludDE2X3QpKCgoZnJlcXJhbmdlICogKHVpbnQxNl90KTMwMCkgLyAodWludDE2X3QpMTAwMCkgKyAodWludDE2X3QpMSk7ICANCisgIH0NCisNCisgIC8qIFdyaXRlIHRvIEkyQ3ggQ0NSICovDQorICBJMkN4LT5DQ1IgPSB0bXByZWc7DQorICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEkyQyBwZXJpcGhlcmFsICovDQorICBJMkN4LT5DUjEgfD0gSTJDX0NSMV9QRTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJDeCBDUjEgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogR2V0IHRoZSBJMkN4IENSMSB2YWx1ZSAqLw0KKyAgdG1wcmVnID0gSTJDeC0+Q1IxOw0KKyAgLyogQ2xlYXIgQUNLLCBTTUJUWVBFIGFuZCAgU01CVVMgYml0cyAqLw0KKyAgdG1wcmVnICY9IENSMV9DTEVBUl9NQVNLOw0KKyAgLyogQ29uZmlndXJlIEkyQ3g6IG1vZGUgYW5kIGFja25vd2xlZGdlbWVudCAqLw0KKyAgLyogU2V0IFNNQlRZUEUgYW5kIFNNQlVTIGJpdHMgYWNjb3JkaW5nIHRvIEkyQ19Nb2RlIHZhbHVlICovDQorICAvKiBTZXQgQUNLIGJpdCBhY2NvcmRpbmcgdG8gSTJDX0FjayB2YWx1ZSAqLw0KKyAgdG1wcmVnIHw9ICh1aW50MTZfdCkoKHVpbnQzMl90KUkyQ19Jbml0U3RydWN0LT5JMkNfTW9kZSB8IEkyQ19Jbml0U3RydWN0LT5JMkNfQWNrKTsNCisgIC8qIFdyaXRlIHRvIEkyQ3ggQ1IxICovDQorICBJMkN4LT5DUjEgPSB0bXByZWc7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEkyQ3ggT0FSMSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIC8qIFNldCBJMkN4IE93biBBZGRyZXNzMSBhbmQgYWNrbm93bGVkZ2VkIGFkZHJlc3MgKi8NCisgIEkyQ3gtPk9BUjEgPSAoSTJDX0luaXRTdHJ1Y3QtPkkyQ19BY2tub3dsZWRnZWRBZGRyZXNzIHwgSTJDX0luaXRTdHJ1Y3QtPkkyQ19Pd25BZGRyZXNzMSk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggSTJDX0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgSTJDX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYW4gSTJDX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfU3RydWN0SW5pdChJMkNfSW5pdFR5cGVEZWYqIEkyQ19Jbml0U3RydWN0KQ0KK3sNCisvKi0tLS0tLS0tLS0tLS0tLS0gUmVzZXQgSTJDIGluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogaW5pdGlhbGl6ZSB0aGUgSTJDX0Nsb2NrU3BlZWQgbWVtYmVyICovDQorICBJMkNfSW5pdFN0cnVjdC0+STJDX0Nsb2NrU3BlZWQgPSA1MDAwOw0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgSTJDX01vZGUgbWVtYmVyICovDQorICBJMkNfSW5pdFN0cnVjdC0+STJDX01vZGUgPSBJMkNfTW9kZV9JMkM7DQorICAvKiBJbml0aWFsaXplIHRoZSBJMkNfRHV0eUN5Y2xlIG1lbWJlciAqLw0KKyAgSTJDX0luaXRTdHJ1Y3QtPkkyQ19EdXR5Q3ljbGUgPSBJMkNfRHV0eUN5Y2xlXzI7DQorICAvKiBJbml0aWFsaXplIHRoZSBJMkNfT3duQWRkcmVzczEgbWVtYmVyICovDQorICBJMkNfSW5pdFN0cnVjdC0+STJDX093bkFkZHJlc3MxID0gMDsNCisgIC8qIEluaXRpYWxpemUgdGhlIEkyQ19BY2sgbWVtYmVyICovDQorICBJMkNfSW5pdFN0cnVjdC0+STJDX0FjayA9IEkyQ19BY2tfRGlzYWJsZTsNCisgIC8qIEluaXRpYWxpemUgdGhlIEkyQ19BY2tub3dsZWRnZWRBZGRyZXNzIG1lbWJlciAqLw0KKyAgSTJDX0luaXRTdHJ1Y3QtPkkyQ19BY2tub3dsZWRnZWRBZGRyZXNzID0gSTJDX0Fja25vd2xlZGdlZEFkZHJlc3NfN2JpdDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIEkyQ3ggcGVyaXBoZXJhbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEkyQ19DbWQoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBJMkMgcGVyaXBoZXJhbCAqLw0KKyAgICBJMkN4LT5DUjEgfD0gSTJDX0NSMV9QRTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgSTJDIHBlcmlwaGVyYWwgKi8NCisgICAgSTJDeC0+Q1IxICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClJMkNfQ1IxX1BFKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgR2VuZXJhdGVzIEkyQ3ggY29tbXVuaWNhdGlvbiBTVEFSVCBjb25kaXRpb24uDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDIFNUQVJUIGNvbmRpdGlvbiBnZW5lcmF0aW9uLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUuDQorICAqLw0KK3ZvaWQgSTJDX0dlbmVyYXRlU1RBUlQoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogR2VuZXJhdGUgYSBTVEFSVCBjb25kaXRpb24gKi8NCisgICAgSTJDeC0+Q1IxIHw9IEkyQ19DUjFfU1RBUlQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFNUQVJUIGNvbmRpdGlvbiBnZW5lcmF0aW9uICovDQorICAgIEkyQ3gtPkNSMSAmPSAodWludDE2X3QpfigodWludDE2X3QpSTJDX0NSMV9TVEFSVCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEdlbmVyYXRlcyBJMkN4IGNvbW11bmljYXRpb24gU1RPUCBjb25kaXRpb24uDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDIFNUT1AgY29uZGl0aW9uIGdlbmVyYXRpb24uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZS4NCisgICovDQordm9pZCBJMkNfR2VuZXJhdGVTVE9QKEkyQ19UeXBlRGVmKiBJMkN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEdlbmVyYXRlIGEgU1RPUCBjb25kaXRpb24gKi8NCisgICAgSTJDeC0+Q1IxIHw9IEkyQ19DUjFfU1RPUDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgU1RPUCBjb25kaXRpb24gZ2VuZXJhdGlvbiAqLw0KKyAgICBJMkN4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KUkyQ19DUjFfU1RPUCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFRyYW5zbWl0cyB0aGUgYWRkcmVzcyBieXRlIHRvIHNlbGVjdCB0aGUgc2xhdmUgZGV2aWNlLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEFkZHJlc3M6IHNwZWNpZmllcyB0aGUgc2xhdmUgYWRkcmVzcyB3aGljaCB3aWxsIGJlIHRyYW5zbWl0dGVkDQorICAqIEBwYXJhbSAgSTJDX0RpcmVjdGlvbjogc3BlY2lmaWVzIHdoZXRoZXIgdGhlIEkyQyBkZXZpY2Ugd2lsbCBiZSBhIFRyYW5zbWl0dGVyDQorICAqICAgICAgICAgb3IgYSBSZWNlaXZlci4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMNCisgICogICAgICAgICAgICBAYXJnIEkyQ19EaXJlY3Rpb25fVHJhbnNtaXR0ZXI6IFRyYW5zbWl0dGVyIG1vZGUNCisgICogICAgICAgICAgICBAYXJnIEkyQ19EaXJlY3Rpb25fUmVjZWl2ZXI6IFJlY2VpdmVyIG1vZGUNCisgICogQHJldHZhbCBOb25lLg0KKyAgKi8NCit2b2lkIEkyQ19TZW5kN2JpdEFkZHJlc3MoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQ4X3QgQWRkcmVzcywgdWludDhfdCBJMkNfRGlyZWN0aW9uKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19ESVJFQ1RJT04oSTJDX0RpcmVjdGlvbikpOw0KKyAgLyogVGVzdCBvbiB0aGUgZGlyZWN0aW9uIHRvIHNldC9yZXNldCB0aGUgcmVhZC93cml0ZSBiaXQgKi8NCisgIGlmIChJMkNfRGlyZWN0aW9uICE9IEkyQ19EaXJlY3Rpb25fVHJhbnNtaXR0ZXIpDQorICB7DQorICAgIC8qIFNldCB0aGUgYWRkcmVzcyBiaXQwIGZvciByZWFkICovDQorICAgIEFkZHJlc3MgfD0gSTJDX09BUjFfQUREMDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogUmVzZXQgdGhlIGFkZHJlc3MgYml0MCBmb3Igd3JpdGUgKi8NCisgICAgQWRkcmVzcyAmPSAodWludDhfdCl+KCh1aW50OF90KUkyQ19PQVIxX0FERDApOw0KKyAgfQ0KKyAgLyogU2VuZCB0aGUgYWRkcmVzcyAqLw0KKyAgSTJDeC0+RFIgPSBBZGRyZXNzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgSTJDIGFja25vd2xlZGdlIGZlYXR1cmUuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDIEFja25vd2xlZGdlbWVudC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lLg0KKyAgKi8NCit2b2lkIEkyQ19BY2tub3dsZWRnZUNvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIGFja25vd2xlZGdlbWVudCAqLw0KKyAgICBJMkN4LT5DUjEgfD0gSTJDX0NSMV9BQ0s7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIGFja25vd2xlZGdlbWVudCAqLw0KKyAgICBJMkN4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KUkyQ19DUjFfQUNLKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgc3BlY2lmaWVkIEkyQyBvd24gYWRkcmVzczIuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQWRkcmVzczogc3BlY2lmaWVzIHRoZSA3Yml0IEkyQyBvd24gYWRkcmVzczIuDQorICAqIEByZXR2YWwgTm9uZS4NCisgICovDQordm9pZCBJMkNfT3duQWRkcmVzczJDb25maWcoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQ4X3QgQWRkcmVzcykNCit7DQorICB1aW50MTZfdCB0bXByZWcgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorDQorICAvKiBHZXQgdGhlIG9sZCByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wcmVnID0gSTJDeC0+T0FSMjsNCisNCisgIC8qIFJlc2V0IEkyQ3ggT3duIGFkZHJlc3MyIGJpdCBbNzoxXSAqLw0KKyAgdG1wcmVnICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClJMkNfT0FSMl9BREQyKTsNCisNCisgIC8qIFNldCBJMkN4IE93biBhZGRyZXNzMiAqLw0KKyAgdG1wcmVnIHw9ICh1aW50MTZfdCkoKHVpbnQxNl90KUFkZHJlc3MgJiAodWludDE2X3QpMHgwMEZFKTsNCisNCisgIC8qIFN0b3JlIHRoZSBuZXcgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIEkyQ3gtPk9BUjIgPSB0bXByZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBJMkMgZHVhbCBhZGRyZXNzaW5nIG1vZGUuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDIGR1YWwgYWRkcmVzc2luZyBtb2RlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfRHVhbEFkZHJlc3NDbWQoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIGR1YWwgYWRkcmVzc2luZyBtb2RlICovDQorICAgIEkyQ3gtPk9BUjIgfD0gSTJDX09BUjJfRU5EVUFMOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIGR1YWwgYWRkcmVzc2luZyBtb2RlICovDQorICAgIEkyQ3gtPk9BUjIgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KUkyQ19PQVIyX0VORFVBTCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBJMkMgZ2VuZXJhbCBjYWxsIGZlYXR1cmUuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDIEdlbmVyYWwgY2FsbC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX0dlbmVyYWxDYWxsQ21kKEkyQ19UeXBlRGVmKiBJMkN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSBnZW5lcmFsbCBjYWxsICovDQorICAgIEkyQ3gtPkNSMSB8PSBJMkNfQ1IxX0VOR0M7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgZ2VuZXJhbGwgY2FsbCAqLw0KKyAgICBJMkN4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KUkyQ19DUjFfRU5HQyk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBJMkMgc29mdHdhcmUgcmVzZXQuDQorICAqIEBub3RlICAgV2hlbiBzb2Z0d2FyZSByZXNldCBpcyBlbmFibGVkLCB0aGUgSTJDIElPcyBhcmUgcmVsZWFzZWQgKHRoaXMgY2FuDQorICAqICAgICAgICAgYmUgdXNlZnVsIHRvIHJlY292ZXIgZnJvbSBidXMgZXJyb3JzKS4gIA0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIEkyQyBzb2Z0d2FyZSByZXNldC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX1NvZnR3YXJlUmVzZXRDbWQoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogUGVyaXBoZXJhbCB1bmRlciByZXNldCAqLw0KKyAgICBJMkN4LT5DUjEgfD0gSTJDX0NSMV9TV1JTVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogUGVyaXBoZXJhbCBub3QgdW5kZXIgcmVzZXQgKi8NCisgICAgSTJDeC0+Q1IxICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClJMkNfQ1IxX1NXUlNUKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIEkyQyBDbG9jayBzdHJldGNoaW5nLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIEkyQ3ggQ2xvY2sgc3RyZXRjaGluZy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX1N0cmV0Y2hDbG9ja0NtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSA9PSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEkyQyBDbG9jayBzdHJldGNoaW5nICovDQorICAgIEkyQ3gtPkNSMSB8PSBJMkNfQ1IxX05PU1RSRVRDSDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgSTJDIENsb2NrIHN0cmV0Y2hpbmcgKi8NCisgICAgSTJDeC0+Q1IxICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClJMkNfQ1IxX05PU1RSRVRDSCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBJMkMgZmFzdCBtb2RlIGR1dHkgY3ljbGUuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgSTJDX0R1dHlDeWNsZTogc3BlY2lmaWVzIHRoZSBmYXN0IG1vZGUgZHV0eSBjeWNsZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19EdXR5Q3ljbGVfMjogSTJDIGZhc3QgbW9kZSBUbG93L1RoaWdoID0gMg0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0R1dHlDeWNsZV8xNl85OiBJMkMgZmFzdCBtb2RlIFRsb3cvVGhpZ2ggPSAxNi85DQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEkyQ19GYXN0TW9kZUR1dHlDeWNsZUNvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDE2X3QgSTJDX0R1dHlDeWNsZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19JMkNfRFVUWV9DWUNMRShJMkNfRHV0eUN5Y2xlKSk7DQorICBpZiAoSTJDX0R1dHlDeWNsZSAhPSBJMkNfRHV0eUN5Y2xlXzE2XzkpDQorICB7DQorICAgIC8qIEkyQyBmYXN0IG1vZGUgVGxvdy9UaGlnaD0yICovDQorICAgIEkyQ3gtPkNDUiAmPSBJMkNfRHV0eUN5Y2xlXzI7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIEkyQyBmYXN0IG1vZGUgVGxvdy9UaGlnaD0xNi85ICovDQorICAgIEkyQ3gtPkNDUiB8PSBJMkNfRHV0eUN5Y2xlXzE2Xzk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBJMkMgTkFDSyBwb3NpdGlvbiBpbiBtYXN0ZXIgcmVjZWl2ZXIgbW9kZS4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBpbiBJMkMgTWFzdGVyIFJlY2VpdmVyIG1vZGUgd2hlbiB0aGUgbnVtYmVyDQorICAqICAgICAgICAgb2YgZGF0YSB0byBiZSByZWNlaXZlZCBpcyBlcXVhbCB0byAyLiBJbiB0aGlzIGNhc2UsIHRoaXMgZnVuY3Rpb24gDQorICAqICAgICAgICAgc2hvdWxkIGJlIGNhbGxlZCAod2l0aCBwYXJhbWV0ZXIgSTJDX05BQ0tQb3NpdGlvbl9OZXh0KSBiZWZvcmUgZGF0YSANCisgICogICAgICAgICByZWNlcHRpb24gc3RhcnRzLGFzIGRlc2NyaWJlZCBpbiB0aGUgMi1ieXRlIHJlY2VwdGlvbiBwcm9jZWR1cmUgDQorICAqICAgICAgICAgcmVjb21tZW5kZWQgaW4gUmVmZXJlbmNlIE1hbnVhbCBpbiBTZWN0aW9uOiBNYXN0ZXIgcmVjZWl2ZXIuICAgICAgICAgICAgICAgIA0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ19OQUNLUG9zaXRpb246IHNwZWNpZmllcyB0aGUgTkFDSyBwb3NpdGlvbi4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBJMkNfTkFDS1Bvc2l0aW9uX05leHQ6IGluZGljYXRlcyB0aGF0IHRoZSBuZXh0IGJ5dGUgd2lsbCBiZSB0aGUgbGFzdA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlZCBieXRlLiAgDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfTkFDS1Bvc2l0aW9uX0N1cnJlbnQ6IGluZGljYXRlcyB0aGF0IGN1cnJlbnQgYnl0ZSBpcyB0aGUgbGFzdCANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQgYnl0ZS4NCisgICogICAgICAgICAgICANCisgICogQG5vdGUgICAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBzYW1lIGJpdCAoUE9TKSBhcyBJMkNfUEVDUG9zaXRpb25Db25maWcoKSANCisgICogICAgICAgICAgYnV0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gSTJDIG1vZGUgd2hpbGUgSTJDX1BFQ1Bvc2l0aW9uQ29uZmlnKCkgDQorICAqICAgICAgICAgIGlzIGludGVuZGVkIHRvIHVzZWQgaW4gU01CVVMgbW9kZS4gDQorICAqICAgICAgICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEkyQ19OQUNLUG9zaXRpb25Db25maWcoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQxNl90IEkyQ19OQUNLUG9zaXRpb24pDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX05BQ0tfUE9TSVRJT04oSTJDX05BQ0tQb3NpdGlvbikpOw0KKyAgDQorICAvKiBDaGVjayB0aGUgaW5wdXQgcGFyYW1ldGVyICovDQorICBpZiAoSTJDX05BQ0tQb3NpdGlvbiA9PSBJMkNfTkFDS1Bvc2l0aW9uX05leHQpDQorICB7DQorICAgIC8qIE5leHQgYnl0ZSBpbiBzaGlmdCByZWdpc3RlciBpcyB0aGUgbGFzdCByZWNlaXZlZCBieXRlICovDQorICAgIEkyQ3gtPkNSMSB8PSBJMkNfTkFDS1Bvc2l0aW9uX05leHQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIEN1cnJlbnQgYnl0ZSBpbiBzaGlmdCByZWdpc3RlciBpcyB0aGUgbGFzdCByZWNlaXZlZCBieXRlICovDQorICAgIEkyQ3gtPkNSMSAmPSBJMkNfTkFDS1Bvc2l0aW9uX0N1cnJlbnQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERyaXZlcyB0aGUgU01CdXNBbGVydCBwaW4gaGlnaCBvciBsb3cgZm9yIHRoZSBzcGVjaWZpZWQgSTJDLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ19TTUJ1c0FsZXJ0OiBzcGVjaWZpZXMgU01CQWxlcnQgcGluIGxldmVsLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19TTUJ1c0FsZXJ0X0xvdzogU01CQWxlcnQgcGluIGRyaXZlbiBsb3cNCisgICogICAgICAgICAgICBAYXJnIEkyQ19TTUJ1c0FsZXJ0X0hpZ2g6IFNNQkFsZXJ0IHBpbiBkcml2ZW4gaGlnaA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfU01CdXNBbGVydENvbmZpZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDE2X3QgSTJDX1NNQnVzQWxlcnQpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX1NNQlVTX0FMRVJUKEkyQ19TTUJ1c0FsZXJ0KSk7DQorICBpZiAoSTJDX1NNQnVzQWxlcnQgPT0gSTJDX1NNQnVzQWxlcnRfTG93KQ0KKyAgew0KKyAgICAvKiBEcml2ZSB0aGUgU01CdXNBbGVydCBwaW4gTG93ICovDQorICAgIEkyQ3gtPkNSMSB8PSBJMkNfU01CdXNBbGVydF9Mb3c7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERyaXZlIHRoZSBTTUJ1c0FsZXJ0IHBpbiBIaWdoICAqLw0KKyAgICBJMkN4LT5DUjEgJj0gSTJDX1NNQnVzQWxlcnRfSGlnaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIEkyQyBBUlAuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDeCBBUlAuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfQVJQQ21kKEkyQ19UeXBlRGVmKiBJMkN4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgSTJDIEFSUCAqLw0KKyAgICBJMkN4LT5DUjEgfD0gSTJDX0NSMV9FTkFSUDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgSTJDIEFSUCAqLw0KKyAgICBJMkN4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KUkyQ19DUjFfRU5BUlApOw0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJMkNfR3JvdXAyIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgU2VuZHMgYSBkYXRhIGJ5dGUgdGhyb3VnaCB0aGUgSTJDeCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIERhdGE6IEJ5dGUgdG8gYmUgdHJhbnNtaXR0ZWQuLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfU2VuZERhdGEoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQ4X3QgRGF0YSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIC8qIFdyaXRlIGluIHRoZSBEUiByZWdpc3RlciB0aGUgZGF0YSB0byBiZSBzZW50ICovDQorICBJMkN4LT5EUiA9IERhdGE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHJlY2VpdmVkIGRhdGEgYnkgdGhlIEkyQ3ggcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBUaGUgdmFsdWUgb2YgdGhlIHJlY2VpdmVkIGRhdGEuDQorICAqLw0KK3VpbnQ4X3QgSTJDX1JlY2VpdmVEYXRhKEkyQ19UeXBlRGVmKiBJMkN4KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgLyogUmV0dXJuIHRoZSBkYXRhIGluIHRoZSBEUiByZWdpc3RlciAqLw0KKyAgcmV0dXJuICh1aW50OF90KUkyQ3gtPkRSOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJMkNfR3JvdXAzIFBFQyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBQRUMgbWFuYWdlbWVudCBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBQRUMgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBJMkMgUEVDIHRyYW5zZmVyLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIEkyQyBQRUMgdHJhbnNtaXNzaW9uLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfVHJhbnNtaXRQRUMoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBJMkMgUEVDIHRyYW5zbWlzc2lvbiAqLw0KKyAgICBJMkN4LT5DUjEgfD0gSTJDX0NSMV9QRUM7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEkyQyBQRUMgdHJhbnNtaXNzaW9uICovDQorICAgIEkyQ3gtPkNSMSAmPSAodWludDE2X3QpfigodWludDE2X3QpSTJDX0NSMV9QRUMpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZWxlY3RzIHRoZSBzcGVjaWZpZWQgSTJDIFBFQyBwb3NpdGlvbi4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBJMkNfUEVDUG9zaXRpb246IHNwZWNpZmllcyB0aGUgUEVDIHBvc2l0aW9uLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19QRUNQb3NpdGlvbl9OZXh0OiBpbmRpY2F0ZXMgdGhhdCB0aGUgbmV4dCBieXRlIGlzIFBFQw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX1BFQ1Bvc2l0aW9uX0N1cnJlbnQ6IGluZGljYXRlcyB0aGF0IGN1cnJlbnQgYnl0ZSBpcyBQRUMNCisgICogICAgICAgDQorICAqIEBub3RlICAgIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc2FtZSBiaXQgKFBPUykgYXMgSTJDX05BQ0tQb3NpdGlvbkNvbmZpZygpDQorICAqICAgICAgICAgIGJ1dCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIFNNQlVTIG1vZGUgd2hpbGUgSTJDX05BQ0tQb3NpdGlvbkNvbmZpZygpIA0KKyAgKiAgICAgICAgICBpcyBpbnRlbmRlZCB0byB1c2VkIGluIEkyQyBtb2RlLg0KKyAgKiAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX1BFQ1Bvc2l0aW9uQ29uZmlnKEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50MTZfdCBJMkNfUEVDUG9zaXRpb24pDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX1BFQ19QT1NJVElPTihJMkNfUEVDUG9zaXRpb24pKTsNCisgIGlmIChJMkNfUEVDUG9zaXRpb24gPT0gSTJDX1BFQ1Bvc2l0aW9uX05leHQpDQorICB7DQorICAgIC8qIE5leHQgYnl0ZSBpbiBzaGlmdCByZWdpc3RlciBpcyBQRUMgKi8NCisgICAgSTJDeC0+Q1IxIHw9IEkyQ19QRUNQb3NpdGlvbl9OZXh0Ow0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBDdXJyZW50IGJ5dGUgaW4gc2hpZnQgcmVnaXN0ZXIgaXMgUEVDICovDQorICAgIEkyQ3gtPkNSMSAmPSBJMkNfUEVDUG9zaXRpb25fQ3VycmVudDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgUEVDIHZhbHVlIGNhbGN1bGF0aW9uIG9mIHRoZSB0cmFuc2ZlcnJlZCBieXRlcy4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBJMkN4IFBFQyB2YWx1ZSBjYWxjdWxhdGlvbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX0NhbGN1bGF0ZVBFQyhJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEkyQyBQRUMgY2FsY3VsYXRpb24gKi8NCisgICAgSTJDeC0+Q1IxIHw9IEkyQ19DUjFfRU5QRUM7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEkyQyBQRUMgY2FsY3VsYXRpb24gKi8NCisgICAgSTJDeC0+Q1IxICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClJMkNfQ1IxX0VOUEVDKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgUEVDIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIEkyQy4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBUaGUgUEVDIHZhbHVlLg0KKyAgKi8NCit1aW50OF90IEkyQ19HZXRQRUMoSTJDX1R5cGVEZWYqIEkyQ3gpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICAvKiBSZXR1cm4gdGhlIHNlbGVjdGVkIEkyQyBQRUMgdmFsdWUgKi8NCisgIHJldHVybiAoKEkyQ3gtPlNSMikgPj4gOCk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIEkyQ19Hcm91cDQgRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBJMkMgRE1BIGNoYW5uZWxzIA0KKyAgcmVxdWVzdHMuDQorICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIEkyQyBETUEgcmVxdWVzdHMuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSTJDIERNQSB0cmFuc2Zlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX0RNQUNtZChJMkNfVHlwZURlZiogSTJDeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIEkyQyBETUEgcmVxdWVzdHMgKi8NCisgICAgSTJDeC0+Q1IyIHw9IEkyQ19DUjJfRE1BRU47DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIEkyQyBETUEgcmVxdWVzdHMgKi8NCisgICAgSTJDeC0+Q1IyICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClJMkNfQ1IyX0RNQUVOKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU3BlY2lmaWVzIHRoYXQgdGhlIG5leHQgRE1BIHRyYW5zZmVyIGlzIHRoZSBsYXN0IG9uZS4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBJMkMgRE1BIGxhc3QgdHJhbnNmZXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEkyQ19ETUFMYXN0VHJhbnNmZXJDbWQoSTJDX1R5cGVEZWYqIEkyQ3gsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogTmV4dCBETUEgdHJhbnNmZXIgaXMgdGhlIGxhc3QgdHJhbnNmZXIgKi8NCisgICAgSTJDeC0+Q1IyIHw9IEkyQ19DUjJfTEFTVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogTmV4dCBETUEgdHJhbnNmZXIgaXMgbm90IHRoZSBsYXN0IHRyYW5zZmVyICovDQorICAgIEkyQ3gtPkNSMiAmPSAodWludDE2X3QpfigodWludDE2X3QpSTJDX0NSMl9MQVNUKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSTJDX0dyb3VwNSBJbnRlcnJ1cHRzIGV2ZW50cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cywgZXZlbnRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgSW50ZXJydXB0cywgZXZlbnRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBJMkMgSW50ZXJydXB0cyANCisgIHNvdXJjZXMgYW5kIGNoZWNrIG9yIGNsZWFyIHRoZSBmbGFncyBvciBwZW5kaW5nIGJpdHMgc3RhdHVzLg0KKyAgVGhlIHVzZXIgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIG1vZGUgd2lsbCBiZSB1c2VkIGluIGhpcyBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgDQorICB0aGUgY29tbXVuaWNhdGlvbjogUG9sbGluZyBtb2RlLCBJbnRlcnJ1cHQgbW9kZSBvciBETUEgbW9kZS4gDQorDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQyBTdGF0ZSBNb25pdG9yaW5nIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICANCisgIFRoaXMgSTJDIGRyaXZlciBwcm92aWRlcyB0aHJlZSBkaWZmZXJlbnQgd2F5cyBmb3IgSTJDIHN0YXRlIG1vbml0b3JpbmcNCisgIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzIGFuZCBjb25zdHJhaW50czoNCisgICAgICAgICANCisgICANCisgICAgIDEuIEJhc2ljIHN0YXRlIG1vbml0b3JpbmcgKFVzaW5nIEkyQ19DaGVja0V2ZW50KCkgZnVuY3Rpb24pDQorICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgICAgSXQgY29tcGFyZXMgdGhlIHN0YXR1cyByZWdpc3RlcnMgKFNSMSBhbmQgU1IyKSBjb250ZW50IHRvIGEgZ2l2ZW4gZXZlbnQNCisgICAgICAgIChjYW4gYmUgdGhlIGNvbWJpbmF0aW9uIG9mIG9uZSBvciBtb3JlIGZsYWdzKS4NCisgICAgICAgIEl0IHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgY3VycmVudCBzdGF0dXMgaW5jbHVkZXMgdGhlIGdpdmVuIGZsYWdzIA0KKyAgICAgICAgYW5kIHJldHVybnMgRVJST1IgaWYgb25lIG9yIG1vcmUgZmxhZ3MgYXJlIG1pc3NpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdHVzLg0KKw0KKyAgICAgICAgICAtIFdoZW4gdG8gdXNlDQorICAgICAgICAgICAgIC0gVGhpcyBmdW5jdGlvbiBpcyBzdWl0YWJsZSBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcyBmb3Igc3RhcnR1cCANCisgICAgICAgICAgICAgICBhY3Rpdml0eSBzaW5jZSB0aGUgZXZlbnRzIGFyZSBmdWxseSBkZXNjcmliZWQgaW4gdGhlIHByb2R1Y3QgcmVmZXJlbmNlIA0KKyAgICAgICAgICAgICAgIG1hbnVhbCAoUk0wMDMzKS4NCisgICAgICAgICAgICAgLSBJdCBpcyBhbHNvIHN1aXRhYmxlIGZvciB1c2VycyB3aG8gbmVlZCB0byBkZWZpbmUgdGhlaXIgb3duIGV2ZW50cy4NCisNCisgICAgICAgICAgLSBMaW1pdGF0aW9ucw0KKyAgICAgICAgICAgICAtIElmIGFuIGVycm9yIG9jY3VycyAoaWUuIGVycm9yIGZsYWdzIGFyZSBzZXQgYmVzaWRlcyB0byB0aGUgbW9uaXRvcmVkIA0KKyAgICAgICAgICAgICAgIGZsYWdzKSwgdGhlIEkyQ19DaGVja0V2ZW50KCkgZnVuY3Rpb24gbWF5IHJldHVybiBTVUNDRVNTIGRlc3BpdGUgDQorICAgICAgICAgICAgICAgdGhlIGNvbW11bmljYXRpb24gaG9sZCBvciBjb3JydXB0ZWQgcmVhbCBzdGF0ZS4gDQorICAgICAgICAgICAgICAgSW4gdGhpcyBjYXNlLCBpdCBpcyBhZHZpc2VkIHRvIHVzZSBlcnJvciBpbnRlcnJ1cHRzIHRvIG1vbml0b3IgDQorICAgICAgICAgICAgICAgdGhlIGVycm9yIGV2ZW50cyBhbmQgaGFuZGxlIHRoZW0gaW4gdGhlIGludGVycnVwdCBJUlEgaGFuZGxlci4NCisgICAgICAgICANCisgICAgIEBub3RlIA0KKyAgICAgICAgIEZvciBlcnJvciBtYW5hZ2VtZW50LCBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAgICAgIC0gSTJDX0lUQ29uZmlnKCkgdG8gY29uZmlndXJlIGFuZCBlbmFibGUgdGhlIGVycm9yIGludGVycnVwdHMgKEkyQ19JVF9FUlIpLg0KKyAgICAgICAgICAgLSBJMkN4X0VSX0lSUUhhbmRsZXIoKSB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgaW50ZXJydXB0IG9jY3Vycy4NCisgICAgICAgICAgICAgV2hlcmUgeCBpcyB0aGUgcGVyaXBoZXJhbCBpbnN0YW5jZSAoSTJDMSwgSTJDMiAuLi4pDQorICAgICAgICAgICAtIEkyQ19HZXRGbGFnU3RhdHVzKCkgb3IgSTJDX0dldElUU3RhdHVzKCkgIHRvIGJlIGNhbGxlZCBpbnRvIHRoZSANCisgICAgICAgICAgICAgSTJDeF9FUl9JUlFIYW5kbGVyKCkgZnVuY3Rpb24gaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIGVycm9yIG9jY3VycmVkLg0KKyAgICAgICAgICAgLSBJMkNfQ2xlYXJGbGFnKCkgb3IgSTJDX0NsZWFySVRQZW5kaW5nQml0KCkgYW5kL29yIEkyQ19Tb2Z0d2FyZVJlc2V0Q21kKCkgDQorICAgICAgICAgICAgIGFuZC9vciBJMkNfR2VuZXJhdGVTdG9wKCkgaW4gb3JkZXIgdG8gY2xlYXIgdGhlIGVycm9yIGZsYWcgYW5kIHNvdXJjZSANCisgICAgICAgICAgICAgYW5kIHJldHVybiB0byBjb3JyZWN0ICBjb21tdW5pY2F0aW9uIHN0YXR1cy4NCisgICAgICAgICAgICAgDQorIA0KKyAgICAgMi4gQWR2YW5jZWQgc3RhdGUgbW9uaXRvcmluZyAoVXNpbmcgdGhlIGZ1bmN0aW9uIEkyQ19HZXRMYXN0RXZlbnQoKSkNCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KKyAgICAgICAgVXNpbmcgdGhlIGZ1bmN0aW9uIEkyQ19HZXRMYXN0RXZlbnQoKSB3aGljaCByZXR1cm5zIHRoZSBpbWFnZSBvZiBib3RoIHN0YXR1cyANCisgICAgICAgIHJlZ2lzdGVycyBpbiBhIHNpbmdsZSB3b3JkICh1aW50MzJfdCkgKFN0YXR1cyBSZWdpc3RlciAyIHZhbHVlIGlzIHNoaWZ0ZWQgbGVmdCANCisgICAgICAgIGJ5IDE2IGJpdHMgYW5kIGNvbmNhdGVuYXRlZCB0byBTdGF0dXMgUmVnaXN0ZXIgMSkuDQorDQorICAgICAgICAgIC0gV2hlbiB0byB1c2UNCisgICAgICAgICAgICAgLSBUaGlzIGZ1bmN0aW9uIGlzIHN1aXRhYmxlIGZvciB0aGUgc2FtZSBhcHBsaWNhdGlvbnMgYWJvdmUgYnV0IGl0IA0KKyAgICAgICAgICAgICAgIGFsbG93cyB0byBvdmVyY29tZSB0aGUgbWVudGlvbmVkIGxpbWl0YXRpb24gb2YgSTJDX0dldEZsYWdTdGF0dXMoKSANCisgICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICAgICAgICAgICAgLSBUaGUgcmV0dXJuZWQgdmFsdWUgY291bGQgYmUgY29tcGFyZWQgdG8gZXZlbnRzIGFscmVhZHkgZGVmaW5lZCBpbiANCisgICAgICAgICAgICAgICB0aGUgbGlicmFyeSAoc3RtMzJmMnh4X2kyYy5oKSBvciB0byBjdXN0b20gdmFsdWVzIGRlZmluZWQgYnkgdXNlci4NCisgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHN1aXRhYmxlIHdoZW4gbXVsdGlwbGUgZmxhZ3MgYXJlIG1vbml0b3JlZCBhdCB0aGUgDQorICAgICAgICAgICAgICAgc2FtZSB0aW1lLg0KKyAgICAgICAgICAgICAtIEF0IHRoZSBvcHBvc2l0ZSBvZiBJMkNfQ2hlY2tFdmVudCgpIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uIGFsbG93cyANCisgICAgICAgICAgICAgICB1c2VyIHRvIGNob29zZSB3aGVuIGFuIGV2ZW50IGlzIGFjY2VwdGVkICh3aGVuIGFsbCBldmVudHMgZmxhZ3MgYXJlIA0KKyAgICAgICAgICAgICAgIHNldCBhbmQgbm8gb3RoZXIgZmxhZ3MgYXJlIHNldCBvciBqdXN0IHdoZW4gdGhlIG5lZWRlZCBmbGFncyBhcmUgc2V0IA0KKyAgICAgICAgICAgICAgIGxpa2UgSTJDX0NoZWNrRXZlbnQoKSBmdW5jdGlvbi4NCisNCisgICAgICAgICAgLSBMaW1pdGF0aW9ucw0KKyAgICAgICAgICAgICAtIFVzZXIgbWF5IG5lZWQgdG8gZGVmaW5lIGhpcyBvd24gZXZlbnRzLg0KKyAgICAgICAgICAgICAtIFNhbWUgcmVtYXJrIGNvbmNlcm5pbmcgdGhlIGVycm9yIG1hbmFnZW1lbnQgaXMgYXBwbGljYWJsZSBmb3IgdGhpcyANCisgICAgICAgICAgICAgICBmdW5jdGlvbiBpZiB1c2VyIGRlY2lkZXMgdG8gY2hlY2sgb25seSByZWd1bGFyIGNvbW11bmljYXRpb24gZmxhZ3MgDQorICAgICAgICAgICAgICAgKGFuZCBpZ25vcmVzIGVycm9yIGZsYWdzKS4NCisgICAgICANCisgDQorICAgICAzLiBGbGFnLWJhc2VkIHN0YXRlIG1vbml0b3JpbmcgKFVzaW5nIHRoZSBmdW5jdGlvbiBJMkNfR2V0RmxhZ1N0YXR1cygpKQ0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgIA0KKyAgICAgIFVzaW5nIHRoZSBmdW5jdGlvbiBJMkNfR2V0RmxhZ1N0YXR1cygpIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBzdGF0dXMgb2YgDQorICAgICAgb25lIHNpbmdsZSBmbGFnIChpZS4gSTJDX0ZMQUdfUlhORSAuLi4pLiANCisNCisgICAgICAgICAgLSBXaGVuIHRvIHVzZQ0KKyAgICAgICAgICAgICAtIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgdXNlZCBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zIG9yIGluIGRlYnVnIA0KKyAgICAgICAgICAgICAgIHBoYXNlLg0KKyAgICAgICAgICAgICAtIEl0IGlzIHN1aXRhYmxlIHdoZW4gb25seSBvbmUgZmxhZyBjaGVja2luZyBpcyBuZWVkZWQgKG1vc3QgSTJDIA0KKyAgICAgICAgICAgICAgIGV2ZW50cyBhcmUgbW9uaXRvcmVkIHRocm91Z2ggbXVsdGlwbGUgZmxhZ3MpLg0KKyAgICAgICAgICAtIExpbWl0YXRpb25zOiANCisgICAgICAgICAgICAgLSBXaGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIFN0YXR1cyByZWdpc3RlciBpcyBhY2Nlc3NlZC4gDQorICAgICAgICAgICAgICAgU29tZSBmbGFncyBhcmUgY2xlYXJlZCB3aGVuIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgYWNjZXNzZWQuIA0KKyAgICAgICAgICAgICAgIFNvIGNoZWNraW5nIHRoZSBzdGF0dXMgb2Ygb25lIEZsYWcsIG1heSBjbGVhciBvdGhlciBvbmVzLg0KKyAgICAgICAgICAgICAtIEZ1bmN0aW9uIG1heSBuZWVkIHRvIGJlIGNhbGxlZCB0d2ljZSBvciBtb3JlIGluIG9yZGVyIHRvIG1vbml0b3IgDQorICAgICAgICAgICAgICAgb25lIHNpbmdsZSBldmVudC4NCisgDQorICAgRm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIEV2ZW50cywgcGxlYXNlIHJlZmVyIHRvIHNlY3Rpb24gSTJDX0V2ZW50cyBpbiANCisgICBzdG0zMmYyeHhfaTJjLmggZmlsZS4NCisgICAgICAgDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKyAgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlYWRzIHRoZSBzcGVjaWZpZWQgSTJDIHJlZ2lzdGVyIGFuZCByZXR1cm5zIGl0cyB2YWx1ZS4NCisgICogQHBhcmFtICBJMkNfUmVnaXN0ZXI6IHNwZWNpZmllcyB0aGUgcmVnaXN0ZXIgdG8gcmVhZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19SZWdpc3Rlcl9DUjE6ICBDUjEgcmVnaXN0ZXIuDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfUmVnaXN0ZXJfQ1IyOiAgIENSMiByZWdpc3Rlci4NCisgICogICAgICAgICAgICBAYXJnIEkyQ19SZWdpc3Rlcl9PQVIxOiAgT0FSMSByZWdpc3Rlci4NCisgICogICAgICAgICAgICBAYXJnIEkyQ19SZWdpc3Rlcl9PQVIyOiAgT0FSMiByZWdpc3Rlci4NCisgICogICAgICAgICAgICBAYXJnIEkyQ19SZWdpc3Rlcl9EUjogICAgRFIgcmVnaXN0ZXIuDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfUmVnaXN0ZXJfU1IxOiAgIFNSMSByZWdpc3Rlci4NCisgICogICAgICAgICAgICBAYXJnIEkyQ19SZWdpc3Rlcl9TUjI6ICAgU1IyIHJlZ2lzdGVyLg0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX1JlZ2lzdGVyX0NDUjogICBDQ1IgcmVnaXN0ZXIuDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfUmVnaXN0ZXJfVFJJU0U6IFRSSVNFIHJlZ2lzdGVyLg0KKyAgKiBAcmV0dmFsIFRoZSB2YWx1ZSBvZiB0aGUgcmVhZCByZWdpc3Rlci4NCisgICovDQordWludDE2X3QgSTJDX1JlYWRSZWdpc3RlcihJMkNfVHlwZURlZiogSTJDeCwgdWludDhfdCBJMkNfUmVnaXN0ZXIpDQorew0KKyAgX19JTyB1aW50MzJfdCB0bXAgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX1JFR0lTVEVSKEkyQ19SZWdpc3RlcikpOw0KKw0KKyAgdG1wID0gKHVpbnQzMl90KSBJMkN4Ow0KKyAgdG1wICs9IEkyQ19SZWdpc3RlcjsNCisNCisgIC8qIFJldHVybiB0aGUgc2VsZWN0ZWQgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHJldHVybiAoKihfX0lPIHVpbnQxNl90ICopIHRtcCk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBJMkMgaW50ZXJydXB0cy4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBJMkNfSVQ6IHNwZWNpZmllcyB0aGUgSTJDIGludGVycnVwdHMgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9CVUY6IEJ1ZmZlciBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0lUX0VWVDogRXZlbnQgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9FUlI6IEVycm9yIGludGVycnVwdCBtYXNrDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIEkyQyBpbnRlcnJ1cHRzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMkNfSVRDb25maWcoSTJDX1R5cGVEZWYqIEkyQ3gsIHVpbnQxNl90IEkyQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0FMTF9QRVJJUEgoSTJDeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19JMkNfQ09ORklHX0lUKEkyQ19JVCkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBJMkMgaW50ZXJydXB0cyAqLw0KKyAgICBJMkN4LT5DUjIgfD0gSTJDX0lUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBJMkMgaW50ZXJydXB0cyAqLw0KKyAgICBJMkN4LT5DUjIgJj0gKHVpbnQxNl90KX5JMkNfSVQ7DQorICB9DQorfQ0KKw0KKy8qDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEuIEJhc2ljIHN0YXRlIG1vbml0b3JpbmcgICAgICAgICAgICAgICAgICAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgbGFzdCBJMkN4IEV2ZW50IGlzIGVxdWFsIHRvIHRoZSBvbmUgcGFzc2VkDQorICAqICAgICAgICAgYXMgcGFyYW1ldGVyLg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ19FVkVOVDogc3BlY2lmaWVzIHRoZSBldmVudCB0byBiZSBjaGVja2VkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19FVkVOVF9TTEFWRV9UUkFOU01JVFRFUl9BRERSRVNTX01BVENIRUQ6IEVWMQ0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX1NMQVZFX1JFQ0VJVkVSX0FERFJFU1NfTUFUQ0hFRDogRVYxDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRVZFTlRfU0xBVkVfVFJBTlNNSVRURVJfU0VDT05EQUREUkVTU19NQVRDSEVEOiBFVjENCisgICogICAgICAgICAgICBAYXJnIEkyQ19FVkVOVF9TTEFWRV9SRUNFSVZFUl9TRUNPTkRBRERSRVNTX01BVENIRUQ6IEVWMQ0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX1NMQVZFX0dFTkVSQUxDQUxMQUREUkVTU19NQVRDSEVEOiBFVjENCisgICogICAgICAgICAgICBAYXJnIEkyQ19FVkVOVF9TTEFWRV9CWVRFX1JFQ0VJVkVEOiBFVjINCisgICogICAgICAgICAgICBAYXJnIChJMkNfRVZFTlRfU0xBVkVfQllURV9SRUNFSVZFRCB8IEkyQ19GTEFHX0RVQUxGKTogRVYyDQorICAqICAgICAgICAgICAgQGFyZyAoSTJDX0VWRU5UX1NMQVZFX0JZVEVfUkVDRUlWRUQgfCBJMkNfRkxBR19HRU5DQUxMKTogRVYyDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRVZFTlRfU0xBVkVfQllURV9UUkFOU01JVFRFRDogRVYzDQorICAqICAgICAgICAgICAgQGFyZyAoSTJDX0VWRU5UX1NMQVZFX0JZVEVfVFJBTlNNSVRURUQgfCBJMkNfRkxBR19EVUFMRik6IEVWMw0KKyAgKiAgICAgICAgICAgIEBhcmcgKEkyQ19FVkVOVF9TTEFWRV9CWVRFX1RSQU5TTUlUVEVEIHwgSTJDX0ZMQUdfR0VOQ0FMTCk6IEVWMw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX1NMQVZFX0FDS19GQUlMVVJFOiBFVjNfMg0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX1NMQVZFX1NUT1BfREVURUNURUQ6IEVWNA0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX01BU1RFUl9NT0RFX1NFTEVDVDogRVY1DQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRVZFTlRfTUFTVEVSX1RSQU5TTUlUVEVSX01PREVfU0VMRUNURUQ6IEVWNiAgICAgDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRVZFTlRfTUFTVEVSX1JFQ0VJVkVSX01PREVfU0VMRUNURUQ6IEVWNg0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX01BU1RFUl9CWVRFX1JFQ0VJVkVEOiBFVjcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19FVkVOVF9NQVNURVJfQllURV9UUkFOU01JVFRJTkc6IEVWOA0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX01BU1RFUl9CWVRFX1RSQU5TTUlUVEVEOiBFVjhfMg0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0VWRU5UX01BU1RFUl9NT0RFX0FERFJFU1MxMDogRVY5DQorICAqICAgICANCisgICogQG5vdGUgICBGb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgRXZlbnRzLCBwbGVhc2UgcmVmZXIgdG8gc2VjdGlvbiBJMkNfRXZlbnRzDQorICAqICAgICAgICAgaW4gc3RtMzJmMnh4X2kyYy5oIGZpbGUuDQorICAqICAgIA0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAgLSBTVUNDRVNTOiBMYXN0IGV2ZW50IGlzIGVxdWFsIHRvIHRoZSBJMkNfRVZFTlQNCisgICogICAgICAgICAgIC0gRVJST1I6IExhc3QgZXZlbnQgaXMgZGlmZmVyZW50IGZyb20gdGhlIEkyQ19FVkVOVA0KKyAgKi8NCitFcnJvclN0YXR1cyBJMkNfQ2hlY2tFdmVudChJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0VWRU5UKQ0KK3sNCisgIHVpbnQzMl90IGxhc3RldmVudCA9IDA7DQorICB1aW50MzJfdCBmbGFnMSA9IDAsIGZsYWcyID0gMDsNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IEVSUk9SOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0VWRU5UKEkyQ19FVkVOVCkpOw0KKw0KKyAgLyogUmVhZCB0aGUgSTJDeCBzdGF0dXMgcmVnaXN0ZXIgKi8NCisgIGZsYWcxID0gSTJDeC0+U1IxOw0KKyAgZmxhZzIgPSBJMkN4LT5TUjI7DQorICBmbGFnMiA9IGZsYWcyIDw8IDE2Ow0KKw0KKyAgLyogR2V0IHRoZSBsYXN0IGV2ZW50IHZhbHVlIGZyb20gSTJDIHN0YXR1cyByZWdpc3RlciAqLw0KKyAgbGFzdGV2ZW50ID0gKGZsYWcxIHwgZmxhZzIpICYgRkxBR19NQVNLOw0KKw0KKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgbGFzdCBldmVudCBjb250YWlucyB0aGUgSTJDX0VWRU5UICovDQorICBpZiAoKGxhc3RldmVudCAmIEkyQ19FVkVOVCkgPT0gSTJDX0VWRU5UKQ0KKyAgew0KKyAgICAvKiBTVUNDRVNTOiBsYXN0IGV2ZW50IGlzIGVxdWFsIHRvIEkyQ19FVkVOVCAqLw0KKyAgICBzdGF0dXMgPSBTVUNDRVNTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBFUlJPUjogbGFzdCBldmVudCBpcyBkaWZmZXJlbnQgZnJvbSBJMkNfRVZFTlQgKi8NCisgICAgc3RhdHVzID0gRVJST1I7DQorICB9DQorICAvKiBSZXR1cm4gc3RhdHVzICovDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKg0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAyLiBBZHZhbmNlZCBzdGF0ZSBtb25pdG9yaW5nICAgICAgICAgICAgICAgICAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgKi8NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBsYXN0IEkyQ3ggRXZlbnQuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqICAgICANCisgICogQG5vdGUgICBGb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgRXZlbnRzLCBwbGVhc2UgcmVmZXIgdG8gc2VjdGlvbiBJMkNfRXZlbnRzDQorICAqICAgICAgICAgaW4gc3RtMzJmMnh4X2kyYy5oIGZpbGUuDQorICAqICAgIA0KKyAgKiBAcmV0dmFsIFRoZSBsYXN0IGV2ZW50DQorICAqLw0KK3VpbnQzMl90IEkyQ19HZXRMYXN0RXZlbnQoSTJDX1R5cGVEZWYqIEkyQ3gpDQorew0KKyAgdWludDMyX3QgbGFzdGV2ZW50ID0gMDsNCisgIHVpbnQzMl90IGZsYWcxID0gMCwgZmxhZzIgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorDQorICAvKiBSZWFkIHRoZSBJMkN4IHN0YXR1cyByZWdpc3RlciAqLw0KKyAgZmxhZzEgPSBJMkN4LT5TUjE7DQorICBmbGFnMiA9IEkyQ3gtPlNSMjsNCisgIGZsYWcyID0gZmxhZzIgPDwgMTY7DQorDQorICAvKiBHZXQgdGhlIGxhc3QgZXZlbnQgdmFsdWUgZnJvbSBJMkMgc3RhdHVzIHJlZ2lzdGVyICovDQorICBsYXN0ZXZlbnQgPSAoZmxhZzEgfCBmbGFnMikgJiBGTEFHX01BU0s7DQorDQorICAvKiBSZXR1cm4gc3RhdHVzICovDQorICByZXR1cm4gbGFzdGV2ZW50Ow0KK30NCisNCisvKg0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAzLiBGbGFnLWJhc2VkIHN0YXRlIG1vbml0b3JpbmcgICAgICAgICAgICAgICAgICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJDIGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBJMkNfRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX0RVQUxGOiBEdWFsIGZsYWcgKFNsYXZlIG1vZGUpDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19TTUJIT1NUOiBTTUJ1cyBob3N0IGhlYWRlciAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX1NNQkRFRkFVTFQ6IFNNQnVzIGRlZmF1bHQgaGVhZGVyIChTbGF2ZSBtb2RlKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfR0VOQ0FMTDogR2VuZXJhbCBjYWxsIGhlYWRlciBmbGFnIChTbGF2ZSBtb2RlKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfVFJBOiBUcmFuc21pdHRlci9SZWNlaXZlciBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19CVVNZOiBCdXMgYnVzeSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19NU0w6IE1hc3Rlci9TbGF2ZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19TTUJBTEVSVDogU01CdXMgQWxlcnQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfVElNRU9VVDogVGltZW91dCBvciBUbG93IGVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX1BFQ0VSUjogUEVDIGVycm9yIGluIHJlY2VwdGlvbiBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19PVlI6IE92ZXJydW4vVW5kZXJydW4gZmxhZyAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX0FGOiBBY2tub3dsZWRnZSBmYWlsdXJlIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX0FSTE86IEFyYml0cmF0aW9uIGxvc3QgZmxhZyAoTWFzdGVyIG1vZGUpDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19CRVJSOiBCdXMgZXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfVFhFOiBEYXRhIHJlZ2lzdGVyIGVtcHR5IGZsYWcgKFRyYW5zbWl0dGVyKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfUlhORTogRGF0YSByZWdpc3RlciBub3QgZW1wdHkgKFJlY2VpdmVyKSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19TVE9QRjogU3RvcCBkZXRlY3Rpb24gZmxhZyAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX0FERDEwOiAxMC1iaXQgaGVhZGVyIHNlbnQgZmxhZyAoTWFzdGVyIG1vZGUpDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19CVEY6IEJ5dGUgdHJhbnNmZXIgZmluaXNoZWQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfQUREUjogQWRkcmVzcyBzZW50IGZsYWcgKE1hc3RlciBtb2RlKSAiQURTTCINCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgbWF0Y2hlZCBmbGFnIChTbGF2ZSBtb2RlKSJFTkRBRCINCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX1NCOiBTdGFydCBiaXQgZmxhZyAoTWFzdGVyIG1vZGUpDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBJMkNfRkxBRyAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorRmxhZ1N0YXR1cyBJMkNfR2V0RmxhZ1N0YXR1cyhJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0ZMQUcpDQorew0KKyAgRmxhZ1N0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIF9fSU8gdWludDMyX3QgaTJjcmVnID0gMCwgaTJjeGJhc2UgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0dFVF9GTEFHKEkyQ19GTEFHKSk7DQorDQorICAvKiBHZXQgdGhlIEkyQ3ggcGVyaXBoZXJhbCBiYXNlIGFkZHJlc3MgKi8NCisgIGkyY3hiYXNlID0gKHVpbnQzMl90KUkyQ3g7DQorICANCisgIC8qIFJlYWQgZmxhZyByZWdpc3RlciBpbmRleCAqLw0KKyAgaTJjcmVnID0gSTJDX0ZMQUcgPj4gMjg7DQorICANCisgIC8qIEdldCBiaXRbMjM6MF0gb2YgdGhlIGZsYWcgKi8NCisgIEkyQ19GTEFHICY9IEZMQUdfTUFTSzsNCisgIA0KKyAgaWYoaTJjcmVnICE9IDApDQorICB7DQorICAgIC8qIEdldCB0aGUgSTJDeCBTUjEgcmVnaXN0ZXIgYWRkcmVzcyAqLw0KKyAgICBpMmN4YmFzZSArPSAweDE0Ow0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBGbGFnIGluIEkyQ3ggU1IyIFJlZ2lzdGVyICovDQorICAgIEkyQ19GTEFHID0gKHVpbnQzMl90KShJMkNfRkxBRyA+PiAxNik7DQorICAgIC8qIEdldCB0aGUgSTJDeCBTUjIgcmVnaXN0ZXIgYWRkcmVzcyAqLw0KKyAgICBpMmN4YmFzZSArPSAweDE4Ow0KKyAgfQ0KKyAgDQorICBpZigoKCooX19JTyB1aW50MzJfdCAqKWkyY3hiYXNlKSAmIEkyQ19GTEFHKSAhPSAodWludDMyX3QpUkVTRVQpDQorICB7DQorICAgIC8qIEkyQ19GTEFHIGlzIHNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIEkyQ19GTEFHIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgDQorICAvKiBSZXR1cm4gdGhlIEkyQ19GTEFHIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgSTJDeCdzIHBlbmRpbmcgZmxhZ3MuDQorICAqIEBwYXJhbSAgSTJDeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgSTJDIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgSTJDX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19TTUJBTEVSVDogU01CdXMgQWxlcnQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0ZMQUdfVElNRU9VVDogVGltZW91dCBvciBUbG93IGVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX1BFQ0VSUjogUEVDIGVycm9yIGluIHJlY2VwdGlvbiBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19PVlI6IE92ZXJydW4vVW5kZXJydW4gZmxhZyAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX0FGOiBBY2tub3dsZWRnZSBmYWlsdXJlIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19GTEFHX0FSTE86IEFyYml0cmF0aW9uIGxvc3QgZmxhZyAoTWFzdGVyIG1vZGUpDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfRkxBR19CRVJSOiBCdXMgZXJyb3IgZmxhZw0KKyAgKiAgIA0KKyAgKiBAbm90ZSAgIFNUT1BGIChTVE9QIGRldGVjdGlvbikgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSBzZXF1ZW5jZTogYSByZWFkIG9wZXJhdGlvbiANCisgICogICAgICAgICAgdG8gSTJDX1NSMSByZWdpc3RlciAoSTJDX0dldEZsYWdTdGF0dXMoKSkgZm9sbG93ZWQgYnkgYSB3cml0ZSBvcGVyYXRpb24gDQorICAqICAgICAgICAgIHRvIEkyQ19DUjEgcmVnaXN0ZXIgKEkyQ19DbWQoKSB0byByZS1lbmFibGUgdGhlIEkyQyBwZXJpcGhlcmFsKS4NCisgICogQG5vdGUgICBBREQxMCAoMTAtYml0IGhlYWRlciBzZW50KSBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHNlcXVlbmNlOiBhIHJlYWQgDQorICAqICAgICAgICAgIG9wZXJhdGlvbiB0byBJMkNfU1IxIChJMkNfR2V0RmxhZ1N0YXR1cygpKSBmb2xsb3dlZCBieSB3cml0aW5nIHRoZSANCisgICogICAgICAgICAgc2Vjb25kIGJ5dGUgb2YgdGhlIGFkZHJlc3MgaW4gRFIgcmVnaXN0ZXIuDQorICAqIEBub3RlICAgQlRGIChCeXRlIFRyYW5zZmVyIEZpbmlzaGVkKSBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHNlcXVlbmNlOiBhIHJlYWQgDQorICAqICAgICAgICAgIG9wZXJhdGlvbiB0byBJMkNfU1IxIHJlZ2lzdGVyIChJMkNfR2V0RmxhZ1N0YXR1cygpKSBmb2xsb3dlZCBieSBhIA0KKyAgKiAgICAgICAgICByZWFkL3dyaXRlIHRvIEkyQ19EUiByZWdpc3RlciAoSTJDX1NlbmREYXRhKCkpLg0KKyAgKiBAbm90ZSAgIEFERFIgKEFkZHJlc3Mgc2VudCkgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSBzZXF1ZW5jZTogYSByZWFkIG9wZXJhdGlvbiB0byANCisgICogICAgICAgICAgSTJDX1NSMSByZWdpc3RlciAoSTJDX0dldEZsYWdTdGF0dXMoKSkgZm9sbG93ZWQgYnkgYSByZWFkIG9wZXJhdGlvbiB0byANCisgICogICAgICAgICAgSTJDX1NSMiByZWdpc3RlciAoKHZvaWQpKEkyQ3gtPlNSMikpLg0KKyAgKiBAbm90ZSAgIFNCIChTdGFydCBCaXQpIGlzIGNsZWFyZWQgc29mdHdhcmUgc2VxdWVuY2U6IGEgcmVhZCBvcGVyYXRpb24gdG8gSTJDX1NSMQ0KKyAgKiAgICAgICAgICByZWdpc3RlciAoSTJDX0dldEZsYWdTdGF0dXMoKSkgZm9sbG93ZWQgYnkgYSB3cml0ZSBvcGVyYXRpb24gdG8gSTJDX0RSDQorICAqICAgICAgICAgIHJlZ2lzdGVyIChJMkNfU2VuZERhdGEoKSkuDQorICAqICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJDX0NsZWFyRmxhZyhJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0ZMQUcpDQorew0KKyAgdWludDMyX3QgZmxhZ3BvcyA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyQ19BTExfUEVSSVBIKEkyQ3gpKTsNCisgIGFzc2VydF9wYXJhbShJU19JMkNfQ0xFQVJfRkxBRyhJMkNfRkxBRykpOw0KKyAgLyogR2V0IHRoZSBJMkMgZmxhZyBwb3NpdGlvbiAqLw0KKyAgZmxhZ3BvcyA9IEkyQ19GTEFHICYgRkxBR19NQVNLOw0KKyAgLyogQ2xlYXIgdGhlIHNlbGVjdGVkIEkyQyBmbGFnICovDQorICBJMkN4LT5TUjEgPSAodWludDE2X3QpfmZsYWdwb3M7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJDIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIEkyQ3g6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIEkyQyBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIEkyQ19JVDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9TTUJBTEVSVDogU01CdXMgQWxlcnQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0lUX1RJTUVPVVQ6IFRpbWVvdXQgb3IgVGxvdyBlcnJvciBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfUEVDRVJSOiBQRUMgZXJyb3IgaW4gcmVjZXB0aW9uIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9PVlI6IE92ZXJydW4vVW5kZXJydW4gZmxhZyAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9BRjogQWNrbm93bGVkZ2UgZmFpbHVyZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfQVJMTzogQXJiaXRyYXRpb24gbG9zdCBmbGFnIChNYXN0ZXIgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9CRVJSOiBCdXMgZXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0lUX1RYRTogRGF0YSByZWdpc3RlciBlbXB0eSBmbGFnIChUcmFuc21pdHRlcikNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9SWE5FOiBEYXRhIHJlZ2lzdGVyIG5vdCBlbXB0eSAoUmVjZWl2ZXIpIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9TVE9QRjogU3RvcCBkZXRlY3Rpb24gZmxhZyAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9BREQxMDogMTAtYml0IGhlYWRlciBzZW50IGZsYWcgKE1hc3RlciBtb2RlKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0lUX0JURjogQnl0ZSB0cmFuc2ZlciBmaW5pc2hlZCBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfQUREUjogQWRkcmVzcyBzZW50IGZsYWcgKE1hc3RlciBtb2RlKSAiQURTTCINCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIG1hdGNoZWQgZmxhZyAoU2xhdmUgbW9kZSkiRU5EQUQiDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfU0I6IFN0YXJ0IGJpdCBmbGFnIChNYXN0ZXIgbW9kZSkNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIEkyQ19JVCAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorSVRTdGF0dXMgSTJDX0dldElUU3RhdHVzKEkyQ19UeXBlRGVmKiBJMkN4LCB1aW50MzJfdCBJMkNfSVQpDQorew0KKyAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCBlbmFibGVzdGF0dXMgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0dFVF9JVChJMkNfSVQpKTsNCisNCisgIC8qIENoZWNrIGlmIHRoZSBpbnRlcnJ1cHQgc291cmNlIGlzIGVuYWJsZWQgb3Igbm90ICovDQorICBlbmFibGVzdGF0dXMgPSAodWludDMyX3QpKCgoSTJDX0lUICYgSVRFTl9NQVNLKSA+PiAxNikgJiAoSTJDeC0+Q1IyKSkgOw0KKyAgDQorICAvKiBHZXQgYml0WzIzOjBdIG9mIHRoZSBmbGFnICovDQorICBJMkNfSVQgJj0gRkxBR19NQVNLOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIEkyQyBmbGFnICovDQorICBpZiAoKChJMkN4LT5TUjEgJiBJMkNfSVQpICE9ICh1aW50MzJfdClSRVNFVCkgJiYgZW5hYmxlc3RhdHVzKQ0KKyAgew0KKyAgICAvKiBJMkNfSVQgaXMgc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogSTJDX0lUIGlzIHJlc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBJMkNfSVQgc3RhdHVzICovDQorICByZXR1cm4gIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBJMkN4J3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4NCisgICogQHBhcmFtICBJMkN4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBJMkMgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBJMkNfSVQ6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9TTUJBTEVSVDogU01CdXMgQWxlcnQgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfVElNRU9VVDogVGltZW91dCBvciBUbG93IGVycm9yIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJDX0lUX1BFQ0VSUjogUEVDIGVycm9yIGluIHJlY2VwdGlvbiAgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfT1ZSOiBPdmVycnVuL1VuZGVycnVuIGludGVycnVwdCAoU2xhdmUgbW9kZSkNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9BRjogQWNrbm93bGVkZ2UgZmFpbHVyZSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIEkyQ19JVF9BUkxPOiBBcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCAoTWFzdGVyIG1vZGUpDQorICAqICAgICAgICAgICAgQGFyZyBJMkNfSVRfQkVSUjogQnVzIGVycm9yIGludGVycnVwdA0KKyAgKiANCisgICogQG5vdGUgICBTVE9QRiAoU1RPUCBkZXRlY3Rpb24pIGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgc2VxdWVuY2U6IGEgcmVhZCBvcGVyYXRpb24gDQorICAqICAgICAgICAgIHRvIEkyQ19TUjEgcmVnaXN0ZXIgKEkyQ19HZXRJVFN0YXR1cygpKSBmb2xsb3dlZCBieSBhIHdyaXRlIG9wZXJhdGlvbiB0byANCisgICogICAgICAgICAgSTJDX0NSMSByZWdpc3RlciAoSTJDX0NtZCgpIHRvIHJlLWVuYWJsZSB0aGUgSTJDIHBlcmlwaGVyYWwpLg0KKyAgKiBAbm90ZSAgIEFERDEwICgxMC1iaXQgaGVhZGVyIHNlbnQpIGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgc2VxdWVuY2U6IGEgcmVhZCANCisgICogICAgICAgICAgb3BlcmF0aW9uIHRvIEkyQ19TUjEgKEkyQ19HZXRJVFN0YXR1cygpKSBmb2xsb3dlZCBieSB3cml0aW5nIHRoZSBzZWNvbmQgDQorICAqICAgICAgICAgIGJ5dGUgb2YgdGhlIGFkZHJlc3MgaW4gSTJDX0RSIHJlZ2lzdGVyLg0KKyAgKiBAbm90ZSAgIEJURiAoQnl0ZSBUcmFuc2ZlciBGaW5pc2hlZCkgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSBzZXF1ZW5jZTogYSByZWFkIA0KKyAgKiAgICAgICAgICBvcGVyYXRpb24gdG8gSTJDX1NSMSByZWdpc3RlciAoSTJDX0dldElUU3RhdHVzKCkpIGZvbGxvd2VkIGJ5IGEgDQorICAqICAgICAgICAgIHJlYWQvd3JpdGUgdG8gSTJDX0RSIHJlZ2lzdGVyIChJMkNfU2VuZERhdGEoKSkuDQorICAqIEBub3RlICAgQUREUiAoQWRkcmVzcyBzZW50KSBpcyBjbGVhcmVkIGJ5IHNvZnR3YXJlIHNlcXVlbmNlOiBhIHJlYWQgb3BlcmF0aW9uIHRvIA0KKyAgKiAgICAgICAgICBJMkNfU1IxIHJlZ2lzdGVyIChJMkNfR2V0SVRTdGF0dXMoKSkgZm9sbG93ZWQgYnkgYSByZWFkIG9wZXJhdGlvbiB0byANCisgICogICAgICAgICAgSTJDX1NSMiByZWdpc3RlciAoKHZvaWQpKEkyQ3gtPlNSMikpLg0KKyAgKiBAbm90ZSAgIFNCIChTdGFydCBCaXQpIGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgc2VxdWVuY2U6IGEgcmVhZCBvcGVyYXRpb24gdG8gDQorICAqICAgICAgICAgIEkyQ19TUjEgcmVnaXN0ZXIgKEkyQ19HZXRJVFN0YXR1cygpKSBmb2xsb3dlZCBieSBhIHdyaXRlIG9wZXJhdGlvbiB0byANCisgICogICAgICAgICAgSTJDX0RSIHJlZ2lzdGVyIChJMkNfU2VuZERhdGEoKSkuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEkyQ19DbGVhcklUUGVuZGluZ0JpdChJMkNfVHlwZURlZiogSTJDeCwgdWludDMyX3QgSTJDX0lUKQ0KK3sNCisgIHVpbnQzMl90IGZsYWdwb3MgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JMkNfQUxMX1BFUklQSChJMkN4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJDX0NMRUFSX0lUKEkyQ19JVCkpOw0KKw0KKyAgLyogR2V0IHRoZSBJMkMgZmxhZyBwb3NpdGlvbiAqLw0KKyAgZmxhZ3BvcyA9IEkyQ19JVCAmIEZMQUdfTUFTSzsNCisNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBJMkMgZmxhZyAqLw0KKyAgSTJDeC0+U1IxID0gKHVpbnQxNl90KX5mbGFncG9zOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2l3ZGcuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfaXdkZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODllYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X2l3ZGcuYwpAQCAtMCwwICsxLDI2OSBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X2l3ZGcuYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBJbmRlcGVuZGVudCB3YXRjaGRvZyAoSVdERykgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBQcmVzY2FsZXIgYW5kIENvdW50ZXIgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBJV0RHIGFjdGl2YXRpb24NCisgICogICAgICAgICAgIC0gRmxhZyBtYW5hZ2VtZW50DQorICAqDQorICAqICBAdmVyYmF0aW0gIA0KKyAgKiAgDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdERyBmZWF0dXJlcw0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgIA0KKyAgKiAgICAgICAgICBUaGUgSVdERyBjYW4gYmUgc3RhcnRlZCBieSBlaXRoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUgKGNvbmZpZ3VyYWJsZQ0KKyAgKiAgICAgICAgICB0aHJvdWdoIG9wdGlvbiBieXRlKS4NCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgVGhlIElXREcgaXMgY2xvY2tlZCBieSBpdHMgb3duIGRlZGljYXRlZCBsb3ctc3BlZWQgY2xvY2sgKExTSSkgYW5kDQorICAqICAgICAgICAgIHRodXMgc3RheXMgYWN0aXZlIGV2ZW4gaWYgdGhlIG1haW4gY2xvY2sgZmFpbHMuDQorICAqICAgICAgICAgIE9uY2UgdGhlIElXREcgaXMgc3RhcnRlZCwgdGhlIExTSSBpcyBmb3JjZWQgT04gYW5kIGNhbm5vdCBiZSBkaXNhYmxlZA0KKyAgKiAgICAgICAgICAoTFNJIGNhbm5vdCBiZSBkaXNhYmxlZCB0b28pLCBhbmQgdGhlIGNvdW50ZXIgc3RhcnRzIGNvdW50aW5nIGRvd24gZnJvbSANCisgICogICAgICAgICAgdGhlIHJlc2V0IHZhbHVlIG9mIDB4RkZGLiBXaGVuIGl0IHJlYWNoZXMgdGhlIGVuZCBvZiBjb3VudCB2YWx1ZSAoMHgwMDApDQorICAqICAgICAgICAgIGEgc3lzdGVtIHJlc2V0IGlzIGdlbmVyYXRlZC4NCisgICogICAgICAgICAgVGhlIElXREcgY291bnRlciBzaG91bGQgYmUgcmVsb2FkZWQgYXQgcmVndWxhciBpbnRlcnZhbHMgdG8gcHJldmVudA0KKyAgKiAgICAgICAgICBhbiBNQ1UgcmVzZXQuDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIFRoZSBJV0RHIGlzIGltcGxlbWVudGVkIGluIHRoZSBWREQgdm9sdGFnZSBkb21haW4gdGhhdCBpcyBzdGlsbCBmdW5jdGlvbmFsDQorICAqICAgICAgICAgIGluIFNUT1AgYW5kIFNUQU5EQlkgbW9kZSAoSVdERyByZXNldCBjYW4gd2FrZS11cCBmcm9tIFNUQU5EQlkpLiAgICAgICAgICANCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgSVdER1JTVCBmbGFnIGluIFJDQ19DU1IgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgdG8gaW5mb3JtIHdoZW4gYSBJV0RHDQorICAqICAgICAgICAgIHJlc2V0IG9jY3Vycy4NCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgTWluLW1heCB0aW1lb3V0IHZhbHVlIEAzMktIeiAoTFNJKTogfjEyNXVzIC8gfjMyLjdzDQorICAqICAgICAgICAgIFRoZSBJV0RHIHRpbWVvdXQgbWF5IHZhcnkgZHVlIHRvIExTSSBmcmVxdWVuY3kgZGlzcGVyc2lvbi4gU1RNMzJGMnh4DQorICAqICAgICAgICAgIGRldmljZXMgcHJvdmlkZSB0aGUgY2FwYWJpbGl0eSB0byBtZWFzdXJlIHRoZSBMU0kgZnJlcXVlbmN5IChMU0kgY2xvY2sNCisgICogICAgICAgICAgY29ubmVjdGVkIGludGVybmFsbHkgdG8gVElNNSBDSDQgaW5wdXQgY2FwdHVyZSkuIFRoZSBtZWFzdXJlZCB2YWx1ZQ0KKyAgKiAgICAgICAgICBjYW4gYmUgdXNlZCB0byBoYXZlIGFuIElXREcgdGltZW91dCB3aXRoIGFuIGFjY2VwdGFibGUgYWNjdXJhY3kuIA0KKyAgKiAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBTVE0zMkYyeHggUmVmZXJlbmNlIG1hbnVhbA0KKyAgKiAgICAgICAgICANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgMS4gRW5hYmxlIHdyaXRlIGFjY2VzcyB0byBJV0RHX1BSIGFuZCBJV0RHX1JMUiByZWdpc3RlcnMgdXNpbmcNCisgICogICAgICAgICAgICAgSVdER19Xcml0ZUFjY2Vzc0NtZChJV0RHX1dyaXRlQWNjZXNzX0VuYWJsZSkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICANCisgICogICAgICAgICAgMi4gQ29uZmlndXJlIHRoZSBJV0RHIHByZXNjYWxlciB1c2luZyBJV0RHX1NldFByZXNjYWxlcigpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgDQorICAqICAgICAgICAgIDMuIENvbmZpZ3VyZSB0aGUgSVdERyBjb3VudGVyIHZhbHVlIHVzaW5nIElXREdfU2V0UmVsb2FkKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgIFRoaXMgdmFsdWUgd2lsbCBiZSBsb2FkZWQgaW4gdGhlIElXREcgY291bnRlciBlYWNoIHRpbWUgdGhlIGNvdW50ZXINCisgICogICAgICAgICAgICAgaXMgcmVsb2FkZWQsIHRoZW4gdGhlIElXREcgd2lsbCBzdGFydCBjb3VudGluZyBkb3duIGZyb20gdGhpcyB2YWx1ZS4NCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgNC4gU3RhcnQgdGhlIElXREcgdXNpbmcgSVdER19FbmFibGUoKSBmdW5jdGlvbiwgd2hlbiB0aGUgSVdERyBpcyB1c2VkDQorICAqICAgICAgICAgICAgIGluIHNvZnR3YXJlIG1vZGUgKG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBMU0ksIGl0IHdpbGwgYmUgZW5hYmxlZA0KKyAgKiAgICAgICAgICAgICBieSBoYXJkd2FyZSkNCisgICogICAgICAgICAgICAgDQorICAqICAgICAgICAgIDUuIFRoZW4gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0gbXVzdCByZWxvYWQgdGhlIElXREcgY291bnRlciBhdCByZWd1bGFyDQorICAqICAgICAgICAgICAgIGludGVydmFscyBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIE1DVSByZXNldCwgdXNpbmcNCisgICogICAgICAgICAgICAgSVdER19SZWxvYWRDb3VudGVyKCkgZnVuY3Rpb24uICAgICAgDQorICAqICAgICAgICAgIA0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqICAgIA0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X2l3ZGcuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBJV0RHIA0KKyAgKiBAYnJpZWYgSVdERyBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIEtSIHJlZ2lzdGVyIGJpdCBtYXNrICovDQorI2RlZmluZSBLUl9LRVlfUkVMT0FEICAgICgodWludDE2X3QpMHhBQUFBKQ0KKyNkZWZpbmUgS1JfS0VZX0VOQUJMRSAgICAoKHVpbnQxNl90KTB4Q0NDQykNCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgSVdER19Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIElXREdfR3JvdXAxIFByZXNjYWxlciBhbmQgQ291bnRlciBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBQcmVzY2FsZXIgYW5kIENvdW50ZXIgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgUHJlc2NhbGVyIGFuZCBDb3VudGVyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHdyaXRlIGFjY2VzcyB0byBJV0RHX1BSIGFuZCBJV0RHX1JMUiByZWdpc3RlcnMuDQorICAqIEBwYXJhbSAgSVdER19Xcml0ZUFjY2VzczogbmV3IHN0YXRlIG9mIHdyaXRlIGFjY2VzcyB0byBJV0RHX1BSIGFuZCBJV0RHX1JMUiByZWdpc3RlcnMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBJV0RHX1dyaXRlQWNjZXNzX0VuYWJsZTogRW5hYmxlIHdyaXRlIGFjY2VzcyB0byBJV0RHX1BSIGFuZCBJV0RHX1JMUiByZWdpc3RlcnMNCisgICogICAgICAgICAgICBAYXJnIElXREdfV3JpdGVBY2Nlc3NfRGlzYWJsZTogRGlzYWJsZSB3cml0ZSBhY2Nlc3MgdG8gSVdER19QUiBhbmQgSVdER19STFIgcmVnaXN0ZXJzDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIElXREdfV3JpdGVBY2Nlc3NDbWQodWludDE2X3QgSVdER19Xcml0ZUFjY2VzcykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0lXREdfV1JJVEVfQUNDRVNTKElXREdfV3JpdGVBY2Nlc3MpKTsNCisgIElXREctPktSID0gSVdER19Xcml0ZUFjY2VzczsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyBJV0RHIFByZXNjYWxlciB2YWx1ZS4NCisgICogQHBhcmFtICBJV0RHX1ByZXNjYWxlcjogc3BlY2lmaWVzIHRoZSBJV0RHIFByZXNjYWxlciB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIElXREdfUHJlc2NhbGVyXzQ6IElXREcgcHJlc2NhbGVyIHNldCB0byA0DQorICAqICAgICAgICAgICAgQGFyZyBJV0RHX1ByZXNjYWxlcl84OiBJV0RHIHByZXNjYWxlciBzZXQgdG8gOA0KKyAgKiAgICAgICAgICAgIEBhcmcgSVdER19QcmVzY2FsZXJfMTY6IElXREcgcHJlc2NhbGVyIHNldCB0byAxNg0KKyAgKiAgICAgICAgICAgIEBhcmcgSVdER19QcmVzY2FsZXJfMzI6IElXREcgcHJlc2NhbGVyIHNldCB0byAzMg0KKyAgKiAgICAgICAgICAgIEBhcmcgSVdER19QcmVzY2FsZXJfNjQ6IElXREcgcHJlc2NhbGVyIHNldCB0byA2NA0KKyAgKiAgICAgICAgICAgIEBhcmcgSVdER19QcmVzY2FsZXJfMTI4OiBJV0RHIHByZXNjYWxlciBzZXQgdG8gMTI4DQorICAqICAgICAgICAgICAgQGFyZyBJV0RHX1ByZXNjYWxlcl8yNTY6IElXREcgcHJlc2NhbGVyIHNldCB0byAyNTYNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSVdER19TZXRQcmVzY2FsZXIodWludDhfdCBJV0RHX1ByZXNjYWxlcikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0lXREdfUFJFU0NBTEVSKElXREdfUHJlc2NhbGVyKSk7DQorICBJV0RHLT5QUiA9IElXREdfUHJlc2NhbGVyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIElXREcgUmVsb2FkIHZhbHVlLg0KKyAgKiBAcGFyYW0gIFJlbG9hZDogc3BlY2lmaWVzIHRoZSBJV0RHIFJlbG9hZCB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDB4MEZGRi4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSVdER19TZXRSZWxvYWQodWludDE2X3QgUmVsb2FkKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfSVdER19SRUxPQUQoUmVsb2FkKSk7DQorICBJV0RHLT5STFIgPSBSZWxvYWQ7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlbG9hZHMgSVdERyBjb3VudGVyIHdpdGggdmFsdWUgZGVmaW5lZCBpbiB0aGUgcmVsb2FkIHJlZ2lzdGVyDQorICAqICAgICAgICAgKHdyaXRlIGFjY2VzcyB0byBJV0RHX1BSIGFuZCBJV0RHX1JMUiByZWdpc3RlcnMgZGlzYWJsZWQpLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSVdER19SZWxvYWRDb3VudGVyKHZvaWQpDQorew0KKyAgSVdERy0+S1IgPSBLUl9LRVlfUkVMT0FEOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJV0RHX0dyb3VwMiBJV0RHIGFjdGl2YXRpb24gZnVuY3Rpb24NCisgKiAgQGJyaWVmICAgSVdERyBhY3RpdmF0aW9uIGZ1bmN0aW9uIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgIElXREcgYWN0aXZhdGlvbiBmdW5jdGlvbg0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBJV0RHICh3cml0ZSBhY2Nlc3MgdG8gSVdER19QUiBhbmQgSVdER19STFIgcmVnaXN0ZXJzIGRpc2FibGVkKS4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIElXREdfRW5hYmxlKHZvaWQpDQorew0KKyAgSVdERy0+S1IgPSBLUl9LRVlfRU5BQkxFOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBJV0RHX0dyb3VwMyBGbGFnIG1hbmFnZW1lbnQgZnVuY3Rpb24gDQorICogIEBicmllZiAgRmxhZyBtYW5hZ2VtZW50IGZ1bmN0aW9uICANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYWcgbWFuYWdlbWVudCBmdW5jdGlvbiANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSVdERyBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgSVdER19GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBJV0RHX0ZMQUdfUFZVOiBQcmVzY2FsZXIgVmFsdWUgVXBkYXRlIG9uIGdvaW5nDQorICAqICAgICAgICAgICAgQGFyZyBJV0RHX0ZMQUdfUlZVOiBSZWxvYWQgVmFsdWUgVXBkYXRlIG9uIGdvaW5nDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBJV0RHX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgSVdER19HZXRGbGFnU3RhdHVzKHVpbnQxNl90IElXREdfRkxBRykNCit7DQorICBGbGFnU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19JV0RHX0ZMQUcoSVdER19GTEFHKSk7DQorICBpZiAoKElXREctPlNSICYgSVdER19GTEFHKSAhPSAodWludDMyX3QpUkVTRVQpDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIGZsYWcgc3RhdHVzICovDQorICByZXR1cm4gYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X3B3ci5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9wd3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg0Y2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9wd3IuYwpAQCAtMCwwICsxLDYyMCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3B3ci5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nIA0KKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFBvd2VyIENvbnRyb2xsZXIgKFBXUikgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBCYWNrdXAgRG9tYWluIEFjY2Vzcw0KKyAgKiAgICAgICAgICAgLSBQVkQgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBXYWtlVXAgcGluIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gQmFja3VwIFJlZ3VsYXRvciBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIEZMQVNIIFBvd2VyIERvd24gY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBMb3cgUG93ZXIgbW9kZXMgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBGbGFncyBtYW5hZ2VtZW50DQorICAqICAgICAgICAgICAgICAgDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfcHdyLmgiDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1IgDQorICAqIEBicmllZiBQV1IgZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovIA0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAtLS0tLS0tLS0gUFdSIHJlZ2lzdGVycyBiaXQgYWRkcmVzcyBpbiB0aGUgYWxpYXMgcmVnaW9uIC0tLS0tLS0tLS0gKi8NCisjZGVmaW5lIFBXUl9PRkZTRVQgICAgICAgICAgICAgICAoUFdSX0JBU0UgLSBQRVJJUEhfQkFTRSkNCisNCisvKiAtLS0gQ1IgUmVnaXN0ZXIgLS0tKi8NCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgREJQIGJpdCAqLw0KKyNkZWZpbmUgQ1JfT0ZGU0VUICAgICAgICAgICAgICAgIChQV1JfT0ZGU0VUICsgMHgwMCkNCisjZGVmaW5lIERCUF9CaXROdW1iZXIgICAgICAgICAgICAweDA4DQorI2RlZmluZSBDUl9EQlBfQkIgICAgICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKENSX09GRlNFVCAqIDMyKSArIChEQlBfQml0TnVtYmVyICogNCkpDQorDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIFBWREUgYml0ICovDQorI2RlZmluZSBQVkRFX0JpdE51bWJlciAgICAgICAgICAgMHgwNA0KKyNkZWZpbmUgQ1JfUFZERV9CQiAgICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDUl9PRkZTRVQgKiAzMikgKyAoUFZERV9CaXROdW1iZXIgKiA0KSkNCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgRlBEUyBiaXQgKi8NCisjZGVmaW5lIEZQRFNfQml0TnVtYmVyICAgICAgICAgICAweDA5DQorI2RlZmluZSBDUl9GUERTX0JCICAgICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKENSX09GRlNFVCAqIDMyKSArIChGUERTX0JpdE51bWJlciAqIDQpKQ0KKw0KKy8qIC0tLSBDU1IgUmVnaXN0ZXIgLS0tKi8NCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgRVdVUCBiaXQgKi8NCisjZGVmaW5lIENTUl9PRkZTRVQgICAgICAgICAgICAgICAoUFdSX09GRlNFVCArIDB4MDQpDQorI2RlZmluZSBFV1VQX0JpdE51bWJlciAgICAgICAgICAgMHgwOA0KKyNkZWZpbmUgQ1NSX0VXVVBfQkIgICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDU1JfT0ZGU0VUICogMzIpICsgKEVXVVBfQml0TnVtYmVyICogNCkpDQorDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIEJSRSBiaXQgKi8NCisjZGVmaW5lIEJSRV9CaXROdW1iZXIgICAgICAgICAgICAweDA5DQorI2RlZmluZSBDU1JfQlJFX0JCICAgICAgICAgICAgICAoUEVSSVBIX0JCX0JBU0UgKyAoQ1NSX09GRlNFVCAqIDMyKSArIChCUkVfQml0TnVtYmVyICogNCkpDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tIFBXUiByZWdpc3RlcnMgYml0IG1hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorDQorLyogQ1IgcmVnaXN0ZXIgYml0IG1hc2sgKi8NCisjZGVmaW5lIENSX0RTX01BU0sgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGRkMpDQorI2RlZmluZSBDUl9QTFNfTUFTSyAgICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGRjFGKQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBQV1JfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfR3JvdXAxIEJhY2t1cCBEb21haW4gQWNjZXNzIGZ1bmN0aW9uIA0KKyAqICBAYnJpZWYgICBCYWNrdXAgRG9tYWluIEFjY2VzcyBmdW5jdGlvbiAgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrdXAgRG9tYWluIEFjY2VzcyBmdW5jdGlvbiANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBBZnRlciByZXNldCwgdGhlIGJhY2t1cCBkb21haW4gKFJUQyByZWdpc3RlcnMsIFJUQyBiYWNrdXAgZGF0YSANCisgIHJlZ2lzdGVycyBhbmQgYmFja3VwIFNSQU0pIGlzIHByb3RlY3RlZCBhZ2FpbnN0IHBvc3NpYmxlIHVud2FudGVkIA0KKyAgd3JpdGUgYWNjZXNzZXMuIA0KKyAgVG8gZW5hYmxlIGFjY2VzcyB0byB0aGUgUlRDIERvbWFpbiBhbmQgUlRDIHJlZ2lzdGVycywgcHJvY2VlZCBhcyBmb2xsb3dzOg0KKyAgICAtIEVuYWJsZSB0aGUgUG93ZXIgQ29udHJvbGxlciAoUFdSKSBBUEIxIGludGVyZmFjZSBjbG9jayB1c2luZyB0aGUNCisgICAgICBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKCkgZnVuY3Rpb24uDQorICAgIC0gRW5hYmxlIGFjY2VzcyB0byBSVEMgZG9tYWluIHVzaW5nIHRoZSBQV1JfQmFja3VwQWNjZXNzQ21kKCkgZnVuY3Rpb24uDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgdGhlIFBXUiBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4gICAgIA0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUFdSX0RlSW5pdCh2b2lkKQ0KK3sNCisgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfUFdSLCBFTkFCTEUpOw0KKyAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9QV1IsIERJU0FCTEUpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIGFjY2VzcyB0byB0aGUgYmFja3VwIGRvbWFpbiAoUlRDIHJlZ2lzdGVycywgUlRDIA0KKyAgKiAgICAgICAgIGJhY2t1cCBkYXRhIHJlZ2lzdGVycyBhbmQgYmFja3VwIFNSQU0pLg0KKyAgKiBAbm90ZSAgIElmIHRoZSBIU0UgZGl2aWRlZCBieSAyLCAzLCAuLjMxIGlzIHVzZWQgYXMgdGhlIFJUQyBjbG9jaywgdGhlIA0KKyAgKiAgICAgICAgIEJhY2t1cCBEb21haW4gQWNjZXNzIHNob3VsZCBiZSBrZXB0IGVuYWJsZWQuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgYWNjZXNzIHRvIHRoZSBiYWNrdXAgZG9tYWluLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBQV1JfQmFja3VwQWNjZXNzQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgKihfX0lPIHVpbnQzMl90ICopIENSX0RCUF9CQiA9ICh1aW50MzJfdClOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUFdSX0dyb3VwMiBQVkQgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgUFZEIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQVkQgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorIC0gVGhlIFBWRCBpcyB1c2VkIHRvIG1vbml0b3IgdGhlIFZERCBwb3dlciBzdXBwbHkgYnkgY29tcGFyaW5nIGl0IHRvIGEgdGhyZXNob2xkDQorICAgc2VsZWN0ZWQgYnkgdGhlIFBWRCBMZXZlbCAoUExTWzI6MF0gYml0cyBpbiB0aGUgUFdSX0NSKS4NCisgLSBBIFBWRE8gZmxhZyBpcyBhdmFpbGFibGUgdG8gaW5kaWNhdGUgaWYgVkREL1ZEREEgaXMgaGlnaGVyIG9yIGxvd2VyIHRoYW4gdGhlIA0KKyAgIFBWRCB0aHJlc2hvbGQuIFRoaXMgZXZlbnQgaXMgaW50ZXJuYWxseSBjb25uZWN0ZWQgdG8gdGhlIEVYVEkgbGluZTE2DQorICAgYW5kIGNhbiBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgaWYgZW5hYmxlZCB0aHJvdWdoIHRoZSBFWFRJIHJlZ2lzdGVycy4NCisgLSBUaGUgUFZEIGlzIHN0b3BwZWQgaW4gU3RhbmRieSBtb2RlLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSB2b2x0YWdlIHRocmVzaG9sZCBkZXRlY3RlZCBieSB0aGUgUG93ZXIgVm9sdGFnZSBEZXRlY3RvcihQVkQpLg0KKyAgKiBAcGFyYW0gIFBXUl9QVkRMZXZlbDogc3BlY2lmaWVzIHRoZSBQVkQgZGV0ZWN0aW9uIGxldmVsDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBQV1JfUFZETGV2ZWxfMA0KKyAgKiAgICAgICAgICAgIEBhcmcgUFdSX1BWRExldmVsXzENCisgICogICAgICAgICAgICBAYXJnIFBXUl9QVkRMZXZlbF8yDQorICAqICAgICAgICAgICAgQGFyZyBQV1JfUFZETGV2ZWxfMw0KKyAgKiAgICAgICAgICAgIEBhcmcgUFdSX1BWRExldmVsXzQNCisgICogICAgICAgICAgICBAYXJnIFBXUl9QVkRMZXZlbF81DQorICAqICAgICAgICAgICAgQGFyZyBQV1JfUFZETGV2ZWxfNg0KKyAgKiAgICAgICAgICAgIEBhcmcgUFdSX1BWRExldmVsXzcNCisgICogQG5vdGUgICBSZWZlciB0byB0aGUgZWxlY3RyaWNhbCBjaGFyYWN0ZXJpc3RpY3Mgb2YgeW91ciBkZXZpY2UgZGF0YXNoZWV0IGZvcg0KKyAgKiAgICAgICAgIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgdm9sdGFnZSB0aHJlc2hvbGQgY29ycmVzcG9uZGluZyB0byBlYWNoIA0KKyAgKiAgICAgICAgIGRldGVjdGlvbiBsZXZlbC4gDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFBXUl9QVkRMZXZlbENvbmZpZyh1aW50MzJfdCBQV1JfUFZETGV2ZWwpDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19QV1JfUFZEX0xFVkVMKFBXUl9QVkRMZXZlbCkpOw0KKyAgDQorICB0bXByZWcgPSBQV1ItPkNSOw0KKyAgDQorICAvKiBDbGVhciBQTFNbNzo1XSBiaXRzICovDQorICB0bXByZWcgJj0gQ1JfUExTX01BU0s7DQorICANCisgIC8qIFNldCBQTFNbNzo1XSBiaXRzIGFjY29yZGluZyB0byBQV1JfUFZETGV2ZWwgdmFsdWUgKi8NCisgIHRtcHJlZyB8PSBQV1JfUFZETGV2ZWw7DQorICANCisgIC8qIFN0b3JlIHRoZSBuZXcgdmFsdWUgKi8NCisgIFBXUi0+Q1IgPSB0bXByZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFBvd2VyIFZvbHRhZ2UgRGV0ZWN0b3IoUFZEKS4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBQVkQuDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUFdSX1BWRENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgICooX19JTyB1aW50MzJfdCAqKSBDUl9QVkRFX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfR3JvdXAzIFdha2VVcCBwaW4gY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgV2FrZVVwIHBpbiBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICBXYWtlVXAgcGluIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAtIFdha2VVcCBwaW4gaXMgdXNlZCB0byB3YWtldXAgdGhlIHN5c3RlbSBmcm9tIFN0YW5kYnkgbW9kZS4gVGhpcyBwaW4gaXMgDQorICAgZm9yY2VkIGluIGlucHV0IHB1bGwgZG93biBjb25maWd1cmF0aW9uIGFuZCBpcyBhY3RpdmUgb24gcmlzaW5nIGVkZ2VzLg0KKyAtIFRoZXJlIGlzIG9ubHkgb25lIFdha2VVcCBwaW46IFdha2VVcCBQaW4gMSBvbiBQQS4wMC4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgV2FrZVVwIFBpbiBmdW5jdGlvbmFsaXR5Lg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFdha2VVcCBQaW4gZnVuY3Rpb25hbGl0eS4NCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBQV1JfV2FrZVVwUGluQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLyAgDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgKihfX0lPIHVpbnQzMl90ICopIENTUl9FV1VQX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfR3JvdXA0IEJhY2t1cCBSZWd1bGF0b3IgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgQmFja3VwIFJlZ3VsYXRvciBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICBCYWNrdXAgUmVndWxhdG9yIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAtIFRoZSBiYWNrdXAgZG9tYWluIGluY2x1ZGVzIDQgS2J5dGVzIG9mIGJhY2t1cCBTUkFNIGFjY2Vzc2libGUgb25seSBmcm9tIHRoZSANCisgICBDUFUsIGFuZCBhZGRyZXNzIGluIDMyLWJpdCwgMTYtYml0IG9yIDgtYml0IG1vZGUuIEl0cyBjb250ZW50IGlzIHJldGFpbmVkIA0KKyAgIGV2ZW4gaW4gU3RhbmRieSBvciBWQkFUIG1vZGUgd2hlbiB0aGUgbG93IHBvd2VyIGJhY2t1cCByZWd1bGF0b3IgaXMgZW5hYmxlZC4gDQorICAgSXQgY2FuIGJlIGNvbnNpZGVyZWQgYXMgYW4gaW50ZXJuYWwgRUVQUk9NIHdoZW4gVkJBVCBpcyBhbHdheXMgcHJlc2VudC4NCisgICBZb3UgY2FuIHVzZSB0aGUgUFdSX0JhY2t1cFJlZ3VsYXRvckNtZCgpIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgbG93IHBvd2VyDQorICAgYmFja3VwIHJlZ3VsYXRvciBhbmQgdXNlIHRoZSBQV1JfR2V0RmxhZ1N0YXR1cyhQV1JfRkxBR19CUlIpIHRvIGNoZWNrIGlmIGl0IGlzDQorICAgcmVhZHkgb3Igbm90LiANCisNCisgLSBXaGVuIHRoZSBiYWNrdXAgZG9tYWluIGlzIHN1cHBsaWVkIGJ5IFZERCAoYW5hbG9nIHN3aXRjaCBjb25uZWN0ZWQgdG8gVkREKSANCisgICB0aGUgYmFja3VwIFNSQU0gaXMgcG93ZXJlZCBmcm9tIFZERCB3aGljaCByZXBsYWNlcyB0aGUgVkJBVCBwb3dlciBzdXBwbHkgdG8gDQorICAgc2F2ZSBiYXR0ZXJ5IGxpZmUuDQorDQorIC0gVGhlIGJhY2t1cCBTUkFNIGlzIG5vdCBtYXNzIGVyYXNlZCBieSBhbiB0YW1wZXIgZXZlbnQuIEl0IGlzIHJlYWQgcHJvdGVjdGVkIA0KKyAgIHRvIHByZXZlbnQgY29uZmlkZW50aWFsIGRhdGEsIHN1Y2ggYXMgY3J5cHRvZ3JhcGhpYyBwcml2YXRlIGtleSwgZnJvbSBiZWluZyANCisgICBhY2Nlc3NlZC4gVGhlIGJhY2t1cCBTUkFNIGNhbiBiZSBlcmFzZWQgb25seSB0aHJvdWdoIHRoZSBGbGFzaCBpbnRlcmZhY2Ugd2hlbg0KKyAgIGEgcHJvdGVjdGlvbiBsZXZlbCBjaGFuZ2UgZnJvbSBsZXZlbCAxIHRvIGxldmVsIDAgaXMgcmVxdWVzdGVkLiANCisgICBSZWZlciB0byB0aGUgZGVzY3JpcHRpb24gb2YgUmVhZCBwcm90ZWN0aW9uIChSRFApIGluIHRoZSBGbGFzaCBwcm9ncmFtbWluZyBtYW51YWwuDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEJhY2t1cCBSZWd1bGF0b3IuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgQmFja3VwIFJlZ3VsYXRvci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUFdSX0JhY2t1cFJlZ3VsYXRvckNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAqKF9fSU8gdWludDMyX3QgKikgQ1NSX0JSRV9CQiA9ICh1aW50MzJfdClOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUFdSX0dyb3VwNSBGTEFTSCBQb3dlciBEb3duIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEZMQVNIIFBvd2VyIERvd24gY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgIEZMQVNIIFBvd2VyIERvd24gY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorIC0gQnkgc2V0dGluZyB0aGUgRlBEUyBiaXQgaW4gdGhlIFBXUl9DUiByZWdpc3RlciBieSB1c2luZyB0aGUgUFdSX0ZsYXNoUG93ZXJEb3duQ21kKCkNCisgICBmdW5jdGlvbiwgdGhlIEZsYXNoIG1lbW9yeSBhbHNvIGVudGVycyBwb3dlciBkb3duIG1vZGUgd2hlbiB0aGUgZGV2aWNlIGVudGVycyANCisgICBTdG9wIG1vZGUuIFdoZW4gdGhlIEZsYXNoIG1lbW9yeSBpcyBpbiBwb3dlciBkb3duIG1vZGUsIGFuIGFkZGl0aW9uYWwgc3RhcnR1cCANCisgICBkZWxheSBpcyBpbmN1cnJlZCB3aGVuIHdha2luZyB1cCBmcm9tIFN0b3AgbW9kZS4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgRmxhc2ggUG93ZXIgRG93biBpbiBTVE9QIG1vZGUuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgRmxhc2ggcG93ZXIgbW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUFdSX0ZsYXNoUG93ZXJEb3duQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgICooX19JTyB1aW50MzJfdCAqKSBDUl9GUERTX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfR3JvdXA2IExvdyBQb3dlciBtb2RlcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBMb3cgUG93ZXIgbW9kZXMgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgTG93IFBvd2VyIG1vZGVzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhlIGRldmljZXMgZmVhdHVyZSAzIGxvdy1wb3dlciBtb2RlczoNCisgICAtIFNsZWVwIG1vZGU6IENvcnRleC1NMyBjb3JlIHN0b3BwZWQsIHBlcmlwaGVyYWxzIGtlcHQgcnVubmluZy4NCisgICAtIFN0b3AgbW9kZTogYWxsIGNsb2NrcyBhcmUgc3RvcHBlZCwgcmVndWxhdG9yIHJ1bm5pbmcsIHJlZ3VsYXRvciBpbiBsb3cgcG93ZXIgbW9kZQ0KKyAgIC0gU3RhbmRieSBtb2RlOiAxLjJWIGRvbWFpbiBwb3dlcmVkIG9mZi4NCisgICANCisgICBTbGVlcCBtb2RlDQorICAgPT09PT09PT09PT0NCisgICAgLSBFbnRyeToNCisgICAgICAtIFRoZSBTbGVlcCBtb2RlIGlzIGVudGVyZWQgYnkgdXNpbmcgdGhlIF9fV0ZJKCkgb3IgX19XRkUoKSBmdW5jdGlvbnMuDQorICAgIC0gRXhpdDoNCisgICAgICAtIEFueSBwZXJpcGhlcmFsIGludGVycnVwdCBhY2tub3dsZWRnZWQgYnkgdGhlIG5lc3RlZCB2ZWN0b3JlZCBpbnRlcnJ1cHQgDQorICAgICAgICBjb250cm9sbGVyIChOVklDKSBjYW4gd2FrZSB1cCB0aGUgZGV2aWNlIGZyb20gU2xlZXAgbW9kZS4NCisNCisgICBTdG9wIG1vZGUNCisgICA9PT09PT09PT09DQorICAgSW4gU3RvcCBtb2RlLCBhbGwgY2xvY2tzIGluIHRoZSAxLjJWIGRvbWFpbiBhcmUgc3RvcHBlZCwgdGhlIFBMTCwgdGhlIEhTSSwNCisgICBhbmQgdGhlIEhTRSBSQyBvc2NpbGxhdG9ycyBhcmUgZGlzYWJsZWQuIEludGVybmFsIFNSQU0gYW5kIHJlZ2lzdGVyIGNvbnRlbnRzIA0KKyAgIGFyZSBwcmVzZXJ2ZWQuDQorICAgVGhlIHZvbHRhZ2UgcmVndWxhdG9yIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciBpbiBub3JtYWwgb3IgbG93LXBvd2VyIG1vZGUuDQorICAgVG8gbWluaW1pemUgdGhlIGNvbnN1bXB0aW9uIEluIFN0b3AgbW9kZSwgRkxBU0ggY2FuIGJlIHBvd2VyZWQgb2ZmIGJlZm9yZSANCisgICBlbnRlcmluZyB0aGUgU3RvcCBtb2RlLiBJdCBjYW4gYmUgc3dpdGNoZWQgb24gYWdhaW4gYnkgc29mdHdhcmUgYWZ0ZXIgZXhpdGluZyANCisgICB0aGUgU3RvcCBtb2RlIHVzaW5nIHRoZSBQV1JfRmxhc2hQb3dlckRvd25DbWQoKSBmdW5jdGlvbi4gDQorICAgDQorICAgIC0gRW50cnk6DQorICAgICAgLSBUaGUgU3RvcCBtb2RlIGlzIGVudGVyZWQgdXNpbmcgdGhlIFBXUl9FbnRlclNUT1BNb2RlKFBXUl9SZWd1bGF0b3JfTG93UG93ZXIsKSANCisgICAgICAgIGZ1bmN0aW9uIHdpdGggcmVndWxhdG9yIGluIExvd1Bvd2VyIG9yIHdpdGggUmVndWxhdG9yIE9OLg0KKyAgICAtIEV4aXQ6DQorICAgICAgLSBBbnkgRVhUSSBMaW5lIChJbnRlcm5hbCBvciBFeHRlcm5hbCkgY29uZmlndXJlZCBpbiBJbnRlcnJ1cHQvRXZlbnQgbW9kZS4NCisgICAgICANCisgICBTdGFuZGJ5IG1vZGUNCisgICA9PT09PT09PT09PT0NCisgICBUaGUgU3RhbmRieSBtb2RlIGFsbG93cyB0byBhY2hpZXZlIHRoZSBsb3dlc3QgcG93ZXIgY29uc3VtcHRpb24uIEl0IGlzIGJhc2VkIA0KKyAgIG9uIHRoZSBDb3J0ZXgtTTMgZGVlcHNsZWVwIG1vZGUsIHdpdGggdGhlIHZvbHRhZ2UgcmVndWxhdG9yIGRpc2FibGVkLiANCisgICBUaGUgMS4yViBkb21haW4gaXMgY29uc2VxdWVudGx5IHBvd2VyZWQgb2ZmLiBUaGUgUExMLCB0aGUgSFNJIG9zY2lsbGF0b3IgYW5kIA0KKyAgIHRoZSBIU0Ugb3NjaWxsYXRvciBhcmUgYWxzbyBzd2l0Y2hlZCBvZmYuIFNSQU0gYW5kIHJlZ2lzdGVyIGNvbnRlbnRzIGFyZSBsb3N0IA0KKyAgIGV4Y2VwdCBmb3IgdGhlIFJUQyByZWdpc3RlcnMsIFJUQyBiYWNrdXAgcmVnaXN0ZXJzLCBiYWNrdXAgU1JBTSBhbmQgU3RhbmRieSANCisgICBjaXJjdWl0cnkuDQorICAgDQorICAgVGhlIHZvbHRhZ2UgcmVndWxhdG9yIGlzIE9GRi4NCisgICAgICANCisgICAgLSBFbnRyeToNCisgICAgICAtIFRoZSBTdGFuZGJ5IG1vZGUgaXMgZW50ZXJlZCB1c2luZyB0aGUgUFdSX0VudGVyU1RBTkRCWU1vZGUoKSBmdW5jdGlvbi4NCisgICAgLSBFeGl0Og0KKyAgICAgIC0gV0tVUCBwaW4gcmlzaW5nIGVkZ2UsIFJUQyBhbGFybSAoQWxhcm0gQSBhbmQgQWxhcm0gQiksIFJUQyB3YWtldXAsDQorICAgICAgICB0YW1wZXIgZXZlbnQsIHRpbWUtc3RhbXAgZXZlbnQsIGV4dGVybmFsIHJlc2V0IGluIE5SU1QgcGluLCBJV0RHIHJlc2V0LiAgICAgICAgICAgICAgDQorDQorICAgQXV0by13YWtldXAgKEFXVSkgZnJvbSBsb3ctcG93ZXIgbW9kZQ0KKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICBUaGUgTUNVIGNhbiBiZSB3b2tlbiB1cCBmcm9tIGxvdy1wb3dlciBtb2RlIGJ5IGFuIFJUQyBBbGFybSBldmVudCwgYW4gUlRDIA0KKyAgIFdha2V1cCBldmVudCwgYSB0YW1wZXIgZXZlbnQsIGEgdGltZS1zdGFtcCBldmVudCwgb3IgYSBjb21wYXJhdG9yIGV2ZW50LCANCisgICB3aXRob3V0IGRlcGVuZGluZyBvbiBhbiBleHRlcm5hbCBpbnRlcnJ1cHQgKEF1dG8td2FrZXVwIG1vZGUpLg0KKw0KKyAgIC0gUlRDIGF1dG8td2FrZXVwIChBV1UpIGZyb20gdGhlIFN0b3AgbW9kZQ0KKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAgDQorICAgICAtIFRvIHdha2UgdXAgZnJvbSB0aGUgU3RvcCBtb2RlIHdpdGggYW4gUlRDIGFsYXJtIGV2ZW50LCBpdCBpcyBuZWNlc3NhcnkgdG86DQorICAgICAgIC0gQ29uZmlndXJlIHRoZSBFWFRJIExpbmUgMTcgdG8gYmUgc2Vuc2l0aXZlIHRvIHJpc2luZyBlZGdlcyAoSW50ZXJydXB0IA0KKyAgICAgICAgIG9yIEV2ZW50IG1vZGVzKSB1c2luZyB0aGUgRVhUSV9Jbml0KCkgZnVuY3Rpb24uDQorICAgICAgIC0gRW5hYmxlIHRoZSBSVEMgQWxhcm0gSW50ZXJydXB0IHVzaW5nIHRoZSBSVENfSVRDb25maWcoKSBmdW5jdGlvbg0KKyAgICAgICAtIENvbmZpZ3VyZSB0aGUgUlRDIHRvIGdlbmVyYXRlIHRoZSBSVEMgYWxhcm0gdXNpbmcgdGhlIFJUQ19TZXRBbGFybSgpIA0KKyAgICAgICAgIGFuZCBSVENfQWxhcm1DbWQoKSBmdW5jdGlvbnMuDQorICAgICAtIFRvIHdha2UgdXAgZnJvbSB0aGUgU3RvcCBtb2RlIHdpdGggYW4gUlRDIFRhbXBlciBvciB0aW1lIHN0YW1wIGV2ZW50LCBpdCANCisgICAgICAgaXMgbmVjZXNzYXJ5IHRvOg0KKyAgICAgICAtIENvbmZpZ3VyZSB0aGUgRVhUSSBMaW5lIDIxIHRvIGJlIHNlbnNpdGl2ZSB0byByaXNpbmcgZWRnZXMgKEludGVycnVwdCANCisgICAgICAgICBvciBFdmVudCBtb2RlcykgdXNpbmcgdGhlIEVYVElfSW5pdCgpIGZ1bmN0aW9uLg0KKyAgICAgICAtIEVuYWJsZSB0aGUgUlRDIFRhbXBlciBvciB0aW1lIHN0YW1wIEludGVycnVwdCB1c2luZyB0aGUgUlRDX0lUQ29uZmlnKCkgDQorICAgICAgICAgZnVuY3Rpb24NCisgICAgICAgLSBDb25maWd1cmUgdGhlIFJUQyB0byBkZXRlY3QgdGhlIHRhbXBlciBvciB0aW1lIHN0YW1wIGV2ZW50IHVzaW5nIHRoZQ0KKyAgICAgICAgIFJUQ19UaW1lU3RhbXBDb25maWcoKSwgUlRDX1RhbXBlclRyaWdnZXJDb25maWcoKSBhbmQgUlRDX1RhbXBlckNtZCgpDQorICAgICAgICAgZnVuY3Rpb25zLg0KKyAgICAgLSBUbyB3YWtlIHVwIGZyb20gdGhlIFN0b3AgbW9kZSB3aXRoIGFuIFJUQyBXYWtlVXAgZXZlbnQsIGl0IGlzIG5lY2Vzc2FyeSB0bzoNCisgICAgICAgLSBDb25maWd1cmUgdGhlIEVYVEkgTGluZSAyMiB0byBiZSBzZW5zaXRpdmUgdG8gcmlzaW5nIGVkZ2VzIChJbnRlcnJ1cHQgDQorICAgICAgICAgb3IgRXZlbnQgbW9kZXMpIHVzaW5nIHRoZSBFWFRJX0luaXQoKSBmdW5jdGlvbi4NCisgICAgICAgLSBFbmFibGUgdGhlIFJUQyBXYWtlVXAgSW50ZXJydXB0IHVzaW5nIHRoZSBSVENfSVRDb25maWcoKSBmdW5jdGlvbg0KKyAgICAgICAtIENvbmZpZ3VyZSB0aGUgUlRDIHRvIGdlbmVyYXRlIHRoZSBSVEMgV2FrZVVwIGV2ZW50IHVzaW5nIHRoZSBSVENfV2FrZVVwQ2xvY2tDb25maWcoKSwgDQorICAgICAgICAgUlRDX1NldFdha2VVcENvdW50ZXIoKSBhbmQgUlRDX1dha2VVcENtZCgpIGZ1bmN0aW9ucy4NCisNCisgICAtIFJUQyBhdXRvLXdha2V1cCAoQVdVKSBmcm9tIHRoZSBTdGFuZGJ5IG1vZGUNCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgIC0gVG8gd2FrZSB1cCBmcm9tIHRoZSBTdGFuZGJ5IG1vZGUgd2l0aCBhbiBSVEMgYWxhcm0gZXZlbnQsIGl0IGlzIG5lY2Vzc2FyeSB0bzoNCisgICAgICAgLSBFbmFibGUgdGhlIFJUQyBBbGFybSBJbnRlcnJ1cHQgdXNpbmcgdGhlIFJUQ19JVENvbmZpZygpIGZ1bmN0aW9uDQorICAgICAgIC0gQ29uZmlndXJlIHRoZSBSVEMgdG8gZ2VuZXJhdGUgdGhlIFJUQyBhbGFybSB1c2luZyB0aGUgUlRDX1NldEFsYXJtKCkgDQorICAgICAgICAgYW5kIFJUQ19BbGFybUNtZCgpIGZ1bmN0aW9ucy4NCisgICAgIC0gVG8gd2FrZSB1cCBmcm9tIHRoZSBTdGFuZGJ5IG1vZGUgd2l0aCBhbiBSVEMgVGFtcGVyIG9yIHRpbWUgc3RhbXAgZXZlbnQsIGl0IA0KKyAgICAgICBpcyBuZWNlc3NhcnkgdG86DQorICAgICAgIC0gRW5hYmxlIHRoZSBSVEMgVGFtcGVyIG9yIHRpbWUgc3RhbXAgSW50ZXJydXB0IHVzaW5nIHRoZSBSVENfSVRDb25maWcoKSANCisgICAgICAgICBmdW5jdGlvbg0KKyAgICAgICAtIENvbmZpZ3VyZSB0aGUgUlRDIHRvIGRldGVjdCB0aGUgdGFtcGVyIG9yIHRpbWUgc3RhbXAgZXZlbnQgdXNpbmcgdGhlDQorICAgICAgICAgUlRDX1RpbWVTdGFtcENvbmZpZygpLCBSVENfVGFtcGVyVHJpZ2dlckNvbmZpZygpIGFuZCBSVENfVGFtcGVyQ21kKCkNCisgICAgICAgICBmdW5jdGlvbnMuDQorICAgICAtIFRvIHdha2UgdXAgZnJvbSB0aGUgU3RhbmRieSBtb2RlIHdpdGggYW4gUlRDIFdha2VVcCBldmVudCwgaXQgaXMgbmVjZXNzYXJ5IHRvOg0KKyAgICAgICAtIEVuYWJsZSB0aGUgUlRDIFdha2VVcCBJbnRlcnJ1cHQgdXNpbmcgdGhlIFJUQ19JVENvbmZpZygpIGZ1bmN0aW9uDQorICAgICAgIC0gQ29uZmlndXJlIHRoZSBSVEMgdG8gZ2VuZXJhdGUgdGhlIFJUQyBXYWtlVXAgZXZlbnQgdXNpbmcgdGhlIFJUQ19XYWtlVXBDbG9ja0NvbmZpZygpLCANCisgICAgICAgICBSVENfU2V0V2FrZVVwQ291bnRlcigpIGFuZCBSVENfV2FrZVVwQ21kKCkgZnVuY3Rpb25zLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbnRlcnMgU1RPUCBtb2RlLg0KKyAgKiAgIA0KKyAgKiBAbm90ZSAgIEluIFN0b3AgbW9kZSwgYWxsIEkvTyBwaW5zIGtlZXAgdGhlIHNhbWUgc3RhdGUgYXMgaW4gUnVuIG1vZGUuDQorICAqIEBub3RlICAgV2hlbiBleGl0aW5nIFN0b3AgbW9kZSBieSBpc3N1aW5nIGFuIGludGVycnVwdCBvciBhIHdha2V1cCBldmVudCwgDQorICAqICAgICAgICAgdGhlIEhTSSBSQyBvc2NpbGxhdG9yIGlzIHNlbGVjdGVkIGFzIHN5c3RlbSBjbG9jay4NCisgICogQG5vdGUgICBXaGVuIHRoZSB2b2x0YWdlIHJlZ3VsYXRvciBvcGVyYXRlcyBpbiBsb3cgcG93ZXIgbW9kZSwgYW4gYWRkaXRpb25hbCANCisgICogICAgICAgICBzdGFydHVwIGRlbGF5IGlzIGluY3VycmVkIHdoZW4gd2FraW5nIHVwIGZyb20gU3RvcCBtb2RlLiANCisgICogICAgICAgICBCeSBrZWVwaW5nIHRoZSBpbnRlcm5hbCByZWd1bGF0b3IgT04gZHVyaW5nIFN0b3AgbW9kZSwgdGhlIGNvbnN1bXB0aW9uIA0KKyAgKiAgICAgICAgIGlzIGhpZ2hlciBhbHRob3VnaCB0aGUgc3RhcnR1cCB0aW1lIGlzIHJlZHVjZWQuICAgICAgICAgICANCisgICogICAgIA0KKyAgKiBAcGFyYW0gIFBXUl9SZWd1bGF0b3I6IHNwZWNpZmllcyB0aGUgcmVndWxhdG9yIHN0YXRlIGluIFNUT1AgbW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFBXUl9SZWd1bGF0b3JfT046IFNUT1AgbW9kZSB3aXRoIHJlZ3VsYXRvciBPTg0KKyAgKiAgICAgICAgICAgIEBhcmcgUFdSX1JlZ3VsYXRvcl9Mb3dQb3dlcjogU1RPUCBtb2RlIHdpdGggcmVndWxhdG9yIGluIGxvdyBwb3dlciBtb2RlDQorICAqIEBwYXJhbSAgUFdSX1NUT1BFbnRyeTogc3BlY2lmaWVzIGlmIFNUT1AgbW9kZSBpbiBlbnRlcmVkIHdpdGggV0ZJIG9yIFdGRSBpbnN0cnVjdGlvbi4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFBXUl9TVE9QRW50cnlfV0ZJOiBlbnRlciBTVE9QIG1vZGUgd2l0aCBXRkkgaW5zdHJ1Y3Rpb24NCisgICogICAgICAgICAgICBAYXJnIFBXUl9TVE9QRW50cnlfV0ZFOiBlbnRlciBTVE9QIG1vZGUgd2l0aCBXRkUgaW5zdHJ1Y3Rpb24NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUFdSX0VudGVyU1RPUE1vZGUodWludDMyX3QgUFdSX1JlZ3VsYXRvciwgdWludDhfdCBQV1JfU1RPUEVudHJ5KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUFdSX1JFR1VMQVRPUihQV1JfUmVndWxhdG9yKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfUFdSX1NUT1BfRU5UUlkoUFdSX1NUT1BFbnRyeSkpOw0KKyAgDQorICAvKiBTZWxlY3QgdGhlIHJlZ3VsYXRvciBzdGF0ZSBpbiBTVE9QIG1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIHRtcHJlZyA9IFBXUi0+Q1I7DQorICAvKiBDbGVhciBQRERTIGFuZCBMUERTUiBiaXRzICovDQorICB0bXByZWcgJj0gQ1JfRFNfTUFTSzsNCisgIA0KKyAgLyogU2V0IExQRFNSIGJpdCBhY2NvcmRpbmcgdG8gUFdSX1JlZ3VsYXRvciB2YWx1ZSAqLw0KKyAgdG1wcmVnIHw9IFBXUl9SZWd1bGF0b3I7DQorICANCisgIC8qIFN0b3JlIHRoZSBuZXcgdmFsdWUgKi8NCisgIFBXUi0+Q1IgPSB0bXByZWc7DQorICANCisgIC8qIFNldCBTTEVFUERFRVAgYml0IG9mIENvcnRleCBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgU0NCLT5TQ1IgfD0gU0NCX1NDUl9TTEVFUERFRVBfTXNrOw0KKyAgDQorICAvKiBTZWxlY3QgU1RPUCBtb2RlIGVudHJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIGlmKFBXUl9TVE9QRW50cnkgPT0gUFdSX1NUT1BFbnRyeV9XRkkpDQorICB7ICAgDQorICAgIC8qIFJlcXVlc3QgV2FpdCBGb3IgSW50ZXJydXB0ICovDQorICAgIF9fV0ZJKCk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFJlcXVlc3QgV2FpdCBGb3IgRXZlbnQgKi8NCisgICAgX19XRkUoKTsNCisgIH0NCisgIC8qIFJlc2V0IFNMRUVQREVFUCBiaXQgb2YgQ29ydGV4IFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovDQorICBTQ0ItPlNDUiAmPSAodWludDMyX3QpfigodWludDMyX3QpU0NCX1NDUl9TTEVFUERFRVBfTXNrKTsgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbnRlcnMgU1RBTkRCWSBtb2RlLg0KKyAgKiBAbm90ZSAgIEluIFN0YW5kYnkgbW9kZSwgYWxsIEkvTyBwaW5zIGFyZSBoaWdoIGltcGVkYW5jZSBleGNlcHQgZm9yOg0KKyAgKiAgICAgICAgICAtIFJlc2V0IHBhZCAoc3RpbGwgYXZhaWxhYmxlKSANCisgICogICAgICAgICAgLSBSVENfQUYxIHBpbiAoUEMxMykgaWYgY29uZmlndXJlZCBmb3IgdGFtcGVyLCB0aW1lLXN0YW1wLCBSVEMgDQorICAqICAgICAgICAgICAgQWxhcm0gb3V0LCBvciBSVEMgY2xvY2sgY2FsaWJyYXRpb24gb3V0Lg0KKyAgKiAgICAgICAgICAtIFJUQ19BRjIgcGluIChQSTgpIGlmIGNvbmZpZ3VyZWQgZm9yIHRhbXBlciBvciB0aW1lLXN0YW1wLiAgDQorICAqICAgICAgICAgIC0gV0tVUCBwaW4gMSAoUEEwKSBpZiBlbmFibGVkLiAgICAgICANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFBXUl9FbnRlclNUQU5EQllNb2RlKHZvaWQpDQorew0KKyAgLyogQ2xlYXIgV2FrZXVwIGZsYWcgKi8NCisgIFBXUi0+Q1IgfD0gUFdSX0NSX0NXVUY7DQorICANCisgIC8qIFNlbGVjdCBTVEFOREJZIG1vZGUgKi8NCisgIFBXUi0+Q1IgfD0gUFdSX0NSX1BERFM7DQorICANCisgIC8qIFNldCBTTEVFUERFRVAgYml0IG9mIENvcnRleCBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLw0KKyAgU0NCLT5TQ1IgfD0gU0NCX1NDUl9TTEVFUERFRVBfTXNrOw0KKyAgDQorLyogVGhpcyBvcHRpb24gaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBzdG9yZSBvcGVyYXRpb25zIGFyZSBjb21wbGV0ZWQgKi8NCisjaWYgZGVmaW5lZCAoIF9fQ0NfQVJNICAgKQ0KKyAgX19mb3JjZV9zdG9yZXMoKTsNCisjZW5kaWYNCisgIC8qIFJlcXVlc3QgV2FpdCBGb3IgSW50ZXJydXB0ICovDQorICBfX1dGSSgpOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBQV1JfR3JvdXA3IEZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIEZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBQV1IgZmxhZyBpcyBzZXQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFBXUl9GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBQV1JfRkxBR19XVTogV2FrZSBVcCBmbGFnLiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgYSB3YWtldXAgZXZlbnQgDQorICAqICAgICAgICAgICAgICAgICAgd2FzIHJlY2VpdmVkIGZyb20gdGhlIFdLVVAgcGluIG9yIGZyb20gdGhlIFJUQyBhbGFybSAoQWxhcm0gQSANCisgICogICAgICAgICAgICAgICAgICBvciBBbGFybSBCKSwgUlRDIFRhbXBlciBldmVudCwgUlRDIFRpbWVTdGFtcCBldmVudCBvciBSVEMgV2FrZXVwLg0KKyAgKiAgICAgICAgICAgICAgICAgIEFuIGFkZGl0aW9uYWwgd2FrZXVwIGV2ZW50IGlzIGRldGVjdGVkIGlmIHRoZSBXS1VQIHBpbiBpcyBlbmFibGVkIA0KKyAgKiAgICAgICAgICAgICAgICAgIChieSBzZXR0aW5nIHRoZSBFV1VQIGJpdCkgd2hlbiB0aGUgV0tVUCBwaW4gbGV2ZWwgaXMgYWxyZWFkeSBoaWdoLiAgDQorICAqICAgICAgICAgICAgQGFyZyBQV1JfRkxBR19TQjogU3RhbmRCeSBmbGFnLiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIHN5c3RlbSB3YXMNCisgICogICAgICAgICAgICAgICAgICByZXN1bWVkIGZyb20gU3RhbmRCeSBtb2RlLiAgICANCisgICogICAgICAgICAgICBAYXJnIFBXUl9GTEFHX1BWRE86IFBWRCBPdXRwdXQuIFRoaXMgZmxhZyBpcyB2YWxpZCBvbmx5IGlmIFBWRCBpcyBlbmFibGVkIA0KKyAgKiAgICAgICAgICAgICAgICAgIGJ5IHRoZSBQV1JfUFZEQ21kKCkgZnVuY3Rpb24uIFRoZSBQVkQgaXMgc3RvcHBlZCBieSBTdGFuZGJ5IG1vZGUgDQorICAqICAgICAgICAgICAgICAgICAgRm9yIHRoaXMgcmVhc29uLCB0aGlzIGJpdCBpcyBlcXVhbCB0byAwIGFmdGVyIFN0YW5kYnkgb3IgcmVzZXQNCisgICogICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgUFZERSBiaXQgaXMgc2V0Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgUFdSX0ZMQUdfQlJSOiBCYWNrdXAgcmVndWxhdG9yIHJlYWR5IGZsYWcuIFRoaXMgYml0IGlzIG5vdCByZXNldCANCisgICogICAgICAgICAgICAgICAgICB3aGVuIHRoZSBkZXZpY2Ugd2FrZXMgdXAgZnJvbSBTdGFuZGJ5IG1vZGUgb3IgYnkgYSBzeXN0ZW0gcmVzZXQgDQorICAqICAgICAgICAgICAgICAgICAgb3IgcG93ZXIgcmVzZXQuICANCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFBXUl9GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIFBXUl9HZXRGbGFnU3RhdHVzKHVpbnQzMl90IFBXUl9GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUFdSX0dFVF9GTEFHKFBXUl9GTEFHKSk7DQorICANCisgIGlmICgoUFdSLT5DU1IgJiBQV1JfRkxBRykgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBmbGFnIHN0YXR1cyAqLw0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBQV1IncyBwZW5kaW5nIGZsYWdzLg0KKyAgKiBAcGFyYW0gIFBXUl9GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBQV1JfRkxBR19XVTogV2FrZSBVcCBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBQV1JfRkxBR19TQjogU3RhbmRCeSBmbGFnDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFBXUl9DbGVhckZsYWcodWludDMyX3QgUFdSX0ZMQUcpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19QV1JfQ0xFQVJfRkxBRyhQV1JfRkxBRykpOw0KKyAgICAgICAgIA0KKyAgUFdSLT5DUiB8PSAgUFdSX0ZMQUcgPDwgMjsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9yY2MuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfcmNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2OGM1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfcmNjLmMKQEAgLTAsMCArMSwxODE3IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfcmNjLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUmVzZXQgYW5kIGNsb2NrIGNvbnRyb2wgKFJDQykgcGVyaXBoZXJhbDogICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBJbnRlcm5hbC9leHRlcm5hbCBjbG9ja3MsIFBMTCwgQ1NTIGFuZCBNQ08gY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBTeXN0ZW0sIEFIQiBhbmQgQVBCIGJ1c3NlcyBjbG9ja3MgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBQZXJpcGhlcmFsIGNsb2NrcyBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQNCisgICoNCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQyBzcGVjaWZpYyBmZWF0dXJlcw0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgIA0KKyAgKiAgICAgICAgICBBZnRlciByZXNldCB0aGUgZGV2aWNlIGlzIHJ1bm5pbmcgZnJvbSBJbnRlcm5hbCBIaWdoIFNwZWVkIG9zY2lsbGF0b3IgDQorICAqICAgICAgICAgIChIU0kgMTZNSHopIHdpdGggRmxhc2ggMCB3YWl0IHN0YXRlLCBGbGFzaCBwcmVmZXRjaCBidWZmZXIsIEQtQ2FjaGUgDQorICAqICAgICAgICAgIGFuZCBJLUNhY2hlIGFyZSBkaXNhYmxlZCwgYW5kIGFsbCBwZXJpcGhlcmFscyBhcmUgb2ZmIGV4Y2VwdCBpbnRlcm5hbA0KKyAgKiAgICAgICAgICBTUkFNLCBGbGFzaCBhbmQgSlRBRy4NCisgICogICAgICAgICAgIC0gVGhlcmUgaXMgbm8gcHJlc2NhbGVyIG9uIEhpZ2ggc3BlZWQgKEFIQikgYW5kIExvdyBzcGVlZCAoQVBCKSBidXNzZXM7DQorICAqICAgICAgICAgICAgIGFsbCBwZXJpcGhlcmFscyBtYXBwZWQgb24gdGhlc2UgYnVzc2VzIGFyZSBydW5uaW5nIGF0IEhTSSBzcGVlZC4NCisgICogICAgICAgCSAgLSBUaGUgY2xvY2sgZm9yIGFsbCBwZXJpcGhlcmFscyBpcyBzd2l0Y2hlZCBvZmYsIGV4Y2VwdCB0aGUgU1JBTSBhbmQgRkxBU0guDQorICAqICAgICAgICAgICAtIEFsbCBHUElPcyBhcmUgaW4gaW5wdXQgZmxvYXRpbmcgc3RhdGUsIGV4Y2VwdCB0aGUgSlRBRyBwaW5zIHdoaWNoDQorICAqICAgICAgICAgICAgIGFyZSBhc3NpZ25lZCB0byBiZSB1c2VkIGZvciBkZWJ1ZyBwdXJwb3NlLg0KKyAgKiAgICAgICAgDQorICAqICAgICAgICAgIE9uY2UgdGhlIGRldmljZSBzdGFydGVkIGZyb20gcmVzZXQsIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGhhcyB0bzogICAgICAgIA0KKyAgKiAgICAgICAgICAgLSBDb25maWd1cmUgdGhlIGNsb2NrIHNvdXJjZSB0byBiZSB1c2VkIHRvIGRyaXZlIHRoZSBTeXN0ZW0gY2xvY2sNCisgICogICAgICAgICAgICAgKGlmIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyBoaWdoZXIgZnJlcXVlbmN5L3BlcmZvcm1hbmNlKQ0KKyAgKiAgICAgICAgICAgLSBDb25maWd1cmUgdGhlIFN5c3RlbSBjbG9jayBmcmVxdWVuY3kgYW5kIEZsYXNoIHNldHRpbmdzICANCisgICogICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBBSEIgYW5kIEFQQiBidXNzZXMgcHJlc2NhbGVycw0KKyAgKiAgICAgICAgICAgLSBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgcGVyaXBoZXJhbChzKSB0byBiZSB1c2VkDQorICAqICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGUgY2xvY2sgc291cmNlKHMpIGZvciBwZXJpcGhlcmFscyB3aGljaCBjbG9ja3MgYXJlIG5vdA0KKyAgKiAgICAgICAgICAgICBkZXJpdmVkIGZyb20gdGhlIFN5c3RlbSBjbG9jayAoSTJTLCBSVEMsIEFEQywgVVNCIE9URyBGUy9TRElPL1JORykgICAgICANCisgICogICAgICAgICAgICAgICAgICAgICAgICANCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKiAgICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBSQ0MgDQorICAqIEBicmllZiBSQ0MgZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovIA0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAtLS0tLS0tLS0tLS0gUkNDIHJlZ2lzdGVycyBiaXQgYWRkcmVzcyBpbiB0aGUgYWxpYXMgcmVnaW9uIC0tLS0tLS0tLS0tICovDQorI2RlZmluZSBSQ0NfT0ZGU0VUICAgICAgICAgICAgICAgIChSQ0NfQkFTRSAtIFBFUklQSF9CQVNFKQ0KKy8qIC0tLSBDUiBSZWdpc3RlciAtLS0qLw0KKy8qIEFsaWFzIHdvcmQgYWRkcmVzcyBvZiBIU0lPTiBiaXQgKi8NCisjZGVmaW5lIENSX09GRlNFVCAgICAgICAgICAgICAgICAgKFJDQ19PRkZTRVQgKyAweDAwKQ0KKyNkZWZpbmUgSFNJT05fQml0TnVtYmVyICAgICAgICAgICAweDAwDQorI2RlZmluZSBDUl9IU0lPTl9CQiAgICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDUl9PRkZTRVQgKiAzMikgKyAoSFNJT05fQml0TnVtYmVyICogNCkpDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIENTU09OIGJpdCAqLw0KKyNkZWZpbmUgQ1NTT05fQml0TnVtYmVyICAgICAgICAgICAweDEzDQorI2RlZmluZSBDUl9DU1NPTl9CQiAgICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDUl9PRkZTRVQgKiAzMikgKyAoQ1NTT05fQml0TnVtYmVyICogNCkpDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIFBMTE9OIGJpdCAqLw0KKyNkZWZpbmUgUExMT05fQml0TnVtYmVyICAgICAgICAgICAweDE4DQorI2RlZmluZSBDUl9QTExPTl9CQiAgICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDUl9PRkZTRVQgKiAzMikgKyAoUExMT05fQml0TnVtYmVyICogNCkpDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIFBMTEkyU09OIGJpdCAqLw0KKyNkZWZpbmUgUExMSTJTT05fQml0TnVtYmVyICAgICAgICAweDFBDQorI2RlZmluZSBDUl9QTExJMlNPTl9CQiAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDUl9PRkZTRVQgKiAzMikgKyAoUExMSTJTT05fQml0TnVtYmVyICogNCkpDQorDQorLyogLS0tIENGR1IgUmVnaXN0ZXIgLS0tKi8NCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgSTJTU1JDIGJpdCAqLw0KKyNkZWZpbmUgQ0ZHUl9PRkZTRVQgICAgICAgICAgICAgICAoUkNDX09GRlNFVCArIDB4MDgpDQorI2RlZmluZSBJMlNTUkNfQml0TnVtYmVyICAgICAgICAgIDB4MTcNCisjZGVmaW5lIENGR1JfSTJTU1JDX0JCICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKENGR1JfT0ZGU0VUICogMzIpICsgKEkyU1NSQ19CaXROdW1iZXIgKiA0KSkNCisNCisvKiAtLS0gQkRDUiBSZWdpc3RlciAtLS0qLw0KKy8qIEFsaWFzIHdvcmQgYWRkcmVzcyBvZiBSVENFTiBiaXQgKi8NCisjZGVmaW5lIEJEQ1JfT0ZGU0VUICAgICAgICAgICAgICAgKFJDQ19PRkZTRVQgKyAweDcwKQ0KKyNkZWZpbmUgUlRDRU5fQml0TnVtYmVyICAgICAgICAgICAweDBGDQorI2RlZmluZSBCRENSX1JUQ0VOX0JCICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChCRENSX09GRlNFVCAqIDMyKSArIChSVENFTl9CaXROdW1iZXIgKiA0KSkNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgQkRSU1QgYml0ICovDQorI2RlZmluZSBCRFJTVF9CaXROdW1iZXIgICAgICAgICAgIDB4MTANCisjZGVmaW5lIEJEQ1JfQkRSU1RfQkIgICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKEJEQ1JfT0ZGU0VUICogMzIpICsgKEJEUlNUX0JpdE51bWJlciAqIDQpKQ0KKy8qIC0tLSBDU1IgUmVnaXN0ZXIgLS0tKi8NCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgTFNJT04gYml0ICovDQorI2RlZmluZSBDU1JfT0ZGU0VUICAgICAgICAgICAgICAgIChSQ0NfT0ZGU0VUICsgMHg3NCkNCisjZGVmaW5lIExTSU9OX0JpdE51bWJlciAgICAgICAgICAgMHgwMA0KKyNkZWZpbmUgQ1NSX0xTSU9OX0JCICAgICAgICAgICAgICAoUEVSSVBIX0JCX0JBU0UgKyAoQ1NSX09GRlNFVCAqIDMyKSArIChMU0lPTl9CaXROdW1iZXIgKiA0KSkNCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJDQyByZWdpc3RlcnMgYml0IG1hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyogQ0ZHUiByZWdpc3RlciBiaXQgbWFzayAqLw0KKyNkZWZpbmUgQ0ZHUl9NQ08yX1JFU0VUX01BU0sgICAgICAoKHVpbnQzMl90KTB4MDdGRkZGRkYpDQorI2RlZmluZSBDRkdSX01DTzFfUkVTRVRfTUFTSyAgICAgICgodWludDMyX3QpMHhGODlGRkZGRikNCisNCisvKiBSQ0MgRmxhZyBNYXNrICovDQorI2RlZmluZSBGTEFHX01BU0sgICAgICAgICAgICAgICAgICgodWludDhfdCkweDFGKQ0KKw0KKy8qIENSIHJlZ2lzdGVyIGJ5dGUgMyAoQml0c1syMzoxNl0pIGJhc2UgYWRkcmVzcyAqLw0KKyNkZWZpbmUgQ1JfQllURTNfQUREUkVTUyAgICAgICAgICAoKHVpbnQzMl90KTB4NDAwMjM4MDIpDQorDQorLyogQ0lSIHJlZ2lzdGVyIGJ5dGUgMiAoQml0c1sxNTo4XSkgYmFzZSBhZGRyZXNzICovDQorI2RlZmluZSBDSVJfQllURTJfQUREUkVTUyAgICAgICAgICgodWludDMyX3QpKFJDQ19CQVNFICsgMHgwQyArIDB4MDEpKQ0KKw0KKy8qIENJUiByZWdpc3RlciBieXRlIDMgKEJpdHNbMjM6MTZdKSBiYXNlIGFkZHJlc3MgKi8NCisjZGVmaW5lIENJUl9CWVRFM19BRERSRVNTICAgICAgICAgKCh1aW50MzJfdCkoUkNDX0JBU0UgKyAweDBDICsgMHgwMikpDQorDQorLyogQkRDUiByZWdpc3RlciBiYXNlIGFkZHJlc3MgKi8NCisjZGVmaW5lIEJEQ1JfQUREUkVTUyAgICAgICAgICAgICAgKFBFUklQSF9CQVNFICsgQkRDUl9PRkZTRVQpDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KK3N0YXRpYyBfX0kgdWludDhfdCBBUEJBSEJQcmVzY1RhYmxlWzE2XSA9IHswLCAwLCAwLCAwLCAxLCAyLCAzLCA0LCAxLCAyLCAzLCA0LCA2LCA3LCA4LCA5fTsNCisNCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBSQ0NfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKiBAZGVmZ3JvdXAgUkNDX0dyb3VwMSBJbnRlcm5hbCBhbmQgZXh0ZXJuYWwgY2xvY2tzLCBQTEwsIENTUyBhbmQgTUNPIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEludGVybmFsIGFuZCBleHRlcm5hbCBjbG9ja3MsIFBMTCwgQ1NTIGFuZCBNQ08gY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgIEludGVybmFsL2V4dGVybmFsIGNsb2NrcywgUExMLCBDU1MgYW5kIE1DTyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIGludGVybmFsL2V4dGVybmFsIGNsb2NrcywNCisgIFBMTHMsIENTUyBhbmQgTUNPIHBpbnMuDQorICANCisgIDEuIEhTSSAoaGlnaC1zcGVlZCBpbnRlcm5hbCksIDE2IE1IeiBmYWN0b3J5LXRyaW1tZWQgUkMgdXNlZCBkaXJlY3RseSBvciB0aHJvdWdoDQorICAgICB0aGUgUExMIGFzIFN5c3RlbSBjbG9jayBzb3VyY2UuDQorDQorICAyLiBMU0kgKGxvdy1zcGVlZCBpbnRlcm5hbCksIDMyIEtIeiBsb3cgY29uc3VtcHRpb24gUkMgdXNlZCBhcyBJV0RHIGFuZC9vciBSVEMNCisgICAgIGNsb2NrIHNvdXJjZS4NCisNCisgIDMuIEhTRSAoaGlnaC1zcGVlZCBleHRlcm5hbCksIDQgdG8gMjYgTUh6IGNyeXN0YWwgb3NjaWxsYXRvciB1c2VkIGRpcmVjdGx5IG9yDQorICAgICB0aHJvdWdoIHRoZSBQTEwgYXMgU3lzdGVtIGNsb2NrIHNvdXJjZS4gQ2FuIGJlIHVzZWQgYWxzbyBhcyBSVEMgY2xvY2sgc291cmNlLg0KKw0KKyAgNC4gTFNFIChsb3ctc3BlZWQgZXh0ZXJuYWwpLCAzMiBLSHogb3NjaWxsYXRvciB1c2VkIGFzIFJUQyBjbG9jayBzb3VyY2UuICAgDQorDQorICA1LiBQTEwgKGNsb2NrZWQgYnkgSFNJIG9yIEhTRSksIGZlYXR1cmluZyB0d28gZGlmZmVyZW50IG91dHB1dCBjbG9ja3M6DQorICAgICAgLSBUaGUgZmlyc3Qgb3V0cHV0IGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGhpZ2ggc3BlZWQgc3lzdGVtIGNsb2NrICh1cCB0byAxMjAgTUh6KQ0KKyAgICAgIC0gVGhlIHNlY29uZCBvdXRwdXQgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2xvY2sgZm9yIHRoZSBVU0IgT1RHIEZTICg0OCBNSHopLA0KKyAgICAgICAgdGhlIHJhbmRvbSBhbmFsb2cgZ2VuZXJhdG9yICg8PTQ4IE1IeikgYW5kIHRoZSBTRElPICg8PSA0OCBNSHopLg0KKw0KKyAgNi4gUExMSTJTIChjbG9ja2VkIGJ5IEhTSSBvciBIU0UpLCB1c2VkIHRvIGdlbmVyYXRlIGFuIGFjY3VyYXRlIGNsb2NrIHRvIGFjaGlldmUgDQorICAgICBoaWdoLXF1YWxpdHkgYXVkaW8gcGVyZm9ybWFuY2Ugb24gdGhlIEkyUyBpbnRlcmZhY2UuDQorICANCisgIDcuIENTUyAoQ2xvY2sgc2VjdXJpdHkgc3lzdGVtKSwgb25jZSBlbmFibGUgYW5kIGlmIGEgSFNFIGNsb2NrIGZhaWx1cmUgb2NjdXJzIA0KKyAgICAgKEhTRSB1c2VkIGRpcmVjdGx5IG9yIHRocm91Z2ggUExMIGFzIFN5c3RlbSBjbG9jayBzb3VyY2UpLCB0aGUgU3lzdGVtIGNsb2NrDQorICAgICBpcyBhdXRvbWF0aWNhbGx5IHN3aXRjaGVkIHRvIEhTSSBhbmQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBpZiBlbmFibGVkLiANCisgICAgIFRoZSBpbnRlcnJ1cHQgaXMgbGlua2VkIHRvIHRoZSBDb3J0ZXgtTTMgTk1JIChOb24tTWFza2FibGUgSW50ZXJydXB0KSANCisgICAgIGV4Y2VwdGlvbiB2ZWN0b3IuICAgDQorDQorICA4LiBNQ08xIChtaWNyb2NvbnRyb2xsZXIgY2xvY2sgb3V0cHV0KSwgdXNlZCB0byBvdXRwdXQgSFNJLCBMU0UsIEhTRSBvciBQTEwNCisgICAgIGNsb2NrICh0aHJvdWdoIGEgY29uZmlndXJhYmxlIHByZXNjYWxlcikgb24gUEE4IHBpbi4NCisNCisgIDkuIE1DTzIgKG1pY3JvY29udHJvbGxlciBjbG9jayBvdXRwdXQpLCB1c2VkIHRvIG91dHB1dCBIU0UsIFBMTCwgU1lTQ0xLIG9yIFBMTEkyUw0KKyAgICAgY2xvY2sgKHRocm91Z2ggYSBjb25maWd1cmFibGUgcHJlc2NhbGVyKSBvbiBQQzkgcGluLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBSZXNldHMgdGhlIFJDQyBjbG9jayBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlLg0KKyAgKiBAbm90ZSAgIFRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlIG9mIHRoZSBjbG9jayBjb25maWd1cmF0aW9uIGlzIGdpdmVuIGJlbG93Og0KKyAgKiAgICAgICAgICAgIC0gSFNJIE9OIGFuZCB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UNCisgICogICAgICAgICAgICAtIEhTRSwgUExMIGFuZCBQTExJMlMgT0ZGDQorICAqICAgICAgICAgICAgLSBBSEIsIEFQQjEgYW5kIEFQQjIgcHJlc2NhbGVyIHNldCB0byAxLg0KKyAgKiAgICAgICAgICAgIC0gQ1NTLCBNQ08xIGFuZCBNQ08yIE9GRg0KKyAgKiAgICAgICAgICAgIC0gQWxsIGludGVycnVwdHMgZGlzYWJsZWQNCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbW9kaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZQ0KKyAgKiAgICAgICAgICAgIC0gUGVyaXBoZXJhbCBjbG9ja3MNCisgICogICAgICAgICAgICAtIExTSSwgTFNFIGFuZCBSVEMgY2xvY2tzIA0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0RlSW5pdCh2b2lkKQ0KK3sNCisgIC8qIFNldCBIU0lPTiBiaXQgKi8NCisgIFJDQy0+Q1IgfD0gKHVpbnQzMl90KTB4MDAwMDAwMDE7DQorDQorICAvKiBSZXNldCBDRkdSIHJlZ2lzdGVyICovDQorICBSQ0MtPkNGR1IgPSAweDAwMDAwMDAwOw0KKw0KKyAgLyogUmVzZXQgSFNFT04sIENTU09OIGFuZCBQTExPTiBiaXRzICovDQorICBSQ0MtPkNSICY9ICh1aW50MzJfdCkweEZFRjZGRkZGOw0KKw0KKyAgLyogUmVzZXQgUExMQ0ZHUiByZWdpc3RlciAqLw0KKyAgUkNDLT5QTExDRkdSID0gMHgyNDAwMzAxMDsNCisNCisgIC8qIFJlc2V0IEhTRUJZUCBiaXQgKi8NCisgIFJDQy0+Q1IgJj0gKHVpbnQzMl90KTB4RkZGQkZGRkY7DQorDQorICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQorICBSQ0MtPkNJUiA9IDB4MDAwMDAwMDA7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIEV4dGVybmFsIEhpZ2ggU3BlZWQgb3NjaWxsYXRvciAoSFNFKS4NCisgICogQG5vdGUgICBBZnRlciBlbmFibGluZyB0aGUgSFNFIChSQ0NfSFNFX09OIG9yIFJDQ19IU0VfQnlwYXNzKSwgdGhlIGFwcGxpY2F0aW9uDQorICAqICAgICAgICAgc29mdHdhcmUgc2hvdWxkIHdhaXQgb24gSFNFUkRZIGZsYWcgdG8gYmUgc2V0IGluZGljYXRpbmcgdGhhdCBIU0UgY2xvY2sNCisgICogICAgICAgICBpcyBzdGFibGUgYW5kIGNhbiBiZSB1c2VkIHRvIGNsb2NrIHRoZSBQTEwgYW5kL29yIHN5c3RlbSBjbG9jay4NCisgICogQG5vdGUgICBIU0Ugc3RhdGUgY2FuIG5vdCBiZSBjaGFuZ2VkIGlmIGl0IGlzIHVzZWQgZGlyZWN0bHkgb3IgdGhyb3VnaCB0aGUNCisgICogICAgICAgICBQTEwgYXMgc3lzdGVtIGNsb2NrLiBJbiB0aGlzIGNhc2UsIHlvdSBoYXZlIHRvIHNlbGVjdCBhbm90aGVyIHNvdXJjZQ0KKyAgKiAgICAgICAgIG9mIHRoZSBzeXN0ZW0gY2xvY2sgdGhlbiBjaGFuZ2UgdGhlIEhTRSBzdGF0ZSAoZXguIGRpc2FibGUgaXQpLg0KKyAgKiBAbm90ZSAgIFRoZSBIU0UgaXMgc3RvcHBlZCBieSBoYXJkd2FyZSB3aGVuIGVudGVyaW5nIFNUT1AgYW5kIFNUQU5EQlkgbW9kZXMuICANCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHJlc2V0IHRoZSBDU1NPTiBiaXQsIHNvIGlmIHRoZSBDbG9jayBzZWN1cml0eSBzeXN0ZW0oQ1NTKQ0KKyAgKiAgICAgICAgIHdhcyBwcmV2aW91c2x5IGVuYWJsZWQgeW91IGhhdmUgdG8gZW5hYmxlIGl0IGFnYWluIGFmdGVyIGNhbGxpbmcgdGhpcw0KKyAgKiAgICAgICAgIGZ1bmN0aW9uLiAgICANCisgICogQHBhcmFtICBSQ0NfSFNFOiBzcGVjaWZpZXMgdGhlIG5ldyBzdGF0ZSBvZiB0aGUgSFNFLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0hTRV9PRkY6IHR1cm4gT0ZGIHRoZSBIU0Ugb3NjaWxsYXRvciwgSFNFUkRZIGZsYWcgZ29lcyBsb3cgYWZ0ZXINCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IEhTRSBvc2NpbGxhdG9yIGNsb2NrIGN5Y2xlcy4NCisgICogICAgICAgICAgICBAYXJnIFJDQ19IU0VfT046IHR1cm4gT04gdGhlIEhTRSBvc2NpbGxhdG9yDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSFNFX0J5cGFzczogSFNFIG9zY2lsbGF0b3IgYnlwYXNzZWQgd2l0aCBleHRlcm5hbCBjbG9jaw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfSFNFQ29uZmlnKHVpbnQ4X3QgUkNDX0hTRSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19IU0UoUkNDX0hTRSkpOw0KKw0KKyAgLyogUmVzZXQgSFNFT04gYW5kIEhTRUJZUCBiaXRzIGJlZm9yZSBjb25maWd1cmluZyB0aGUgSFNFIC0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAqKF9fSU8gdWludDhfdCAqKSBDUl9CWVRFM19BRERSRVNTID0gUkNDX0hTRV9PRkY7DQorDQorICAvKiBTZXQgdGhlIG5ldyBIU0UgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgICooX19JTyB1aW50OF90ICopIENSX0JZVEUzX0FERFJFU1MgPSBSQ0NfSFNFOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBXYWl0cyBmb3IgSFNFIHN0YXJ0LXVwLg0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb25zIHdhaXRzIG9uIEhTRVJEWSBmbGFnIHRvIGJlIHNldCBhbmQgcmV0dXJuIFNVQ0NFU1MgaWYgDQorICAqICAgICAgICAgdGhpcyBmbGFnIGlzIHNldCwgb3RoZXJ3aXNlIHJldHVybnMgRVJST1IgaWYgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZCANCisgICogICAgICAgICBhbmQgdGhpcyBmbGFnIGlzIG5vdCBzZXQuIFRoZSB0aW1lb3V0IHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIGNvbnN0YW50DQorICAqICAgICAgICAgSFNFX1NUQVJUVVBfVElNRU9VVCBpbiBzdG0zMmYyeHguaCBmaWxlLiBZb3UgY2FuIHRhaWxvciBpdCBkZXBlbmRpbmcNCisgICogICAgICAgICBvbiB0aGUgSFNFIGNyeXN0YWwgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLiANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogSFNFIG9zY2lsbGF0b3IgaXMgc3RhYmxlIGFuZCByZWFkeSB0byB1c2UNCisgICogICAgICAgICAgLSBFUlJPUjogSFNFIG9zY2lsbGF0b3Igbm90IHlldCByZWFkeQ0KKyAgKi8NCitFcnJvclN0YXR1cyBSQ0NfV2FpdEZvckhTRVN0YXJ0VXAodm9pZCkNCit7DQorICBfX0lPIHVpbnQzMl90IHN0YXJ0dXBjb3VudGVyID0gMDsNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IEVSUk9SOw0KKyAgRmxhZ1N0YXR1cyBoc2VzdGF0dXMgPSBSRVNFVDsNCisgIC8qIFdhaXQgdGlsbCBIU0UgaXMgcmVhZHkgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLw0KKyAgZG8NCisgIHsNCisgICAgaHNlc3RhdHVzID0gUkNDX0dldEZsYWdTdGF0dXMoUkNDX0ZMQUdfSFNFUkRZKTsNCisgICAgc3RhcnR1cGNvdW50ZXIrKzsNCisgIH0gd2hpbGUoKHN0YXJ0dXBjb3VudGVyICE9IEhTRV9TVEFSVFVQX1RJTUVPVVQpICYmIChoc2VzdGF0dXMgPT0gUkVTRVQpKTsNCisNCisgIGlmIChSQ0NfR2V0RmxhZ1N0YXR1cyhSQ0NfRkxBR19IU0VSRFkpICE9IFJFU0VUKQ0KKyAgew0KKyAgICBzdGF0dXMgPSBTVUNDRVNTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0NCisgIHJldHVybiAoc3RhdHVzKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQWRqdXN0cyB0aGUgSW50ZXJuYWwgSGlnaCBTcGVlZCBvc2NpbGxhdG9yIChIU0kpIGNhbGlicmF0aW9uIHZhbHVlLg0KKyAgKiBAbm90ZSAgIFRoZSBjYWxpYnJhdGlvbiBpcyB1c2VkIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSB2YXJpYXRpb25zIGluIHZvbHRhZ2UNCisgICogICAgICAgICBhbmQgdGVtcGVyYXR1cmUgdGhhdCBpbmZsdWVuY2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgaW50ZXJuYWwgSFNJIFJDLg0KKyAgKiBAcGFyYW0gIEhTSUNhbGlicmF0aW9uVmFsdWU6IHNwZWNpZmllcyB0aGUgY2FsaWJyYXRpb24gdHJpbW1pbmcgdmFsdWUuDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDB4MUYuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BZGp1c3RIU0lDYWxpYnJhdGlvblZhbHVlKHVpbnQ4X3QgSFNJQ2FsaWJyYXRpb25WYWx1ZSkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SQ0NfQ0FMSUJSQVRJT05fVkFMVUUoSFNJQ2FsaWJyYXRpb25WYWx1ZSkpOw0KKw0KKyAgdG1wcmVnID0gUkNDLT5DUjsNCisNCisgIC8qIENsZWFyIEhTSVRSSU1bNDowXSBiaXRzICovDQorICB0bXByZWcgJj0gflJDQ19DUl9IU0lUUklNOw0KKw0KKyAgLyogU2V0IHRoZSBIU0lUUklNWzQ6MF0gYml0cyBhY2NvcmRpbmcgdG8gSFNJQ2FsaWJyYXRpb25WYWx1ZSB2YWx1ZSAqLw0KKyAgdG1wcmVnIHw9ICh1aW50MzJfdClIU0lDYWxpYnJhdGlvblZhbHVlIDw8IDM7DQorDQorICAvKiBTdG9yZSB0aGUgbmV3IHZhbHVlICovDQorICBSQ0MtPkNSID0gdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBJbnRlcm5hbCBIaWdoIFNwZWVkIG9zY2lsbGF0b3IgKEhTSSkuDQorICAqIEBub3RlICAgVGhlIEhTSSBpcyBzdG9wcGVkIGJ5IGhhcmR3YXJlIHdoZW4gZW50ZXJpbmcgU1RPUCBhbmQgU1RBTkRCWSBtb2Rlcy4NCisgICogICAgICAgICBJdCBpcyB1c2VkIChlbmFibGVkIGJ5IGhhcmR3YXJlKSBhcyBzeXN0ZW0gY2xvY2sgc291cmNlIGFmdGVyIHN0YXJ0dXANCisgICogICAgICAgICBmcm9tIFJlc2V0LCB3YWtldXAgZnJvbSBTVE9QIGFuZCBTVEFOREJZIG1vZGUsIG9yIGluIGNhc2Ugb2YgZmFpbHVyZQ0KKyAgKiAgICAgICAgIG9mIHRoZSBIU0UgdXNlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGFzIHN5c3RlbSBjbG9jayAoaWYgdGhlIENsb2NrDQorICAqICAgICAgICAgU2VjdXJpdHkgU3lzdGVtIENTUyBpcyBlbmFibGVkKS4gICAgICAgICAgICAgDQorICAqIEBub3RlICAgSFNJIGNhbiBub3QgYmUgc3RvcHBlZCBpZiBpdCBpcyB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UuIEluIHRoaXMgY2FzZSwNCisgICogICAgICAgICB5b3UgaGF2ZSB0byBzZWxlY3QgYW5vdGhlciBzb3VyY2Ugb2YgdGhlIHN5c3RlbSBjbG9jayB0aGVuIHN0b3AgdGhlIEhTSS4gIA0KKyAgKiBAbm90ZSAgIEFmdGVyIGVuYWJsaW5nIHRoZSBIU0ksIHRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBzaG91bGQgd2FpdCBvbiBIU0lSRFkNCisgICogICAgICAgICBmbGFnIHRvIGJlIHNldCBpbmRpY2F0aW5nIHRoYXQgSFNJIGNsb2NrIGlzIHN0YWJsZSBhbmQgY2FuIGJlIHVzZWQgYXMNCisgICogICAgICAgICBzeXN0ZW0gY2xvY2sgc291cmNlLiAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSFNJLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAbm90ZSAgIFdoZW4gdGhlIEhTSSBpcyBzdG9wcGVkLCBIU0lSRFkgZmxhZyBnb2VzIGxvdyBhZnRlciA2IEhTSSBvc2NpbGxhdG9yDQorICAqICAgICAgICAgY2xvY2sgY3ljbGVzLiAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19IU0lDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgKihfX0lPIHVpbnQzMl90ICopIENSX0hTSU9OX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBFeHRlcm5hbCBMb3cgU3BlZWQgb3NjaWxsYXRvciAoTFNFKS4NCisgICogQG5vdGUgICBBcyB0aGUgTFNFIGlzIGluIHRoZSBCYWNrdXAgZG9tYWluIGFuZCB3cml0ZSBhY2Nlc3MgaXMgZGVuaWVkIHRvDQorICAqICAgICAgICAgdGhpcyBkb21haW4gYWZ0ZXIgcmVzZXQsIHlvdSBoYXZlIHRvIGVuYWJsZSB3cml0ZSBhY2Nlc3MgdXNpbmcgDQorICAqICAgICAgICAgUFdSX0JhY2t1cEFjY2Vzc0NtZChFTkFCTEUpIGZ1bmN0aW9uIGJlZm9yZSB0byBjb25maWd1cmUgdGhlIExTRQ0KKyAgKiAgICAgICAgICh0byBiZSBkb25lIG9uY2UgYWZ0ZXIgcmVzZXQpLiAgDQorICAqIEBub3RlICAgQWZ0ZXIgZW5hYmxpbmcgdGhlIExTRSAoUkNDX0xTRV9PTiBvciBSQ0NfTFNFX0J5cGFzcyksIHRoZSBhcHBsaWNhdGlvbg0KKyAgKiAgICAgICAgIHNvZnR3YXJlIHNob3VsZCB3YWl0IG9uIExTRVJEWSBmbGFnIHRvIGJlIHNldCBpbmRpY2F0aW5nIHRoYXQgTFNFIGNsb2NrDQorICAqICAgICAgICAgaXMgc3RhYmxlIGFuZCBjYW4gYmUgdXNlZCB0byBjbG9jayB0aGUgUlRDLg0KKyAgKiBAcGFyYW0gIFJDQ19MU0U6IHNwZWNpZmllcyB0aGUgbmV3IHN0YXRlIG9mIHRoZSBMU0UuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfTFNFX09GRjogdHVybiBPRkYgdGhlIExTRSBvc2NpbGxhdG9yLCBMU0VSRFkgZmxhZyBnb2VzIGxvdyBhZnRlcg0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgTFNFIG9zY2lsbGF0b3IgY2xvY2sgY3ljbGVzLg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0xTRV9PTjogdHVybiBPTiB0aGUgTFNFIG9zY2lsbGF0b3INCisgICogICAgICAgICAgICBAYXJnIFJDQ19MU0VfQnlwYXNzOiBMU0Ugb3NjaWxsYXRvciBieXBhc3NlZCB3aXRoIGV4dGVybmFsIGNsb2NrDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19MU0VDb25maWcodWludDhfdCBSQ0NfTFNFKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0xTRShSQ0NfTFNFKSk7DQorDQorICAvKiBSZXNldCBMU0VPTiBhbmQgTFNFQllQIGJpdHMgYmVmb3JlIGNvbmZpZ3VyaW5nIHRoZSBMU0UgLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIC8qIFJlc2V0IExTRU9OIGJpdCAqLw0KKyAgKihfX0lPIHVpbnQ4X3QgKikgQkRDUl9BRERSRVNTID0gUkNDX0xTRV9PRkY7DQorDQorICAvKiBSZXNldCBMU0VCWVAgYml0ICovDQorICAqKF9fSU8gdWludDhfdCAqKSBCRENSX0FERFJFU1MgPSBSQ0NfTFNFX09GRjsNCisNCisgIC8qIENvbmZpZ3VyZSBMU0UgKFJDQ19MU0VfT0ZGIGlzIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY29kZSBzZWN0aW9uIGFib3ZlKSAqLw0KKyAgc3dpdGNoIChSQ0NfTFNFKQ0KKyAgew0KKyAgICBjYXNlIFJDQ19MU0VfT046DQorICAgICAgLyogU2V0IExTRU9OIGJpdCAqLw0KKyAgICAgICooX19JTyB1aW50OF90ICopIEJEQ1JfQUREUkVTUyA9IFJDQ19MU0VfT047DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgUkNDX0xTRV9CeXBhc3M6DQorICAgICAgLyogU2V0IExTRUJZUCBhbmQgTFNFT04gYml0cyAqLw0KKyAgICAgICooX19JTyB1aW50OF90ICopIEJEQ1JfQUREUkVTUyA9IFJDQ19MU0VfQnlwYXNzIHwgUkNDX0xTRV9PTjsNCisgICAgICBicmVhazsNCisgICAgZGVmYXVsdDoNCisgICAgICBicmVhazsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgSW50ZXJuYWwgTG93IFNwZWVkIG9zY2lsbGF0b3IgKExTSSkuDQorICAqIEBub3RlICAgQWZ0ZXIgZW5hYmxpbmcgdGhlIExTSSwgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIHNob3VsZCB3YWl0IG9uIA0KKyAgKiAgICAgICAgIExTSVJEWSBmbGFnIHRvIGJlIHNldCBpbmRpY2F0aW5nIHRoYXQgTFNJIGNsb2NrIGlzIHN0YWJsZSBhbmQgY2FuDQorICAqICAgICAgICAgYmUgdXNlZCB0byBjbG9jayB0aGUgSVdERyBhbmQvb3IgdGhlIFJUQy4NCisgICogQG5vdGUgICBMU0kgY2FuIG5vdCBiZSBkaXNhYmxlZCBpZiB0aGUgSVdERyBpcyBydW5uaW5nLiAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgTFNJLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAbm90ZSAgIFdoZW4gdGhlIExTSSBpcyBzdG9wcGVkLCBMU0lSRFkgZmxhZyBnb2VzIGxvdyBhZnRlciA2IExTSSBvc2NpbGxhdG9yDQorICAqICAgICAgICAgY2xvY2sgY3ljbGVzLiANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0xTSUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAqKF9fSU8gdWludDMyX3QgKikgQ1NSX0xTSU9OX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBtYWluIFBMTCBjbG9jayBzb3VyY2UsIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBmYWN0b3JzLg0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgbWFpbiBQTEwgaXMgZGlzYWJsZWQuDQorICAqICANCisgICogQHBhcmFtICBSQ0NfUExMU291cmNlOiBzcGVjaWZpZXMgdGhlIFBMTCBlbnRyeSBjbG9jayBzb3VyY2UuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfUExMU291cmNlX0hTSTogSFNJIG9zY2lsbGF0b3IgY2xvY2sgc2VsZWN0ZWQgYXMgUExMIGNsb2NrIGVudHJ5DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfUExMU291cmNlX0hTRTogSFNFIG9zY2lsbGF0b3IgY2xvY2sgc2VsZWN0ZWQgYXMgUExMIGNsb2NrIGVudHJ5DQorICAqIEBub3RlICAgVGhpcyBjbG9jayBzb3VyY2UgKFJDQ19QTExTb3VyY2UpIGlzIGNvbW1vbiBmb3IgdGhlIG1haW4gUExMIGFuZCBQTExJMlMuICANCisgICogIA0KKyAgKiBAcGFyYW0gIFBMTE06IHNwZWNpZmllcyB0aGUgZGl2aXNpb24gZmFjdG9yIGZvciBQTEwgVkNPIGlucHV0IGNsb2NrDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA2My4NCisgICogQG5vdGUgICBZb3UgaGF2ZSB0byBzZXQgdGhlIFBMTE0gcGFyYW1ldGVyIGNvcnJlY3RseSB0byBlbnN1cmUgdGhhdCB0aGUgVkNPIGlucHV0DQorICAqICAgICAgICAgZnJlcXVlbmN5IHJhbmdlcyBmcm9tIDEgdG8gMiBNSHouIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNlbGVjdCBhIGZyZXF1ZW5jeQ0KKyAgKiAgICAgICAgIG9mIDIgTUh6IHRvIGxpbWl0IFBMTCBqaXR0ZXIuDQorICAqICANCisgICogQHBhcmFtICBQTExOOiBzcGVjaWZpZXMgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgUExMIFZDTyBvdXRwdXQgY2xvY2sNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDE5MiBhbmQgNDMyLg0KKyAgKiBAbm90ZSAgIFlvdSBoYXZlIHRvIHNldCB0aGUgUExMTiBwYXJhbWV0ZXIgY29ycmVjdGx5IHRvIGVuc3VyZSB0aGF0IHRoZSBWQ08NCisgICogICAgICAgICBvdXRwdXQgZnJlcXVlbmN5IGlzIGJldHdlZW4gMTkyIGFuZCA0MzIgTUh6Lg0KKyAgKiAgIA0KKyAgKiBAcGFyYW0gIFBMTFA6IHNwZWNpZmllcyB0aGUgZGl2aXNpb24gZmFjdG9yIGZvciBtYWluIHN5c3RlbSBjbG9jayAoU1lTQ0xLKQ0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGluIHRoZSByYW5nZSB7MiwgNCwgNiwgb3IgOH0uDQorICAqIEBub3RlICAgWW91IGhhdmUgdG8gc2V0IHRoZSBQTExQIHBhcmFtZXRlciBjb3JyZWN0bHkgdG8gbm90IGV4Y2VlZCAxMjAgTUh6IG9uDQorICAqICAgICAgICAgdGhlIFN5c3RlbSBjbG9jayBmcmVxdWVuY3kuDQorICAqICANCisgICogQHBhcmFtICBQTExROiBzcGVjaWZpZXMgdGhlIGRpdmlzaW9uIGZhY3RvciBmb3IgT1RHIEZTLCBTRElPIGFuZCBSTkcgY2xvY2tzDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiA0IGFuZCAxNS4NCisgICogQG5vdGUgICBJZiB0aGUgVVNCIE9URyBGUyBpcyB1c2VkIGluIHlvdXIgYXBwbGljYXRpb24sIHlvdSBoYXZlIHRvIHNldCB0aGUNCisgICogICAgICAgICBQTExRIHBhcmFtZXRlciBjb3JyZWN0bHkgdG8gaGF2ZSA0OCBNSHogY2xvY2sgZm9yIHRoZSBVU0IuIEhvd2V2ZXIsDQorICAqICAgICAgICAgdGhlIFNESU8gYW5kIFJORyBuZWVkIGEgZnJlcXVlbmN5IGxvd2VyIHRoYW4gb3IgZXF1YWwgdG8gNDggTUh6IHRvIHdvcmsNCisgICogICAgICAgICBjb3JyZWN0bHkuDQorICAqICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19QTExDb25maWcodWludDMyX3QgUkNDX1BMTFNvdXJjZSwgdWludDMyX3QgUExMTSwgdWludDMyX3QgUExMTiwgdWludDMyX3QgUExMUCwgdWludDMyX3QgUExMUSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExfU09VUkNFKFJDQ19QTExTb3VyY2UpKTsNCisgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMTV9WQUxVRShQTExNKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BMTE5fVkFMVUUoUExMTikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExQX1ZBTFVFKFBMTFApKTsNCisgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMUV9WQUxVRShQTExRKSk7DQorDQorICBSQ0MtPlBMTENGR1IgPSBQTExNIHwgKFBMTE4gPDwgNikgfCAoKChQTExQID4+IDEpIC0xKSA8PCAxNikgfCAoUkNDX1BMTFNvdXJjZSkgfA0KKyAgICAgICAgICAgICAgICAgKFBMTFEgPDwgMjQpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBtYWluIFBMTC4NCisgICogQG5vdGUgICBBZnRlciBlbmFibGluZyB0aGUgbWFpbiBQTEwsIHRoZSBhcHBsaWNhdGlvbiBzb2Z0d2FyZSBzaG91bGQgd2FpdCBvbiANCisgICogICAgICAgICBQTExSRFkgZmxhZyB0byBiZSBzZXQgaW5kaWNhdGluZyB0aGF0IFBMTCBjbG9jayBpcyBzdGFibGUgYW5kIGNhbg0KKyAgKiAgICAgICAgIGJlIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZS4NCisgICogQG5vdGUgICBUaGUgbWFpbiBQTEwgY2FuIG5vdCBiZSBkaXNhYmxlZCBpZiBpdCBpcyB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UNCisgICogQG5vdGUgICBUaGUgbWFpbiBQTEwgaXMgZGlzYWJsZWQgYnkgaGFyZHdhcmUgd2hlbiBlbnRlcmluZyBTVE9QIGFuZCBTVEFOREJZIG1vZGVzLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIG1haW4gUExMLiBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfUExMQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgICooX19JTyB1aW50MzJfdCAqKSBDUl9QTExPTl9CQiA9ICh1aW50MzJfdClOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgUExMSTJTIGNsb2NrIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBmYWN0b3JzLg0KKyAgKiAgIA0KKyAgKiBAbm90ZSAgIFBMTEkyUyBpcyBhdmFpbGFibGUgb25seSBpbiBTaWxpY29uIFJldmlzaW9uQiBhbmQgUmV2aXNpb25ZLiAgICANCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgdXNlZCBvbmx5IHdoZW4gdGhlIFBMTEkyUyBpcyBkaXNhYmxlZC4NCisgICogQG5vdGUgICBQTExJMlMgY2xvY2sgc291cmNlIGlzIGNvbW1vbiB3aXRoIHRoZSBtYWluIFBMTCAoY29uZmlndXJlZCBpbiANCisgICogICAgICAgICBSQ0NfUExMQ29uZmlnIGZ1bmN0aW9uICkgIA0KKyAgKiAgICAgICAgICAgICANCisgICogQHBhcmFtICBQTExJMlNOOiBzcGVjaWZpZXMgdGhlIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgUExMSTJTIFZDTyBvdXRwdXQgY2xvY2sNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDE5MiBhbmQgNDMyLg0KKyAgKiBAbm90ZSAgIFlvdSBoYXZlIHRvIHNldCB0aGUgUExMSTJTTiBwYXJhbWV0ZXIgY29ycmVjdGx5IHRvIGVuc3VyZSB0aGF0IHRoZSBWQ08gDQorICAqICAgICAgICAgb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDE5MiBhbmQgNDMyIE1Iei4NCisgICogICAgDQorICAqIEBwYXJhbSAgUExMSTJTUjogc3BlY2lmaWVzIHRoZSBkaXZpc2lvbiBmYWN0b3IgZm9yIEkyUyBjbG9jaw0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMiBhbmQgNy4NCisgICogQG5vdGUgICBZb3UgaGF2ZSB0byBzZXQgdGhlIFBMTEkyU1IgcGFyYW1ldGVyIGNvcnJlY3RseSB0byBub3QgZXhjZWVkIDE5MiBNSHoNCisgICogICAgICAgICBvbiB0aGUgSTJTIGNsb2NrIGZyZXF1ZW5jeS4NCisgICogICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX1BMTEkyU0NvbmZpZyh1aW50MzJfdCBQTExJMlNOLCB1aW50MzJfdCBQTExJMlNSKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BMTEkyU05fVkFMVUUoUExMSTJTTikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExJMlNSX1ZBTFVFKFBMTEkyU1IpKTsNCisNCisgIFJDQy0+UExMSTJTQ0ZHUiA9IChQTExJMlNOIDw8IDYpIHwgKFBMTEkyU1IgPDwgMjgpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBQTExJMlMuDQorICAqIEBub3RlICAgUExMSTJTIGlzIGF2YWlsYWJsZSBvbmx5IGluIFJldmlzaW9uQiBhbmQgUmV2aXNpb25ZIA0KKyAgKiBAbm90ZSAgIFRoZSBQTExJMlMgaXMgZGlzYWJsZWQgYnkgaGFyZHdhcmUgd2hlbiBlbnRlcmluZyBTVE9QIGFuZCBTVEFOREJZIG1vZGVzLiAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgUExMSTJTLiBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfUExMSTJTQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgICooX19JTyB1aW50MzJfdCAqKSBDUl9QTExJMlNPTl9CQiA9ICh1aW50MzJfdClOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgQ2xvY2sgU2VjdXJpdHkgU3lzdGVtLg0KKyAgKiBAbm90ZSAgIElmIGEgZmFpbHVyZSBpcyBkZXRlY3RlZCBvbiB0aGUgSFNFIG9zY2lsbGF0b3IgY2xvY2ssIHRoaXMgb3NjaWxsYXRvcg0KKyAgKiAgICAgICAgIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYW5kIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgdG8gaW5mb3JtIHRoZQ0KKyAgKiAgICAgICAgIHNvZnR3YXJlIGFib3V0IHRoZSBmYWlsdXJlIChDbG9jayBTZWN1cml0eSBTeXN0ZW0gSW50ZXJydXB0LCBDU1NJKSwNCisgICogICAgICAgICBhbGxvd2luZyB0aGUgTUNVIHRvIHBlcmZvcm0gcmVzY3VlIG9wZXJhdGlvbnMuIFRoZSBDU1NJIGlzIGxpbmtlZCB0byANCisgICogICAgICAgICB0aGUgQ29ydGV4LU0zIE5NSSAoTm9uLU1hc2thYmxlIEludGVycnVwdCkgZXhjZXB0aW9uIHZlY3Rvci4gIA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIENsb2NrIFNlY3VyaXR5IFN5c3RlbS4NCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfQ2xvY2tTZWN1cml0eVN5c3RlbUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICAqKF9fSU8gdWludDMyX3QgKikgQ1JfQ1NTT05fQkIgPSAodWludDMyX3QpTmV3U3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbGVjdHMgdGhlIGNsb2NrIHNvdXJjZSB0byBvdXRwdXQgb24gTUNPMSBwaW4oUEE4KS4NCisgICogQG5vdGUgICBQQTggc2hvdWxkIGJlIGNvbmZpZ3VyZWQgaW4gYWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUuDQorICAqIEBwYXJhbSAgUkNDX01DTzFTb3VyY2U6IHNwZWNpZmllcyB0aGUgY2xvY2sgc291cmNlIHRvIG91dHB1dC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19NQ08xU291cmNlX0hTSTogSFNJIGNsb2NrIHNlbGVjdGVkIGFzIE1DTzEgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfTUNPMVNvdXJjZV9MU0U6IExTRSBjbG9jayBzZWxlY3RlZCBhcyBNQ08xIHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzFTb3VyY2VfSFNFOiBIU0UgY2xvY2sgc2VsZWN0ZWQgYXMgTUNPMSBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFJDQ19NQ08xU291cmNlX1BMTENMSzogbWFpbiBQTEwgY2xvY2sgc2VsZWN0ZWQgYXMgTUNPMSBzb3VyY2UNCisgICogQHBhcmFtICBSQ0NfTUNPMURpdjogc3BlY2lmaWVzIHRoZSBNQ08xIHByZXNjYWxlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19NQ08xRGl2XzE6IG5vIGRpdmlzaW9uIGFwcGxpZWQgdG8gTUNPMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzFEaXZfMjogZGl2aXNpb24gYnkgMiBhcHBsaWVkIHRvIE1DTzEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19NQ08xRGl2XzM6IGRpdmlzaW9uIGJ5IDMgYXBwbGllZCB0byBNQ08xIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfTUNPMURpdl80OiBkaXZpc2lvbiBieSA0IGFwcGxpZWQgdG8gTUNPMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzFEaXZfNTogZGl2aXNpb24gYnkgNSBhcHBsaWVkIHRvIE1DTzEgY2xvY2sNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX01DTzFDb25maWcodWludDMyX3QgUkNDX01DTzFTb3VyY2UsIHVpbnQzMl90IFJDQ19NQ08xRGl2KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX01DTzFTT1VSQ0UoUkNDX01DTzFTb3VyY2UpKTsNCisgIGFzc2VydF9wYXJhbShJU19SQ0NfTUNPMURJVihSQ0NfTUNPMURpdikpOyAgDQorDQorICB0bXByZWcgPSBSQ0MtPkNGR1I7DQorDQorICAvKiBDbGVhciBNQ08xWzE6MF0gYW5kIE1DTzFQUkVbMjowXSBiaXRzICovDQorICB0bXByZWcgJj0gQ0ZHUl9NQ08xX1JFU0VUX01BU0s7DQorDQorICAvKiBTZWxlY3QgTUNPMSBjbG9jayBzb3VyY2UgYW5kIHByZXNjYWxlciAqLw0KKyAgdG1wcmVnIHw9IFJDQ19NQ08xU291cmNlIHwgUkNDX01DTzFEaXY7DQorDQorICAvKiBTdG9yZSB0aGUgbmV3IHZhbHVlICovDQorICBSQ0MtPkNGR1IgPSB0bXByZWc7ICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgY2xvY2sgc291cmNlIHRvIG91dHB1dCBvbiBNQ08yIHBpbihQQzkpLg0KKyAgKiBAbm90ZSAgIFBDOSBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZS4NCisgICogQHBhcmFtICBSQ0NfTUNPMlNvdXJjZTogc3BlY2lmaWVzIHRoZSBjbG9jayBzb3VyY2UgdG8gb3V0cHV0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzJTb3VyY2VfU1lTQ0xLOiBTeXN0ZW0gY2xvY2sgKFNZU0NMSykgc2VsZWN0ZWQgYXMgTUNPMiBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFJDQ19NQ08yU291cmNlX1BMTEkyU0NMSzogUExMSTJTIGNsb2NrIHNlbGVjdGVkIGFzIE1DTzIgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfTUNPMlNvdXJjZV9IU0U6IEhTRSBjbG9jayBzZWxlY3RlZCBhcyBNQ08yIHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzJTb3VyY2VfUExMQ0xLOiBtYWluIFBMTCBjbG9jayBzZWxlY3RlZCBhcyBNQ08yIHNvdXJjZQ0KKyAgKiBAcGFyYW0gIFJDQ19NQ08yRGl2OiBzcGVjaWZpZXMgdGhlIE1DTzIgcHJlc2NhbGVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzJEaXZfMTogbm8gZGl2aXNpb24gYXBwbGllZCB0byBNQ08yIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfTUNPMkRpdl8yOiBkaXZpc2lvbiBieSAyIGFwcGxpZWQgdG8gTUNPMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX01DTzJEaXZfMzogZGl2aXNpb24gYnkgMyBhcHBsaWVkIHRvIE1DTzIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19NQ08yRGl2XzQ6IGRpdmlzaW9uIGJ5IDQgYXBwbGllZCB0byBNQ08yIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfTUNPMkRpdl81OiBkaXZpc2lvbiBieSA1IGFwcGxpZWQgdG8gTUNPMiBjbG9jaw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfTUNPMkNvbmZpZyh1aW50MzJfdCBSQ0NfTUNPMlNvdXJjZSwgdWludDMyX3QgUkNDX01DTzJEaXYpDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SQ0NfTUNPMlNPVVJDRShSQ0NfTUNPMlNvdXJjZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19NQ08yRElWKFJDQ19NQ08yRGl2KSk7DQorICANCisgIHRtcHJlZyA9IFJDQy0+Q0ZHUjsNCisgIA0KKyAgLyogQ2xlYXIgTUNPMiBhbmQgTUNPMlBSRVsyOjBdIGJpdHMgKi8NCisgIHRtcHJlZyAmPSBDRkdSX01DTzJfUkVTRVRfTUFTSzsNCisNCisgIC8qIFNlbGVjdCBNQ08yIGNsb2NrIHNvdXJjZSBhbmQgcHJlc2NhbGVyICovDQorICB0bXByZWcgfD0gUkNDX01DTzJTb3VyY2UgfCBSQ0NfTUNPMkRpdjsNCisNCisgIC8qIFN0b3JlIHRoZSBuZXcgdmFsdWUgKi8NCisgIFJDQy0+Q0ZHUiA9IHRtcHJlZzsgIA0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSQ0NfR3JvdXAyIFN5c3RlbSBBSEIgYW5kIEFQQiBidXNzZXMgY2xvY2tzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIFN5c3RlbSwgQUhCIGFuZCBBUEIgYnVzc2VzIGNsb2NrcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgU3lzdGVtLCBBSEIgYW5kIEFQQiBidXNzZXMgY2xvY2tzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGUgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSB0aGUgU3lzdGVtLCBBSEIsIEFQQjEgYW5kIA0KKyAgQVBCMiBidXNzZXMgY2xvY2tzLg0KKyAgDQorICAxLiBTZXZlcmFsIGNsb2NrIHNvdXJjZXMgY2FuIGJlIHVzZWQgdG8gZHJpdmUgdGhlIFN5c3RlbSBjbG9jayAoU1lTQ0xLKTogSFNJLA0KKyAgICAgSFNFIGFuZCBQTEwuDQorICAgICBUaGUgQUhCIGNsb2NrIChIQ0xLKSBpcyBkZXJpdmVkIGZyb20gU3lzdGVtIGNsb2NrIHRocm91Z2ggY29uZmlndXJhYmxlIHByZXNjYWxlcg0KKyAgICAgYW5kIHVzZWQgdG8gY2xvY2sgdGhlIENQVSwgbWVtb3J5IGFuZCBwZXJpcGhlcmFscyBtYXBwZWQgb24gQUhCIGJ1cyAoRE1BLCBHUElPLi4uKS4NCisgICAgIEFQQjEgKFBDTEsxKSBhbmQgQVBCMiAoUENMSzIpIGNsb2NrcyBhcmUgZGVyaXZlZCBmcm9tIEFIQiBjbG9jayB0aHJvdWdoIA0KKyAgICAgY29uZmlndXJhYmxlIHByZXNjYWxlcnMgYW5kIHVzZWQgdG8gY2xvY2sgdGhlIHBlcmlwaGVyYWxzIG1hcHBlZCBvbiB0aGVzZSBidXNzZXMuDQorICAgICBZb3UgY2FuIHVzZSAiUkNDX0dldENsb2Nrc0ZyZXEoKSIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGZyZXF1ZW5jaWVzIG9mIHRoZXNlIGNsb2Nrcy4gIA0KKw0KK0Bub3RlIEFsbCB0aGUgcGVyaXBoZXJhbCBjbG9ja3MgYXJlIGRlcml2ZWQgZnJvbSB0aGUgU3lzdGVtIGNsb2NrIChTWVNDTEspIGV4Y2VwdDoNCisgICAgICAgLSBJMlM6IHRoZSBJMlMgY2xvY2sgY2FuIGJlIGRlcml2ZWQgZWl0aGVyIGZyb20gYSBzcGVjaWZpYyBQTEwgKFBMTEkyUykgb3INCisgICAgICAgICAgZnJvbSBhbiBleHRlcm5hbCBjbG9jayBtYXBwZWQgb24gdGhlIEkyU19DS0lOIHBpbi4gDQorICAgICAgICAgIFlvdSBoYXZlIHRvIHVzZSBSQ0NfSTJTQ0xLQ29uZmlnKCkgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoaXMgY2xvY2suIA0KKyAgICAgICAtIFJUQzogdGhlIFJUQyBjbG9jayBjYW4gYmUgZGVyaXZlZCBlaXRoZXIgZnJvbSB0aGUgTFNJLCBMU0Ugb3IgSFNFIGNsb2NrDQorICAgICAgICAgIGRpdmlkZWQgYnkgMiB0byAzMS4gWW91IGhhdmUgdG8gdXNlIFJDQ19SVENDTEtDb25maWcoKSBhbmQgUkNDX1JUQ0NMS0NtZCgpDQorICAgICAgICAgIGZ1bmN0aW9ucyB0byBjb25maWd1cmUgdGhpcyBjbG9jay4gDQorICAgICAgIC0gVVNCIE9URyBGUywgU0RJTyBhbmQgUlRDOiBVU0IgT1RHIEZTIHJlcXVpcmUgYSBmcmVxdWVuY3kgZXF1YWwgdG8gNDggTUh6DQorICAgICAgICAgIHRvIHdvcmsgY29ycmVjdGx5LCB3aGlsZSB0aGUgU0RJTyByZXF1aXJlIGEgZnJlcXVlbmN5IGVxdWFsIG9yIGxvd2VyIHRoYW4NCisgICAgICAgICAgdG8gNDguIFRoaXMgY2xvY2sgaXMgZGVyaXZlZCBvZiB0aGUgbWFpbiBQTEwgdGhyb3VnaCBQTExRIGRpdmlkZXIuDQorICAgICAgIC0gSVdERyBjbG9jayB3aGljaCBpcyBhbHdheXMgdGhlIExTSSBjbG9jay4NCisgICAgICAgDQorICAyLiBUaGUgbWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFNZU0NMSyBhbmQgSENMSyBpcyAxMjAgTUh6LCBQQ0xLMiA2MCBNSHogYW5kIFBDTEsxIDMwIE1Iei4NCisgICAgIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UsIHRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBzaG91bGQgYmUgDQorICAgICBhZGFwdGVkIGFjY29yZGluZ2x5Og0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgIA0KKyB8IExhdGVuY3kgICAgICAgfCAgICAgICAgICAgICAgICBIQ0xLIGNsb2NrIGZyZXF1ZW5jeSAoTUh6KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCisgfCAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICANCisgfCAgICAgICAgICAgICAgIHwgdm9sdGFnZSByYW5nZSAgfCB2b2x0YWdlIHJhbmdlICB8IHZvbHRhZ2UgcmFuZ2UgICB8IHZvbHRhZ2UgcmFuZ2UgICB8DQorIHwgICAgICAgICAgICAgICB8IDIuNyBWIC0gMy42IFYgIHwgMi40IFYgLSAyLjcgViAgfCAyLjEgViAtIDIuNCBWICAgfCAxLjggViAtIDIuMSBWICAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgIA0KKyB8MFdTKDFDUFUgY3ljbGUpfDAgPCBIQ0xLIDw9IDMwICB8MCA8IEhDTEsgPD0gMjQgIHwwIDwgSENMSyA8PSAxOCAgIHwwIDwgSENMSyA8PSAxNiAgIHwNCisgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18ICAgDQorIHwxV1MoMkNQVSBjeWNsZSl8MzAgPCBIQ0xLIDw9IDYwIHwyNCA8IEhDTEsgPD0gNDggfDE4IDwgSENMSyA8PSAzNiAgfDE2IDwgSENMSyA8PSAzMiAgfCANCisgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18ICAgDQorIHwyV1MoM0NQVSBjeWNsZSl8NjAgPCBIQ0xLIDw9IDkwIHw0OCA8IEhDTEsgPD0gNzIgfDM2IDwgSENMSyA8PSA1NCAgfDMyIDwgSENMSyA8PSA0OCAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgDQorIHwzV1MoNENQVSBjeWNsZSl8OTAgPCBIQ0xLIDw9IDEyMHw3MiA8IEhDTEsgPD0gOTYgfDU0IDwgSENMSyA8PSA3MiAgfDQ4IDwgSENMSyA8PSA2NCAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgDQorIHw0V1MoNUNQVSBjeWNsZSl8ICAgICAgTkEgICAgICAgIHw5NiA8IEhDTEsgPD0gMTIwfDcyIDwgSENMSyA8PSA5MCAgfDY0IDwgSENMSyA8PSA4MCAgfA0KKyB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwgDQorIHw1V1MoNkNQVSBjeWNsZSl8ICAgICAgTkEgICAgICAgIHwgICAgICBOQSAgICAgICAgfDkwIDwgSENMSyA8PSAxMDggfDgwIDwgSENMSyA8PSA5NiAgfCANCisgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18IA0KKyB8NldTKDdDUFUgY3ljbGUpfCAgICAgIE5BICAgICAgICB8ICAgICAgTkEgICAgICAgIHwxMDggPCBIQ0xLIDw9IDEyMHw5NiA8IEhDTEsgPD0gMTEyIHwgDQorIHwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfCANCisgfDdXUyg4Q1BVIGN5Y2xlKXwgICAgICBOQSAgICAgICAgfCAgICAgTkEgICAgICAgICB8ICAgICBOQSAgICAgICAgICB8MTEyIDwgSENMSyA8PSAxMjB8IA0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgDQorDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIHN5c3RlbSBjbG9jayAoU1lTQ0xLKS4NCisgICogQG5vdGUgICBUaGUgSFNJIGlzIHVzZWQgKGVuYWJsZWQgYnkgaGFyZHdhcmUpIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UgYWZ0ZXINCisgICogICAgICAgICBzdGFydHVwIGZyb20gUmVzZXQsIHdha2UtdXAgZnJvbSBTVE9QIGFuZCBTVEFOREJZIG1vZGUsIG9yIGluIGNhc2UNCisgICogICAgICAgICBvZiBmYWlsdXJlIG9mIHRoZSBIU0UgdXNlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGFzIHN5c3RlbSBjbG9jaw0KKyAgKiAgICAgICAgIChpZiB0aGUgQ2xvY2sgU2VjdXJpdHkgU3lzdGVtIENTUyBpcyBlbmFibGVkKS4NCisgICogQG5vdGUgICBBIHN3aXRjaCBmcm9tIG9uZSBjbG9jayBzb3VyY2UgdG8gYW5vdGhlciBvY2N1cnMgb25seSBpZiB0aGUgdGFyZ2V0DQorICAqICAgICAgICAgY2xvY2sgc291cmNlIGlzIHJlYWR5IChjbG9jayBzdGFibGUgYWZ0ZXIgc3RhcnR1cCBkZWxheSBvciBQTEwgbG9ja2VkKS4gDQorICAqICAgICAgICAgSWYgYSBjbG9jayBzb3VyY2Ugd2hpY2ggaXMgbm90IHlldCByZWFkeSBpcyBzZWxlY3RlZCwgdGhlIHN3aXRjaCB3aWxsDQorICAqICAgICAgICAgb2NjdXIgd2hlbiB0aGUgY2xvY2sgc291cmNlIHdpbGwgYmUgcmVhZHkuIA0KKyAgKiAgICAgICAgIFlvdSBjYW4gdXNlIFJDQ19HZXRTWVNDTEtTb3VyY2UoKSBmdW5jdGlvbiB0byBrbm93IHdoaWNoIGNsb2NrIGlzDQorICAqICAgICAgICAgY3VycmVudGx5IHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZS4gDQorICAqIEBwYXJhbSAgUkNDX1NZU0NMS1NvdXJjZTogc3BlY2lmaWVzIHRoZSBjbG9jayBzb3VyY2UgdXNlZCBhcyBzeXN0ZW0gY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfU1lTQ0xLU291cmNlX0hTSTogICAgSFNJIHNlbGVjdGVkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFJDQ19TWVNDTEtTb3VyY2VfSFNFOiAgICBIU0Ugc2VsZWN0ZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1NZU0NMS1NvdXJjZV9QTExDTEs6IFBMTCBzZWxlY3RlZCBhcyBzeXN0ZW0gY2xvY2sgc291cmNlDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19TWVNDTEtDb25maWcodWludDMyX3QgUkNDX1NZU0NMS1NvdXJjZSkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SQ0NfU1lTQ0xLX1NPVVJDRShSQ0NfU1lTQ0xLU291cmNlKSk7DQorDQorICB0bXByZWcgPSBSQ0MtPkNGR1I7DQorDQorICAvKiBDbGVhciBTV1sxOjBdIGJpdHMgKi8NCisgIHRtcHJlZyAmPSB+UkNDX0NGR1JfU1c7DQorDQorICAvKiBTZXQgU1dbMTowXSBiaXRzIGFjY29yZGluZyB0byBSQ0NfU1lTQ0xLU291cmNlIHZhbHVlICovDQorICB0bXByZWcgfD0gUkNDX1NZU0NMS1NvdXJjZTsNCisNCisgIC8qIFN0b3JlIHRoZSBuZXcgdmFsdWUgKi8NCisgIFJDQy0+Q0ZHUiA9IHRtcHJlZzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgY2xvY2sgc291cmNlIHVzZWQgYXMgc3lzdGVtIGNsb2NrLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIHVzZWQgYXMgc3lzdGVtIGNsb2NrLiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZQ0KKyAgKiAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmc6DQorICAqICAgICAgICAgICAgICAtIDB4MDA6IEhTSSB1c2VkIGFzIHN5c3RlbSBjbG9jaw0KKyAgKiAgICAgICAgICAgICAgLSAweDA0OiBIU0UgdXNlZCBhcyBzeXN0ZW0gY2xvY2sNCisgICogICAgICAgICAgICAgIC0gMHgwODogUExMIHVzZWQgYXMgc3lzdGVtIGNsb2NrDQorICAqLw0KK3VpbnQ4X3QgUkNDX0dldFNZU0NMS1NvdXJjZSh2b2lkKQ0KK3sNCisgIHJldHVybiAoKHVpbnQ4X3QpKFJDQy0+Q0ZHUiAmIFJDQ19DRkdSX1NXUykpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBBSEIgY2xvY2sgKEhDTEspLg0KKyAgKiBAbm90ZSAgIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UsIHRoZSBzb2Z0d2FyZSBoYXMgdG8gc2V0IGNvcnJlY3RseQ0KKyAgKiAgICAgICAgIHRoZXNlIGJpdHMgdG8gZW5zdXJlIHRoYXQgSENMSyBub3QgZXhjZWVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgZnJlcXVlbmN5DQorICAqICAgICAgICAgKGZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8gc2VjdGlvbiBhYm92ZQ0KKyAgKiAgICAgICAgICAgIkNQVSwgQUhCIGFuZCBBUEIgYnVzc2VzIGNsb2NrcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyIpDQorICAqIEBwYXJhbSAgUkNDX1NZU0NMSzogZGVmaW5lcyB0aGUgQUhCIGNsb2NrIGRpdmlkZXIuIFRoaXMgY2xvY2sgaXMgZGVyaXZlZCBmcm9tIA0KKyAgKiAgICAgICAgIHRoZSBzeXN0ZW0gY2xvY2sgKFNZU0NMSykuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfU1lTQ0xLX0RpdjE6IEFIQiBjbG9jayA9IFNZU0NMSw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1NZU0NMS19EaXYyOiBBSEIgY2xvY2sgPSBTWVNDTEsvMg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1NZU0NMS19EaXY0OiBBSEIgY2xvY2sgPSBTWVNDTEsvNA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1NZU0NMS19EaXY4OiBBSEIgY2xvY2sgPSBTWVNDTEsvOA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1NZU0NMS19EaXYxNjogQUhCIGNsb2NrID0gU1lTQ0xLLzE2DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfU1lTQ0xLX0RpdjY0OiBBSEIgY2xvY2sgPSBTWVNDTEsvNjQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19TWVNDTEtfRGl2MTI4OiBBSEIgY2xvY2sgPSBTWVNDTEsvMTI4DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfU1lTQ0xLX0RpdjI1NjogQUhCIGNsb2NrID0gU1lTQ0xLLzI1Ng0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1NZU0NMS19EaXY1MTI6IEFIQiBjbG9jayA9IFNZU0NMSy81MTINCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0hDTEtDb25maWcodWludDMyX3QgUkNDX1NZU0NMSykNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19IQ0xLKFJDQ19TWVNDTEspKTsNCisNCisgIHRtcHJlZyA9IFJDQy0+Q0ZHUjsNCisNCisgIC8qIENsZWFyIEhQUkVbMzowXSBiaXRzICovDQorICB0bXByZWcgJj0gflJDQ19DRkdSX0hQUkU7DQorDQorICAvKiBTZXQgSFBSRVszOjBdIGJpdHMgYWNjb3JkaW5nIHRvIFJDQ19TWVNDTEsgdmFsdWUgKi8NCisgIHRtcHJlZyB8PSBSQ0NfU1lTQ0xLOw0KKw0KKyAgLyogU3RvcmUgdGhlIG5ldyB2YWx1ZSAqLw0KKyAgUkNDLT5DRkdSID0gdG1wcmVnOw0KK30NCisNCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBMb3cgU3BlZWQgQVBCIGNsb2NrIChQQ0xLMSkuDQorICAqIEBwYXJhbSAgUkNDX0hDTEs6IGRlZmluZXMgdGhlIEFQQjEgY2xvY2sgZGl2aWRlci4gVGhpcyBjbG9jayBpcyBkZXJpdmVkIGZyb20gDQorICAqICAgICAgICAgdGhlIEFIQiBjbG9jayAoSENMSykuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSENMS19EaXYxOiAgQVBCMSBjbG9jayA9IEhDTEsNCisgICogICAgICAgICAgICBAYXJnIFJDQ19IQ0xLX0RpdjI6ICBBUEIxIGNsb2NrID0gSENMSy8yDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSENMS19EaXY0OiAgQVBCMSBjbG9jayA9IEhDTEsvNA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0hDTEtfRGl2ODogIEFQQjEgY2xvY2sgPSBIQ0xLLzgNCisgICogICAgICAgICAgICBAYXJnIFJDQ19IQ0xLX0RpdjE2OiBBUEIxIGNsb2NrID0gSENMSy8xNg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfUENMSzFDb25maWcodWludDMyX3QgUkNDX0hDTEspDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BDTEsoUkNDX0hDTEspKTsNCisNCisgIHRtcHJlZyA9IFJDQy0+Q0ZHUjsNCisNCisgIC8qIENsZWFyIFBQUkUxWzI6MF0gYml0cyAqLw0KKyAgdG1wcmVnICY9IH5SQ0NfQ0ZHUl9QUFJFMTsNCisNCisgIC8qIFNldCBQUFJFMVsyOjBdIGJpdHMgYWNjb3JkaW5nIHRvIFJDQ19IQ0xLIHZhbHVlICovDQorICB0bXByZWcgfD0gUkNDX0hDTEs7DQorDQorICAvKiBTdG9yZSB0aGUgbmV3IHZhbHVlICovDQorICBSQ0MtPkNGR1IgPSB0bXByZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIEhpZ2ggU3BlZWQgQVBCIGNsb2NrIChQQ0xLMikuDQorICAqIEBwYXJhbSAgUkNDX0hDTEs6IGRlZmluZXMgdGhlIEFQQjIgY2xvY2sgZGl2aWRlci4gVGhpcyBjbG9jayBpcyBkZXJpdmVkIGZyb20gDQorICAqICAgICAgICAgdGhlIEFIQiBjbG9jayAoSENMSykuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSENMS19EaXYxOiAgQVBCMiBjbG9jayA9IEhDTEsNCisgICogICAgICAgICAgICBAYXJnIFJDQ19IQ0xLX0RpdjI6ICBBUEIyIGNsb2NrID0gSENMSy8yDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSENMS19EaXY0OiAgQVBCMiBjbG9jayA9IEhDTEsvNA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0hDTEtfRGl2ODogIEFQQjIgY2xvY2sgPSBIQ0xLLzgNCisgICogICAgICAgICAgICBAYXJnIFJDQ19IQ0xLX0RpdjE2OiBBUEIyIGNsb2NrID0gSENMSy8xNg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfUENMSzJDb25maWcodWludDMyX3QgUkNDX0hDTEspDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BDTEsoUkNDX0hDTEspKTsNCisNCisgIHRtcHJlZyA9IFJDQy0+Q0ZHUjsNCisNCisgIC8qIENsZWFyIFBQUkUyWzI6MF0gYml0cyAqLw0KKyAgdG1wcmVnICY9IH5SQ0NfQ0ZHUl9QUFJFMjsNCisNCisgIC8qIFNldCBQUFJFMlsyOjBdIGJpdHMgYWNjb3JkaW5nIHRvIFJDQ19IQ0xLIHZhbHVlICovDQorICB0bXByZWcgfD0gUkNDX0hDTEsgPDwgMzsNCisNCisgIC8qIFN0b3JlIHRoZSBuZXcgdmFsdWUgKi8NCisgIFJDQy0+Q0ZHUiA9IHRtcHJlZzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgZnJlcXVlbmNpZXMgb2YgZGlmZmVyZW50IG9uIGNoaXAgY2xvY2tzOyBTWVNDTEssIEhDTEssIA0KKyAgKiAgICAgICAgIFBDTEsxIGFuZCBQQ0xLMi4gICAgICAgDQorICAqIA0KKyAgKiBAbm90ZSAgIFRoZSBzeXN0ZW0gZnJlcXVlbmN5IGNvbXB1dGVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbm90IHRoZSByZWFsIA0KKyAgKiAgICAgICAgIGZyZXF1ZW5jeSBpbiB0aGUgY2hpcC4gSXQgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgcHJlZGVmaW5lZCANCisgICogICAgICAgICBjb25zdGFudCBhbmQgdGhlIHNlbGVjdGVkIGNsb2NrIHNvdXJjZToNCisgICogQG5vdGUgICAgIElmIFNZU0NMSyBzb3VyY2UgaXMgSFNJLCBmdW5jdGlvbiByZXR1cm5zIHZhbHVlcyBiYXNlZCBvbiBIU0lfVkFMVUUoKikNCisgICogQG5vdGUgICAgIElmIFNZU0NMSyBzb3VyY2UgaXMgSFNFLCBmdW5jdGlvbiByZXR1cm5zIHZhbHVlcyBiYXNlZCBvbiBIU0VfVkFMVUUoKiopDQorICAqIEBub3RlICAgICBJZiBTWVNDTEsgc291cmNlIGlzIFBMTCwgZnVuY3Rpb24gcmV0dXJucyB2YWx1ZXMgYmFzZWQgb24gSFNFX1ZBTFVFKCoqKSANCisgICogICAgICAgICAgIG9yIEhTSV9WQUxVRSgqKSBtdWx0aXBsaWVkL2RpdmlkZWQgYnkgdGhlIFBMTCBmYWN0b3JzLiAgICAgICAgIA0KKyAgKiBAbm90ZSAgICAgKCopIEhTSV9WQUxVRSBpcyBhIGNvbnN0YW50IGRlZmluZWQgaW4gc3RtMzJmMnh4LmggZmlsZSAoZGVmYXVsdCB2YWx1ZQ0KKyAgKiAgICAgICAgICAgICAgIDE2IE1IeikgYnV0IHRoZSByZWFsIHZhbHVlIG1heSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdmFyaWF0aW9ucw0KKyAgKiAgICAgICAgICAgICAgIGluIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlLg0KKyAgKiBAbm90ZSAgICAgKCoqKSBIU0VfVkFMVUUgaXMgYSBjb25zdGFudCBkZWZpbmVkIGluIHN0bTMyZjJ4eC5oIGZpbGUgKGRlZmF1bHQgdmFsdWUNCisgICogICAgICAgICAgICAgICAgMjUgTUh6KSwgdXNlciBoYXMgdG8gZW5zdXJlIHRoYXQgSFNFX1ZBTFVFIGlzIHNhbWUgYXMgdGhlIHJlYWwNCisgICogICAgICAgICAgICAgICAgZnJlcXVlbmN5IG9mIHRoZSBjcnlzdGFsIHVzZWQuIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBtYXkNCisgICogICAgICAgICAgICAgICAgaGF2ZSB3cm9uZyByZXN1bHQuDQorICAqICAgICAgICAgICAgICAgIA0KKyAgKiBAbm90ZSAgIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBub3QgY29ycmVjdCB3aGVuIHVzaW5nIGZyYWN0aW9uYWwNCisgICogICAgICAgICB2YWx1ZSBmb3IgSFNFIGNyeXN0YWwuDQorICAqICAgDQorICAqIEBwYXJhbSAgUkNDX0Nsb2NrczogcG9pbnRlciB0byBhIFJDQ19DbG9ja3NUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsIGhvbGQNCisgICogICAgICAgICAgdGhlIGNsb2NrcyBmcmVxdWVuY2llcy4NCisgICogICAgIA0KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gY29tcHV0ZSB0aGUgDQorICAqICAgICAgICAgYmF1ZHJhdGUgZm9yIHRoZSBjb21tdW5pY2F0aW9uIHBlcmlwaGVyYWxzIG9yIGNvbmZpZ3VyZSBvdGhlciBwYXJhbWV0ZXJzLg0KKyAgKiBAbm90ZSAgIEVhY2ggdGltZSBTWVNDTEssIEhDTEssIFBDTEsxIGFuZC9vciBQQ0xLMiBjbG9jayBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uDQorICAqICAgICAgICAgbXVzdCBiZSBjYWxsZWQgdG8gdXBkYXRlIHRoZSBzdHJ1Y3R1cmUncyBmaWVsZC4gT3RoZXJ3aXNlLCBhbnkNCisgICogICAgICAgICBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbmNvcnJlY3QuDQorICAqICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfR2V0Q2xvY2tzRnJlcShSQ0NfQ2xvY2tzVHlwZURlZiogUkNDX0Nsb2NrcykNCit7DQorICB1aW50MzJfdCB0bXAgPSAwLCBwcmVzYyA9IDAsIHBsbHZjbyA9IDAsIHBsbHAgPSAyLCBwbGxzb3VyY2UgPSAwLCBwbGxtID0gMjsNCisNCisgIC8qIEdldCBTWVNDTEsgc291cmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgdG1wID0gUkNDLT5DRkdSICYgUkNDX0NGR1JfU1dTOw0KKw0KKyAgc3dpdGNoICh0bXApDQorICB7DQorICAgIGNhc2UgMHgwMDogIC8qIEhTSSB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UgKi8NCisgICAgICBSQ0NfQ2xvY2tzLT5TWVNDTEtfRnJlcXVlbmN5ID0gSFNJX1ZBTFVFOw0KKyAgICAgIGJyZWFrOw0KKyAgICBjYXNlIDB4MDQ6ICAvKiBIU0UgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgIHNvdXJjZSAqLw0KKyAgICAgIFJDQ19DbG9ja3MtPlNZU0NMS19GcmVxdWVuY3kgPSBIU0VfVkFMVUU7DQorICAgICAgYnJlYWs7DQorICAgIGNhc2UgMHgwODogIC8qIFBMTCB1c2VkIGFzIHN5c3RlbSBjbG9jayAgc291cmNlICovDQorDQorICAgICAgLyogUExMX1ZDTyA9IChIU0VfVkFMVUUgb3IgSFNJX1ZBTFVFIC8gUExMTSkgKiBQTExODQorICAgICAgICAgU1lTQ0xLID0gUExMX1ZDTyAvIFBMTFANCisgICAgICAgICAqLyAgICANCisgICAgICBwbGxzb3VyY2UgPSAoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMU1JDKSA+PiAyMjsNCisgICAgICBwbGxtID0gUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMTTsNCisgICAgICANCisgICAgICBpZiAocGxsc291cmNlICE9IDApDQorICAgICAgew0KKyAgICAgICAgLyogSFNFIHVzZWQgYXMgUExMIGNsb2NrIHNvdXJjZSAqLw0KKyAgICAgICAgcGxsdmNvID0gKEhTRV9WQUxVRSAvIHBsbG0pICogKChSQ0MtPlBMTENGR1IgJiBSQ0NfUExMQ0ZHUl9QTExOKSA+PiA2KTsNCisgICAgICB9DQorICAgICAgZWxzZQ0KKyAgICAgIHsNCisgICAgICAgIC8qIEhTSSB1c2VkIGFzIFBMTCBjbG9jayBzb3VyY2UgKi8NCisgICAgICAgIHBsbHZjbyA9IChIU0lfVkFMVUUgLyBwbGxtKSAqICgoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMTikgPj4gNik7ICAgICAgDQorICAgICAgfQ0KKw0KKyAgICAgIHBsbHAgPSAoKChSQ0MtPlBMTENGR1IgJiBSQ0NfUExMQ0ZHUl9QTExQKSA+PjE2KSArIDEgKSAqMjsNCisgICAgICBSQ0NfQ2xvY2tzLT5TWVNDTEtfRnJlcXVlbmN5ID0gcGxsdmNvL3BsbHA7DQorICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQorICAgICAgUkNDX0Nsb2Nrcy0+U1lTQ0xLX0ZyZXF1ZW5jeSA9IEhTSV9WQUxVRTsNCisgICAgICBicmVhazsNCisgIH0NCisgIC8qIENvbXB1dGUgSENMSywgUENMSzEgYW5kIFBDTEsyIGNsb2NrcyBmcmVxdWVuY2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyAgLyogR2V0IEhDTEsgcHJlc2NhbGVyICovDQorICB0bXAgPSBSQ0MtPkNGR1IgJiBSQ0NfQ0ZHUl9IUFJFOw0KKyAgdG1wID0gdG1wID4+IDQ7DQorICBwcmVzYyA9IEFQQkFIQlByZXNjVGFibGVbdG1wXTsNCisgIC8qIEhDTEsgY2xvY2sgZnJlcXVlbmN5ICovDQorICBSQ0NfQ2xvY2tzLT5IQ0xLX0ZyZXF1ZW5jeSA9IFJDQ19DbG9ja3MtPlNZU0NMS19GcmVxdWVuY3kgPj4gcHJlc2M7DQorDQorICAvKiBHZXQgUENMSzEgcHJlc2NhbGVyICovDQorICB0bXAgPSBSQ0MtPkNGR1IgJiBSQ0NfQ0ZHUl9QUFJFMTsNCisgIHRtcCA9IHRtcCA+PiAxMDsNCisgIHByZXNjID0gQVBCQUhCUHJlc2NUYWJsZVt0bXBdOw0KKyAgLyogUENMSzEgY2xvY2sgZnJlcXVlbmN5ICovDQorICBSQ0NfQ2xvY2tzLT5QQ0xLMV9GcmVxdWVuY3kgPSBSQ0NfQ2xvY2tzLT5IQ0xLX0ZyZXF1ZW5jeSA+PiBwcmVzYzsNCisNCisgIC8qIEdldCBQQ0xLMiBwcmVzY2FsZXIgKi8NCisgIHRtcCA9IFJDQy0+Q0ZHUiAmIFJDQ19DRkdSX1BQUkUyOw0KKyAgdG1wID0gdG1wID4+IDEzOw0KKyAgcHJlc2MgPSBBUEJBSEJQcmVzY1RhYmxlW3RtcF07DQorICAvKiBQQ0xLMiBjbG9jayBmcmVxdWVuY3kgKi8NCisgIFJDQ19DbG9ja3MtPlBDTEsyX0ZyZXF1ZW5jeSA9IFJDQ19DbG9ja3MtPkhDTEtfRnJlcXVlbmN5ID4+IHByZXNjOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSQ0NfR3JvdXAzIFBlcmlwaGVyYWwgY2xvY2tzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIFBlcmlwaGVyYWwgY2xvY2tzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgUGVyaXBoZXJhbCBjbG9ja3MgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZSBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBQZXJpcGhlcmFsIGNsb2Nrcy4gDQorICANCisgIDEuIFRoZSBSVEMgY2xvY2sgd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoZSBMU0ksIExTRSBvciBIU0UgY2xvY2sgZGl2aWRlZCBieSAyIHRvIDMxLg0KKyAgICAgDQorICAyLiBBZnRlciByZXN0YXJ0IGZyb20gUmVzZXQgb3Igd2FrZXVwIGZyb20gU1RBTkRCWSwgYWxsIHBlcmlwaGVyYWxzIGFyZSBvZmYNCisgICAgIGV4Y2VwdCBpbnRlcm5hbCBTUkFNLCBGbGFzaCBhbmQgSlRBRy4gQmVmb3JlIHRvIHN0YXJ0IHVzaW5nIGEgcGVyaXBoZXJhbCB5b3UNCisgICAgIGhhdmUgdG8gZW5hYmxlIGl0cyBpbnRlcmZhY2UgY2xvY2suIFlvdSBjYW4gZG8gdGhpcyB1c2luZyBSQ0NfQUhCUGVyaXBoQ2xvY2tDbWQoKQ0KKyAgICAgLCBSQ0NfQVBCMlBlcmlwaENsb2NrQ21kKCkgYW5kIFJDQ19BUEIxUGVyaXBoQ2xvY2tDbWQoKSBmdW5jdGlvbnMuDQorDQorICAzLiBUbyByZXNldCB0aGUgcGVyaXBoZXJhbHMgY29uZmlndXJhdGlvbiAodG8gdGhlIGRlZmF1bHQgc3RhdGUgYWZ0ZXIgZGV2aWNlIHJlc2V0KQ0KKyAgICAgeW91IGNhbiB1c2UgUkNDX0FIQlBlcmlwaFJlc2V0Q21kKCksIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoKSBhbmQgDQorICAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKCkgZnVuY3Rpb25zLg0KKyAgICAgDQorICA0LiBUbyBmdXJ0aGVyIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbiBpbiBTTEVFUCBtb2RlIHRoZSBwZXJpcGhlcmFsIGNsb2NrcyBjYW4NCisgICAgIGJlIGRpc2FibGVkIHByaW9yIHRvIGV4ZWN1dGluZyB0aGUgV0ZJIG9yIFdGRSBpbnN0cnVjdGlvbnMuIFlvdSBjYW4gZG8gdGhpcw0KKyAgICAgdXNpbmcgUkNDX0FIQlBlcmlwaENsb2NrTFBNb2RlQ21kKCksIFJDQ19BUEIyUGVyaXBoQ2xvY2tMUE1vZGVDbWQoKSBhbmQNCisgICAgIFJDQ19BUEIxUGVyaXBoQ2xvY2tMUE1vZGVDbWQoKSBmdW5jdGlvbnMuICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgUlRDIGNsb2NrIChSVENDTEspLg0KKyAgKiBAbm90ZSAgIEFzIHRoZSBSVEMgY2xvY2sgY29uZmlndXJhdGlvbiBiaXRzIGFyZSBpbiB0aGUgQmFja3VwIGRvbWFpbiBhbmQgd3JpdGUNCisgICogICAgICAgICBhY2Nlc3MgaXMgZGVuaWVkIHRvIHRoaXMgZG9tYWluIGFmdGVyIHJlc2V0LCB5b3UgaGF2ZSB0byBlbmFibGUgd3JpdGUNCisgICogICAgICAgICBhY2Nlc3MgdXNpbmcgUFdSX0JhY2t1cEFjY2Vzc0NtZChFTkFCTEUpIGZ1bmN0aW9uIGJlZm9yZSB0byBjb25maWd1cmUNCisgICogICAgICAgICB0aGUgUlRDIGNsb2NrIHNvdXJjZSAodG8gYmUgZG9uZSBvbmNlIGFmdGVyIHJlc2V0KS4gICAgDQorICAqIEBub3RlICAgT25jZSB0aGUgUlRDIGNsb2NrIGlzIGNvbmZpZ3VyZWQgaXQgY2FuJ3QgYmUgY2hhbmdlZCB1bmxlc3MgdGhlICANCisgICogICAgICAgICBCYWNrdXAgZG9tYWluIGlzIHJlc2V0IHVzaW5nIFJDQ19CYWNrdXBSZXNldENtZCgpIGZ1bmN0aW9uLCBvciBieQ0KKyAgKiAgICAgICAgIGEgUG93ZXIgT24gUmVzZXQgKFBPUikuDQorICAqICAgIA0KKyAgKiBAcGFyYW0gIFJDQ19SVENDTEtTb3VyY2U6IHNwZWNpZmllcyB0aGUgUlRDIGNsb2NrIHNvdXJjZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19SVENDTEtTb3VyY2VfTFNFOiBMU0Ugc2VsZWN0ZWQgYXMgUlRDIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfUlRDQ0xLU291cmNlX0xTSTogTFNJIHNlbGVjdGVkIGFzIFJUQyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1JUQ0NMS1NvdXJjZV9IU0VfRGl2eDogSFNFIGNsb2NrIGRpdmlkZWQgYnkgeCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgUlRDIGNsb2NrLCB3aGVyZSB4OlsyLDMxXQ0KKyAgKiAgDQorICAqIEBub3RlICAgSWYgdGhlIExTRSBvciBMU0kgaXMgdXNlZCBhcyBSVEMgY2xvY2sgc291cmNlLCB0aGUgUlRDIGNvbnRpbnVlcyB0bw0KKyAgKiAgICAgICAgIHdvcmsgaW4gU1RPUCBhbmQgU1RBTkRCWSBtb2RlcywgYW5kIGNhbiBiZSB1c2VkIGFzIHdha2V1cCBzb3VyY2UuDQorICAqICAgICAgICAgSG93ZXZlciwgd2hlbiB0aGUgSFNFIGNsb2NrIGlzIHVzZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSwgdGhlIFJUQw0KKyAgKiAgICAgICAgIGNhbm5vdCBiZSB1c2VkIGluIFNUT1AgYW5kIFNUQU5EQlkgbW9kZXMuICAgIA0KKyAgKiBAbm90ZSAgIFRoZSBtYXhpbXVtIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBmb3IgUlRDIGlzIDFNSHogKHdoZW4gdXNpbmcgSFNFIGFzDQorICAqICAgICAgICAgUlRDIGNsb2NrIHNvdXJjZSkuDQorICAqICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX1JUQ0NMS0NvbmZpZyh1aW50MzJfdCBSQ0NfUlRDQ0xLU291cmNlKQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19SVENDTEtfU09VUkNFKFJDQ19SVENDTEtTb3VyY2UpKTsNCisNCisgIGlmICgoUkNDX1JUQ0NMS1NvdXJjZSAmIDB4MDAwMDAzMDApID09IDB4MDAwMDAzMDApDQorICB7IC8qIElmIEhTRSBpcyBzZWxlY3RlZCBhcyBSVEMgY2xvY2sgc291cmNlLCBjb25maWd1cmUgSFNFIGRpdmlzaW9uIGZhY3RvciBmb3IgUlRDIGNsb2NrICovDQorICAgIHRtcHJlZyA9IFJDQy0+Q0ZHUjsNCisNCisgICAgLyogQ2xlYXIgUlRDUFJFWzQ6MF0gYml0cyAqLw0KKyAgICB0bXByZWcgJj0gflJDQ19DRkdSX1JUQ1BSRTsNCisNCisgICAgLyogQ29uZmlndXJlIEhTRSBkaXZpc2lvbiBmYWN0b3IgZm9yIFJUQyBjbG9jayAqLw0KKyAgICB0bXByZWcgfD0gKFJDQ19SVENDTEtTb3VyY2UgJiAweEZGRkZDRkYpOw0KKw0KKyAgICAvKiBTdG9yZSB0aGUgbmV3IHZhbHVlICovDQorICAgIFJDQy0+Q0ZHUiA9IHRtcHJlZzsNCisgIH0NCisgICAgDQorICAvKiBTZWxlY3QgdGhlIFJUQyBjbG9jayBzb3VyY2UgKi8NCisgIFJDQy0+QkRDUiB8PSAoUkNDX1JUQ0NMS1NvdXJjZSAmIDB4MDAwMDBGRkYpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBSVEMgY2xvY2suDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgb25seSBhZnRlciB0aGUgUlRDIGNsb2NrIHNvdXJjZSB3YXMgc2VsZWN0ZWQNCisgICogICAgICAgICB1c2luZyB0aGUgUkNDX1JUQ0NMS0NvbmZpZyBmdW5jdGlvbi4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBSVEMgY2xvY2suIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19SVENDTEtDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgKihfX0lPIHVpbnQzMl90ICopIEJEQ1JfUlRDRU5fQkIgPSAodWludDMyX3QpTmV3U3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZvcmNlcyBvciByZWxlYXNlcyB0aGUgQmFja3VwIGRvbWFpbiByZXNldC4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgUlRDIHBlcmlwaGVyYWwgKGluY2x1ZGluZyB0aGUgYmFja3VwIHJlZ2lzdGVycykNCisgICogICAgICAgICBhbmQgdGhlIFJUQyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIGluIFJDQ19DU1IgcmVnaXN0ZXIuDQorICAqIEBub3RlICAgVGhlIEJLUFNSQU0gaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMgcmVzZXQuICAgIA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIEJhY2t1cCBkb21haW4gcmVzZXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19CYWNrdXBSZXNldENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICAqKF9fSU8gdWludDMyX3QgKikgQkRDUl9CRFJTVF9CQiA9ICh1aW50MzJfdClOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgSTJTIGNsb2NrIHNvdXJjZSAoSTJTQ0xLKS4NCisgICoNCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbmFibGluZyB0aGUgSTJTIEFQQiBjbG9jay4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgb25seSB0byBTaWxpY29uIFJldmlzaW9uQiBhbmQgUmV2aXNpb25ZLg0KKyAgKg0KKyAgKiBAcGFyYW0gIFJDQ19JMlNDTEtTb3VyY2U6IHNwZWNpZmllcyB0aGUgSTJTIGNsb2NrIHNvdXJjZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JMlMyQ0xLU291cmNlX1BMTEkyUzogUExMSTJTIGNsb2NrIHVzZWQgYXMgSTJTIGNsb2NrIHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyUzJDTEtTb3VyY2VfRXh0OiBFeHRlcm5hbCBjbG9jayBtYXBwZWQgb24gdGhlIEkyU19DS0lOIHBpbg0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGFzIEkyUyBjbG9jayBzb3VyY2UNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0kyU0NMS0NvbmZpZyh1aW50MzJfdCBSQ0NfSTJTQ0xLU291cmNlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0kyU0NMS19TT1VSQ0UoUkNDX0kyU0NMS1NvdXJjZSkpOw0KKw0KKyAgKihfX0lPIHVpbnQzMl90ICopIENGR1JfSTJTU1JDX0JCID0gUkNDX0kyU0NMS1NvdXJjZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgQUhCMSBwZXJpcGhlcmFsIGNsb2NrLg0KKyAgKiBAbm90ZSAgIEFmdGVyIHJlc2V0LCB0aGUgcGVyaXBoZXJhbCBjbG9jayAodXNlZCBmb3IgcmVnaXN0ZXJzIHJlYWQvd3JpdGUgYWNjZXNzKQ0KKyAgKiAgICAgICAgIGlzIGRpc2FibGVkIGFuZCB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUgaGFzIHRvIGVuYWJsZSB0aGlzIGNsb2NrIGJlZm9yZSANCisgICogICAgICAgICB1c2luZyBpdC4gICANCisgICogQHBhcmFtICBSQ0NfQUhCUGVyaXBoOiBzcGVjaWZpZXMgdGhlIEFIQjEgcGVyaXBoZXJhbCB0byBnYXRlcyBpdHMgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPQTogICAgICAgR1BJT0EgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9COiAgICAgICBHUElPQiBjbG9jayANCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9DOiAgICAgICBHUElPQyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0Q6ICAgICAgIEdQSU9EIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPRTogICAgICAgR1BJT0UgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9GOiAgICAgICBHUElPRiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0c6ICAgICAgIEdQSU9HIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPRzogICAgICAgR1BJT0cgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9JOiAgICAgICBHUElPSSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfQ1JDOiAgICAgICAgIENSQyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfQktQU1JBTTogICAgIEJLUFNSQU0gaW50ZXJmYWNlIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9ETUExOiAgICAgICAgRE1BMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRE1BMjogICAgICAgIERNQTIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0VUSF9NQUM6ICAgICBFdGhlcm5ldCBNQUMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0VUSF9NQUNfVHg6ICBFdGhlcm5ldCBUcmFuc21pc3Npb24gY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0VUSF9NQUNfUng6ICBFdGhlcm5ldCBSZWNlcHRpb24gY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0VUSF9NQUNfUFRQOiBFdGhlcm5ldCBQVFAgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX09UR19IUzogICAgICBVU0IgT1RHIEhTIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9PVEdfSFNfVUxQSTogVVNCIE9URyBIUyBVTFBJIGNsb2NrDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BSEIxUGVyaXBoQ2xvY2tDbWQodWludDMyX3QgUkNDX0FIQjFQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BSEIxX0NMT0NLX1BFUklQSChSQ0NfQUhCMVBlcmlwaCkpOw0KKw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFIQjFFTlIgfD0gUkNDX0FIQjFQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QUhCMUVOUiAmPSB+UkNDX0FIQjFQZXJpcGg7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEFIQjIgcGVyaXBoZXJhbCBjbG9jay4NCisgICogQG5vdGUgICBBZnRlciByZXNldCwgdGhlIHBlcmlwaGVyYWwgY2xvY2sgKHVzZWQgZm9yIHJlZ2lzdGVycyByZWFkL3dyaXRlIGFjY2VzcykNCisgICogICAgICAgICBpcyBkaXNhYmxlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyB0byBlbmFibGUgdGhpcyBjbG9jayBiZWZvcmUgDQorICAqICAgICAgICAgdXNpbmcgaXQuIA0KKyAgKiBAcGFyYW0gIFJDQ19BSEJQZXJpcGg6IHNwZWNpZmllcyB0aGUgQUhCMiBwZXJpcGhlcmFsIHRvIGdhdGVzIGl0cyBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIyUGVyaXBoX0RDTUk6ICAgRENNSSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjJQZXJpcGhfQ1JZUDogICBDUllQIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMlBlcmlwaF9IQVNIOiAgIEhBU0ggY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIyUGVyaXBoX1JORzogICAgUk5HIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMlBlcmlwaF9PVEdfRlM6IFVTQiBPVEcgRlMgY2xvY2sNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0FIQjJQZXJpcGhDbG9ja0NtZCh1aW50MzJfdCBSQ0NfQUhCMlBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0FIQjJfUEVSSVBIKFJDQ19BSEIyUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIFJDQy0+QUhCMkVOUiB8PSBSQ0NfQUhCMlBlcmlwaDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgUkNDLT5BSEIyRU5SICY9IH5SQ0NfQUhCMlBlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgQUhCMyBwZXJpcGhlcmFsIGNsb2NrLg0KKyAgKiBAbm90ZSAgIEFmdGVyIHJlc2V0LCB0aGUgcGVyaXBoZXJhbCBjbG9jayAodXNlZCBmb3IgcmVnaXN0ZXJzIHJlYWQvd3JpdGUgYWNjZXNzKQ0KKyAgKiAgICAgICAgIGlzIGRpc2FibGVkIGFuZCB0aGUgYXBwbGljYXRpb24gc29mdHdhcmUgaGFzIHRvIGVuYWJsZSB0aGlzIGNsb2NrIGJlZm9yZSANCisgICogICAgICAgICB1c2luZyBpdC4gDQorICAqIEBwYXJhbSAgUkNDX0FIQlBlcmlwaDogc3BlY2lmaWVzIHRoZSBBSEIzIHBlcmlwaGVyYWwgdG8gZ2F0ZXMgaXRzIGNsb2NrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlOiBSQ0NfQUhCM1BlcmlwaF9GU01DDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BSEIzUGVyaXBoQ2xvY2tDbWQodWludDMyX3QgUkNDX0FIQjNQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BSEIzX1BFUklQSChSQ0NfQUhCM1BlcmlwaCkpOyAgDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIFJDQy0+QUhCM0VOUiB8PSBSQ0NfQUhCM1BlcmlwaDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgUkNDLT5BSEIzRU5SICY9IH5SQ0NfQUhCM1BlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgTG93IFNwZWVkIEFQQiAoQVBCMSkgcGVyaXBoZXJhbCBjbG9jay4NCisgICogQG5vdGUgICBBZnRlciByZXNldCwgdGhlIHBlcmlwaGVyYWwgY2xvY2sgKHVzZWQgZm9yIHJlZ2lzdGVycyByZWFkL3dyaXRlIGFjY2VzcykNCisgICogICAgICAgICBpcyBkaXNhYmxlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyB0byBlbmFibGUgdGhpcyBjbG9jayBiZWZvcmUgDQorICAqICAgICAgICAgdXNpbmcgaXQuIA0KKyAgKiBAcGFyYW0gIFJDQ19BUEIxUGVyaXBoOiBzcGVjaWZpZXMgdGhlIEFQQjEgcGVyaXBoZXJhbCB0byBnYXRlcyBpdHMgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0yOiAgIFRJTTIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1RJTTM6ICAgVElNMyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNNDogICBUSU00IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU01OiAgIFRJTTUgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1RJTTY6ICAgVElNNiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNNzogICBUSU03IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0xMjogIFRJTTEyIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0xMzogIFRJTTEzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0xNDogIFRJTTE0IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9XV0RHOiAgIFdXREcgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1NQSTI6ICAgU1BJMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfU1BJMzogICBTUEkzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9VU0FSVDI6IFVTQVJUMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVVNBUlQzOiBVU0FSVDMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1VBUlQ0OiAgVUFSVDQgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1VBUlQ1OiAgVUFSVDUgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0kyQzE6ICAgSTJDMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfSTJDMjogICBJMkMyIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9JMkMzOiAgIEkyQzMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0NBTjE6ICAgQ0FOMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfQ0FOMjogICBDQU4yIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9QV1I6ICAgIFBXUiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfREFDOiAgICBEQUMgY2xvY2sNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0FQQjFQZXJpcGhDbG9ja0NtZCh1aW50MzJfdCBSQ0NfQVBCMVBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0FQQjFfUEVSSVBIKFJDQ19BUEIxUGVyaXBoKSk7ICANCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgUkNDLT5BUEIxRU5SIHw9IFJDQ19BUEIxUGVyaXBoOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBSQ0MtPkFQQjFFTlIgJj0gflJDQ19BUEIxUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBIaWdoIFNwZWVkIEFQQiAoQVBCMikgcGVyaXBoZXJhbCBjbG9jay4NCisgICogQG5vdGUgICBBZnRlciByZXNldCwgdGhlIHBlcmlwaGVyYWwgY2xvY2sgKHVzZWQgZm9yIHJlZ2lzdGVycyByZWFkL3dyaXRlIGFjY2VzcykNCisgICogICAgICAgICBpcyBkaXNhYmxlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNvZnR3YXJlIGhhcyB0byBlbmFibGUgdGhpcyBjbG9jayBiZWZvcmUgDQorICAqICAgICAgICAgdXNpbmcgaXQuDQorICAqIEBwYXJhbSAgUkNDX0FQQjJQZXJpcGg6IHNwZWNpZmllcyB0aGUgQVBCMiBwZXJpcGhlcmFsIHRvIGdhdGVzIGl0cyBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1RJTTE6ICAgVElNMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVElNODogICBUSU04IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9VU0FSVDE6IFVTQVJUMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVVNBUlQ2OiBVU0FSVDYgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX0FEQzE6ICAgQURDMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfQURDMjogICBBREMyIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9BREMzOiAgIEFEQzMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1NESU86ICAgU0RJTyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfU1BJMTogICBTUEkxIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9TWVNDRkc6IFNZU0NGRyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVElNOTogICBUSU05IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9USU0xMDogIFRJTTEwIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9USU0xMTogIFRJTTExIGNsb2NrDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQodWludDMyX3QgUkNDX0FQQjJQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BUEIyX1BFUklQSChSQ0NfQVBCMlBlcmlwaCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFQQjJFTlIgfD0gUkNDX0FQQjJQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QVBCMkVOUiAmPSB+UkNDX0FQQjJQZXJpcGg7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZvcmNlcyBvciByZWxlYXNlcyBBSEIxIHBlcmlwaGVyYWwgcmVzZXQuDQorICAqIEBwYXJhbSAgUkNDX0FIQjFQZXJpcGg6IHNwZWNpZmllcyB0aGUgQUhCMSBwZXJpcGhlcmFsIHRvIHJlc2V0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0E6ICAgR1BJT0EgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9COiAgIEdQSU9CIGNsb2NrIA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0M6ICAgR1BJT0MgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9EOiAgIEdQSU9EIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPRTogICBHUElPRSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0Y6ICAgR1BJT0YgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9HOiAgIEdQSU9HIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPRzogICBHUElPRyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0k6ICAgR1BJT0kgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0NSQzogICAgIENSQyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRE1BMTogICAgRE1BMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRE1BMjogICAgRE1BMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRVRIX01BQzogRXRoZXJuZXQgTUFDIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9PVEdfSFM6ICBVU0IgT1RHIEhTIGNsb2NrDQorICAqICAgICAgICAgICAgICAgICAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgcmVzZXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BSEIxUGVyaXBoUmVzZXRDbWQodWludDMyX3QgUkNDX0FIQjFQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BSEIxX1JFU0VUX1BFUklQSChSQ0NfQUhCMVBlcmlwaCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFIQjFSU1RSIHw9IFJDQ19BSEIxUGVyaXBoOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBSQ0MtPkFIQjFSU1RSICY9IH5SQ0NfQUhCMVBlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRm9yY2VzIG9yIHJlbGVhc2VzIEFIQjIgcGVyaXBoZXJhbCByZXNldC4NCisgICogQHBhcmFtICBSQ0NfQUhCMlBlcmlwaDogc3BlY2lmaWVzIHRoZSBBSEIyIHBlcmlwaGVyYWwgdG8gcmVzZXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMlBlcmlwaF9EQ01JOiAgIERDTUkgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIyUGVyaXBoX0NSWVA6ICAgQ1JZUCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjJQZXJpcGhfSEFTSDogICBIQVNIIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMlBlcmlwaF9STkc6ICAgIFJORyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjJQZXJpcGhfT1RHX0ZTOiBVU0IgT1RHIEZTIGNsb2NrDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgcmVzZXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BSEIyUGVyaXBoUmVzZXRDbWQodWludDMyX3QgUkNDX0FIQjJQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BSEIyX1BFUklQSChSQ0NfQUhCMlBlcmlwaCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFIQjJSU1RSIHw9IFJDQ19BSEIyUGVyaXBoOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBSQ0MtPkFIQjJSU1RSICY9IH5SQ0NfQUhCMlBlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRm9yY2VzIG9yIHJlbGVhc2VzIEFIQjMgcGVyaXBoZXJhbCByZXNldC4NCisgICogQHBhcmFtICBSQ0NfQUhCM1BlcmlwaDogc3BlY2lmaWVzIHRoZSBBSEIzIHBlcmlwaGVyYWwgdG8gcmVzZXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmU6IFJDQ19BSEIzUGVyaXBoX0ZTTUMNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCByZXNldC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0FIQjNQZXJpcGhSZXNldENtZCh1aW50MzJfdCBSQ0NfQUhCM1BlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0FIQjNfUEVSSVBIKFJDQ19BSEIzUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIFJDQy0+QUhCM1JTVFIgfD0gUkNDX0FIQjNQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QUhCM1JTVFIgJj0gflJDQ19BSEIzUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGb3JjZXMgb3IgcmVsZWFzZXMgTG93IFNwZWVkIEFQQiAoQVBCMSkgcGVyaXBoZXJhbCByZXNldC4NCisgICogQHBhcmFtICBSQ0NfQVBCMVBlcmlwaDogc3BlY2lmaWVzIHRoZSBBUEIxIHBlcmlwaGVyYWwgdG8gcmVzZXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0yOiAgIFRJTTIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1RJTTM6ICAgVElNMyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNNDogICBUSU00IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU01OiAgIFRJTTUgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1RJTTY6ICAgVElNNiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNNzogICBUSU03IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0xMjogIFRJTTEyIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0xMzogIFRJTTEzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0xNDogIFRJTTE0IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9XV0RHOiAgIFdXREcgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1NQSTI6ICAgU1BJMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfU1BJMzogICBTUEkzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9VU0FSVDI6IFVTQVJUMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVVNBUlQzOiBVU0FSVDMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1VBUlQ0OiAgVUFSVDQgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1VBUlQ1OiAgVUFSVDUgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0kyQzE6ICAgSTJDMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfSTJDMjogICBJMkMyIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9JMkMzOiAgIEkyQzMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0NBTjE6ICAgQ0FOMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfQ0FOMjogICBDQU4yIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9QV1I6ICAgIFBXUiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfREFDOiAgICBEQUMgY2xvY2sNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCByZXNldC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0FQQjFQZXJpcGhSZXNldENtZCh1aW50MzJfdCBSQ0NfQVBCMVBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0FQQjFfUEVSSVBIKFJDQ19BUEIxUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIFJDQy0+QVBCMVJTVFIgfD0gUkNDX0FQQjFQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QVBCMVJTVFIgJj0gflJDQ19BUEIxUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGb3JjZXMgb3IgcmVsZWFzZXMgSGlnaCBTcGVlZCBBUEIgKEFQQjIpIHBlcmlwaGVyYWwgcmVzZXQuDQorICAqIEBwYXJhbSAgUkNDX0FQQjJQZXJpcGg6IHNwZWNpZmllcyB0aGUgQVBCMiBwZXJpcGhlcmFsIHRvIHJlc2V0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVElNMTogICBUSU0xIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9USU04OiAgIFRJTTggY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1VTQVJUMTogVVNBUlQxIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9VU0FSVDY6IFVTQVJUNiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfQURDMTogICBBREMxIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9BREMyOiAgIEFEQzIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX0FEQzM6ICAgQURDMyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfU0RJTzogICBTRElPIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9TUEkxOiAgIFNQSTEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1NZU0NGRzogU1lTQ0ZHIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9USU05OiAgIFRJTTkgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1RJTTEwOiAgVElNMTAgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1RJTTExOiAgVElNMTEgY2xvY2sNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCByZXNldC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0FQQjJQZXJpcGhSZXNldENtZCh1aW50MzJfdCBSQ0NfQVBCMlBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0FQQjJfUkVTRVRfUEVSSVBIKFJDQ19BUEIyUGVyaXBoKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIFJDQy0+QVBCMlJTVFIgfD0gUkNDX0FQQjJQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QVBCMlJTVFIgJj0gflJDQ19BUEIyUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBBSEIxIHBlcmlwaGVyYWwgY2xvY2sgZHVyaW5nIExvdyBQb3dlciAoU2xlZXApIG1vZGUuDQorICAqIEBub3RlICAgUGVyaXBoZXJhbCBjbG9jayBnYXRpbmcgaW4gU0xFRVAgbW9kZSBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyIHJlZHVjZQ0KKyAgKiAgICAgICAgIHBvd2VyIGNvbnN1bXB0aW9uLg0KKyAgKiBAbm90ZSAgIEFmdGVyIHdha2V1cCBmcm9tIFNMRUVQIG1vZGUsIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIGVuYWJsZWQgYWdhaW4uDQorICAqIEBub3RlICAgQnkgZGVmYXVsdCwgYWxsIHBlcmlwaGVyYWwgY2xvY2tzIGFyZSBlbmFibGVkIGR1cmluZyBTTEVFUCBtb2RlLg0KKyAgKiBAcGFyYW0gIFJDQ19BSEJQZXJpcGg6IHNwZWNpZmllcyB0aGUgQUhCMSBwZXJpcGhlcmFsIHRvIGdhdGVzIGl0cyBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9BOiAgICAgICBHUElPQSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0I6ICAgICAgIEdQSU9CIGNsb2NrIA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0M6ICAgICAgIEdQSU9DIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPRDogICAgICAgR1BJT0QgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9FOiAgICAgICBHUElPRSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0Y6ICAgICAgIEdQSU9GIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9HUElPRzogICAgICAgR1BJT0cgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0dQSU9HOiAgICAgICBHUElPRyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfR1BJT0k6ICAgICAgIEdQSU9JIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9DUkM6ICAgICAgICAgQ1JDIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9CS1BTUkFNOiAgICAgQktQU1JBTSBpbnRlcmZhY2UgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX0RNQTE6ICAgICAgICBETUExIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMVBlcmlwaF9ETUEyOiAgICAgICAgRE1BMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRVRIX01BQzogICAgIEV0aGVybmV0IE1BQyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRVRIX01BQ19UeDogIEV0aGVybmV0IFRyYW5zbWlzc2lvbiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRVRIX01BQ19SeDogIEV0aGVybmV0IFJlY2VwdGlvbiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfRVRIX01BQ19QVFA6IEV0aGVybmV0IFBUUCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjFQZXJpcGhfT1RHX0hTOiAgICAgIFVTQiBPVEcgSFMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIxUGVyaXBoX09UR19IU19VTFBJOiBVU0IgT1RHIEhTIFVMUEkgY2xvY2sNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgcGVyaXBoZXJhbCBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUkNDX0FIQjFQZXJpcGhDbG9ja0xQTW9kZUNtZCh1aW50MzJfdCBSQ0NfQUhCMVBlcmlwaCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0FIQjFfTFBNT0RFX1BFUklQSChSQ0NfQUhCMVBlcmlwaCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFIQjFMUEVOUiB8PSBSQ0NfQUhCMVBlcmlwaDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgUkNDLT5BSEIxTFBFTlIgJj0gflJDQ19BSEIxUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBBSEIyIHBlcmlwaGVyYWwgY2xvY2sgZHVyaW5nIExvdyBQb3dlciAoU2xlZXApIG1vZGUuDQorICAqIEBub3RlICAgUGVyaXBoZXJhbCBjbG9jayBnYXRpbmcgaW4gU0xFRVAgbW9kZSBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyIHJlZHVjZQ0KKyAgKiAgICAgICAgICAgcG93ZXIgY29uc3VtcHRpb24uDQorICAqIEBub3RlICAgQWZ0ZXIgd2FrZXVwIGZyb20gU0xFRVAgbW9kZSwgdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgZW5hYmxlZCBhZ2Fpbi4NCisgICogQG5vdGUgICBCeSBkZWZhdWx0LCBhbGwgcGVyaXBoZXJhbCBjbG9ja3MgYXJlIGVuYWJsZWQgZHVyaW5nIFNMRUVQIG1vZGUuDQorICAqIEBwYXJhbSAgUkNDX0FIQlBlcmlwaDogc3BlY2lmaWVzIHRoZSBBSEIyIHBlcmlwaGVyYWwgdG8gZ2F0ZXMgaXRzIGNsb2NrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjJQZXJpcGhfRENNSTogICBEQ01JIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQUhCMlBlcmlwaF9DUllQOiAgIENSWVAgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIyUGVyaXBoX0hBU0g6ICAgSEFTSCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FIQjJQZXJpcGhfUk5HOiAgICBSTkcgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BSEIyUGVyaXBoX09UR19GUzogVVNCIE9URyBGUyBjbG9jayAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BSEIyUGVyaXBoQ2xvY2tMUE1vZGVDbWQodWludDMyX3QgUkNDX0FIQjJQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BSEIyX1BFUklQSChSQ0NfQUhCMlBlcmlwaCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFIQjJMUEVOUiB8PSBSQ0NfQUhCMlBlcmlwaDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgUkNDLT5BSEIyTFBFTlIgJj0gflJDQ19BSEIyUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBBSEIzIHBlcmlwaGVyYWwgY2xvY2sgZHVyaW5nIExvdyBQb3dlciAoU2xlZXApIG1vZGUuDQorICAqIEBub3RlICAgUGVyaXBoZXJhbCBjbG9jayBnYXRpbmcgaW4gU0xFRVAgbW9kZSBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyIHJlZHVjZQ0KKyAgKiAgICAgICAgIHBvd2VyIGNvbnN1bXB0aW9uLg0KKyAgKiBAbm90ZSAgIEFmdGVyIHdha2V1cCBmcm9tIFNMRUVQIG1vZGUsIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIGVuYWJsZWQgYWdhaW4uDQorICAqIEBub3RlICAgQnkgZGVmYXVsdCwgYWxsIHBlcmlwaGVyYWwgY2xvY2tzIGFyZSBlbmFibGVkIGR1cmluZyBTTEVFUCBtb2RlLg0KKyAgKiBAcGFyYW0gIFJDQ19BSEJQZXJpcGg6IHNwZWNpZmllcyB0aGUgQUhCMyBwZXJpcGhlcmFsIHRvIGdhdGVzIGl0cyBjbG9jay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZTogUkNDX0FIQjNQZXJpcGhfRlNNQw0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBwZXJpcGhlcmFsIGNsb2NrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfQUhCM1BlcmlwaENsb2NrTFBNb2RlQ21kKHVpbnQzMl90IFJDQ19BSEIzUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SQ0NfQUhCM19QRVJJUEgoUkNDX0FIQjNQZXJpcGgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgUkNDLT5BSEIzTFBFTlIgfD0gUkNDX0FIQjNQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QUhCM0xQRU5SICY9IH5SQ0NfQUhCM1BlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgQVBCMSBwZXJpcGhlcmFsIGNsb2NrIGR1cmluZyBMb3cgUG93ZXIgKFNsZWVwKSBtb2RlLg0KKyAgKiBAbm90ZSAgIFBlcmlwaGVyYWwgY2xvY2sgZ2F0aW5nIGluIFNMRUVQIG1vZGUgY2FuIGJlIHVzZWQgdG8gZnVydGhlciByZWR1Y2UNCisgICogICAgICAgICBwb3dlciBjb25zdW1wdGlvbi4NCisgICogQG5vdGUgICBBZnRlciB3YWtldXAgZnJvbSBTTEVFUCBtb2RlLCB0aGUgcGVyaXBoZXJhbCBjbG9jayBpcyBlbmFibGVkIGFnYWluLg0KKyAgKiBAbm90ZSAgIEJ5IGRlZmF1bHQsIGFsbCBwZXJpcGhlcmFsIGNsb2NrcyBhcmUgZW5hYmxlZCBkdXJpbmcgU0xFRVAgbW9kZS4NCisgICogQHBhcmFtICBSQ0NfQVBCMVBlcmlwaDogc3BlY2lmaWVzIHRoZSBBUEIxIHBlcmlwaGVyYWwgdG8gZ2F0ZXMgaXRzIGNsb2NrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNMjogICBUSU0yIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU0zOiAgIFRJTTMgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1RJTTQ6ICAgVElNNCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNNTogICBUSU01IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9USU02OiAgIFRJTTYgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1RJTTc6ICAgVElNNyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNMTI6ICBUSU0xMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNMTM6ICBUSU0xMyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVElNMTQ6ICBUSU0xNCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfV1dERzogICBXV0RHIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9TUEkyOiAgIFNQSTIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1NQSTM6ICAgU1BJMyBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfVVNBUlQyOiBVU0FSVDIgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX1VTQVJUMzogVVNBUlQzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9VQVJUNDogIFVBUlQ0IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9VQVJUNTogIFVBUlQ1IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9JMkMxOiAgIEkyQzEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0kyQzI6ICAgSTJDMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfSTJDMzogICBJMkMzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMVBlcmlwaF9DQU4xOiAgIENBTjEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0NBTjI6ICAgQ0FOMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjFQZXJpcGhfUFdSOiAgICBQV1IgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIxUGVyaXBoX0RBQzogICAgREFDIGNsb2NrDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIHBlcmlwaGVyYWwgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19BUEIxUGVyaXBoQ2xvY2tMUE1vZGVDbWQodWludDMyX3QgUkNDX0FQQjFQZXJpcGgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19BUEIxX1BFUklQSChSQ0NfQVBCMVBlcmlwaCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSQ0MtPkFQQjFMUEVOUiB8PSBSQ0NfQVBCMVBlcmlwaDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgUkNDLT5BUEIxTFBFTlIgJj0gflJDQ19BUEIxUGVyaXBoOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBBUEIyIHBlcmlwaGVyYWwgY2xvY2sgZHVyaW5nIExvdyBQb3dlciAoU2xlZXApIG1vZGUuDQorICAqIEBub3RlICAgUGVyaXBoZXJhbCBjbG9jayBnYXRpbmcgaW4gU0xFRVAgbW9kZSBjYW4gYmUgdXNlZCB0byBmdXJ0aGVyIHJlZHVjZQ0KKyAgKiAgICAgICAgIHBvd2VyIGNvbnN1bXB0aW9uLg0KKyAgKiBAbm90ZSAgIEFmdGVyIHdha2V1cCBmcm9tIFNMRUVQIG1vZGUsIHRoZSBwZXJpcGhlcmFsIGNsb2NrIGlzIGVuYWJsZWQgYWdhaW4uDQorICAqIEBub3RlICAgQnkgZGVmYXVsdCwgYWxsIHBlcmlwaGVyYWwgY2xvY2tzIGFyZSBlbmFibGVkIGR1cmluZyBTTEVFUCBtb2RlLg0KKyAgKiBAcGFyYW0gIFJDQ19BUEIyUGVyaXBoOiBzcGVjaWZpZXMgdGhlIEFQQjIgcGVyaXBoZXJhbCB0byBnYXRlcyBpdHMgY2xvY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9USU0xOiAgIFRJTTEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1RJTTg6ICAgVElNOCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVVNBUlQxOiBVU0FSVDEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1VTQVJUNjogVVNBUlQ2IGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9BREMxOiAgIEFEQzEgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX0FEQzI6ICAgQURDMiBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfQURDMzogICBBREMzIGNsb2NrDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfQVBCMlBlcmlwaF9TRElPOiAgIFNESU8gY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1NQSTE6ICAgU1BJMSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfU1lTQ0ZHOiBTWVNDRkcgY2xvY2sNCisgICogICAgICAgICAgICBAYXJnIFJDQ19BUEIyUGVyaXBoX1RJTTk6ICAgVElNOSBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVElNMTA6ICBUSU0xMCBjbG9jaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0FQQjJQZXJpcGhfVElNMTE6ICBUSU0xMSBjbG9jaw0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBwZXJpcGhlcmFsIGNsb2NrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSQ0NfQVBCMlBlcmlwaENsb2NrTFBNb2RlQ21kKHVpbnQzMl90IFJDQ19BUEIyUGVyaXBoLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SQ0NfQVBCMl9QRVJJUEgoUkNDX0FQQjJQZXJpcGgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgUkNDLT5BUEIyTFBFTlIgfD0gUkNDX0FQQjJQZXJpcGg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFJDQy0+QVBCMkxQRU5SICY9IH5SQ0NfQVBCMlBlcmlwaDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUkNDX0dyb3VwNCBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgUkNDIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgUkNDX0lUOiBzcGVjaWZpZXMgdGhlIFJDQyBpbnRlcnJ1cHQgc291cmNlcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX0xTSVJEWTogTFNJIHJlYWR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX0xTRVJEWTogTFNFIHJlYWR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX0hTSVJEWTogSFNJIHJlYWR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX0hTRVJEWTogSFNFIHJlYWR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX1BMTFJEWTogbWFpbiBQTEwgcmVhZHkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSVRfUExMSTJTUkRZOiBQTExJMlMgcmVhZHkgaW50ZXJydXB0ICANCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgUkNDIGludGVycnVwdHMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19JVENvbmZpZyh1aW50OF90IFJDQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0lUKFJDQ19JVCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBQZXJmb3JtIEJ5dGUgYWNjZXNzIHRvIFJDQ19DSVJbMTQ6OF0gYml0cyB0byBlbmFibGUgdGhlIHNlbGVjdGVkIGludGVycnVwdHMgKi8NCisgICAgKihfX0lPIHVpbnQ4X3QgKikgQ0lSX0JZVEUyX0FERFJFU1MgfD0gUkNDX0lUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBQZXJmb3JtIEJ5dGUgYWNjZXNzIHRvIFJDQ19DSVJbMTQ6OF0gYml0cyB0byBkaXNhYmxlIHRoZSBzZWxlY3RlZCBpbnRlcnJ1cHRzICovDQorICAgICooX19JTyB1aW50OF90ICopIENJUl9CWVRFMl9BRERSRVNTICY9ICh1aW50OF90KX5SQ0NfSVQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUkNDIGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBSQ0NfRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0ZMQUdfSFNJUkRZOiBIU0kgb3NjaWxsYXRvciBjbG9jayByZWFkeQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0ZMQUdfSFNFUkRZOiBIU0Ugb3NjaWxsYXRvciBjbG9jayByZWFkeQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0ZMQUdfUExMUkRZOiBtYWluIFBMTCBjbG9jayByZWFkeQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0ZMQUdfUExMSTJTUkRZOiBQTExJMlMgY2xvY2sgcmVhZHkNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX0xTRVJEWTogTFNFIG9zY2lsbGF0b3IgY2xvY2sgcmVhZHkNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX0xTSVJEWTogTFNJIG9zY2lsbGF0b3IgY2xvY2sgcmVhZHkNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX0JPUlJTVDogUE9SL1BEUiBvciBCT1IgcmVzZXQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX1BJTlJTVDogUGluIHJlc2V0DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfRkxBR19QT1JSU1Q6IFBPUi9QRFIgcmVzZXQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX1NGVFJTVDogU29mdHdhcmUgcmVzZXQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX0lXREdSU1Q6IEluZGVwZW5kZW50IFdhdGNoZG9nIHJlc2V0DQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfRkxBR19XV0RHUlNUOiBXaW5kb3cgV2F0Y2hkb2cgcmVzZXQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19GTEFHX0xQV1JSU1Q6IExvdyBQb3dlciByZXNldA0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgUkNDX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgUkNDX0dldEZsYWdTdGF0dXModWludDhfdCBSQ0NfRkxBRykNCit7DQorICB1aW50MzJfdCB0bXAgPSAwOw0KKyAgdWludDMyX3Qgc3RhdHVzcmVnID0gMDsNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19GTEFHKFJDQ19GTEFHKSk7DQorDQorICAvKiBHZXQgdGhlIFJDQyByZWdpc3RlciBpbmRleCAqLw0KKyAgdG1wID0gUkNDX0ZMQUcgPj4gNTsNCisgIGlmICh0bXAgPT0gMSkgICAgICAgICAgICAgICAvKiBUaGUgZmxhZyB0byBjaGVjayBpcyBpbiBDUiByZWdpc3RlciAqLw0KKyAgew0KKyAgICBzdGF0dXNyZWcgPSBSQ0MtPkNSOw0KKyAgfQ0KKyAgZWxzZSBpZiAodG1wID09IDIpICAgICAgICAgIC8qIFRoZSBmbGFnIHRvIGNoZWNrIGlzIGluIEJEQ1IgcmVnaXN0ZXIgKi8NCisgIHsNCisgICAgc3RhdHVzcmVnID0gUkNDLT5CRENSOw0KKyAgfQ0KKyAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGZsYWcgdG8gY2hlY2sgaXMgaW4gQ1NSIHJlZ2lzdGVyICovDQorICB7DQorICAgIHN0YXR1c3JlZyA9IFJDQy0+Q1NSOw0KKyAgfQ0KKw0KKyAgLyogR2V0IHRoZSBmbGFnIHBvc2l0aW9uICovDQorICB0bXAgPSBSQ0NfRkxBRyAmIEZMQUdfTUFTSzsNCisgIGlmICgoc3RhdHVzcmVnICYgKCh1aW50MzJfdCkxIDw8IHRtcCkpICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIC8qIFJldHVybiB0aGUgZmxhZyBzdGF0dXMgKi8NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgUkNDIHJlc2V0IGZsYWdzLg0KKyAgKiAgICAgICAgIFRoZSByZXNldCBmbGFncyBhcmU6IFJDQ19GTEFHX1BJTlJTVCwgUkNDX0ZMQUdfUE9SUlNULCAgUkNDX0ZMQUdfU0ZUUlNULA0KKyAgKiAgICAgICAgIFJDQ19GTEFHX0lXREdSU1QsIFJDQ19GTEFHX1dXREdSU1QsIFJDQ19GTEFHX0xQV1JSU1QNCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19DbGVhckZsYWcodm9pZCkNCit7DQorICAvKiBTZXQgUk1WRiBiaXQgdG8gY2xlYXIgdGhlIHJlc2V0IGZsYWdzICovDQorICBSQ0MtPkNTUiB8PSBSQ0NfQ1NSX1JNVkY7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUkNDIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFJDQ19JVDogc3BlY2lmaWVzIHRoZSBSQ0MgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9MU0lSRFk6IExTSSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9MU0VSRFk6IExTRSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9IU0lSRFk6IEhTSSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9IU0VSRFk6IEhTRSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9QTExSRFk6IG1haW4gUExMIHJlYWR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX1BMTEkyU1JEWTogUExMSTJTIHJlYWR5IGludGVycnVwdCAgDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSVRfQ1NTOiBDbG9jayBTZWN1cml0eSBTeXN0ZW0gaW50ZXJydXB0DQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBSQ0NfSVQgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0lUU3RhdHVzIFJDQ19HZXRJVFN0YXR1cyh1aW50OF90IFJDQ19JVCkNCit7DQorICBJVFN0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUkNDX0dFVF9JVChSQ0NfSVQpKTsNCisNCisgIC8qIENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBSQ0MgaW50ZXJydXB0ICovDQorICBpZiAoKFJDQy0+Q0lSICYgUkNDX0lUKSAhPSAodWludDMyX3QpUkVTRVQpDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIFJDQ19JVCBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIFJDQydzIGludGVycnVwdCBwZW5kaW5nIGJpdHMuDQorICAqIEBwYXJhbSAgUkNDX0lUOiBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdCB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9MU0lSRFk6IExTSSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9MU0VSRFk6IExTRSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9IU0lSRFk6IEhTSSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9IU0VSRFk6IEhTRSByZWFkeSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFJDQ19JVF9QTExSRFk6IG1haW4gUExMIHJlYWR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0lUX1BMTEkyU1JEWTogUExMSTJTIHJlYWR5IGludGVycnVwdCAgDQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSVRfQ1NTOiBDbG9jayBTZWN1cml0eSBTeXN0ZW0gaW50ZXJydXB0DQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJDQ19DbGVhcklUUGVuZGluZ0JpdCh1aW50OF90IFJDQ19JVCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JDQ19DTEVBUl9JVChSQ0NfSVQpKTsNCisNCisgIC8qIFBlcmZvcm0gQnl0ZSBhY2Nlc3MgdG8gUkNDX0NJUlsyMzoxNl0gYml0cyB0byBjbGVhciB0aGUgc2VsZWN0ZWQgaW50ZXJydXB0DQorICAgICBwZW5kaW5nIGJpdHMgKi8NCisgICooX19JTyB1aW50OF90ICopIENJUl9CWVRFM19BRERSRVNTID0gUkNDX0lUOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9ybmcuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkODhiMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfcm5nLmMKQEAgLTAsMCArMSw0MDUgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9ybmcuYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICAgKiBAYnJpZWYgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoUk5HKSBwZXJpcGhlcmFsOiAgICAgICAgICAgDQorICAqICAgICAgICAgICAtIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIA0KKyAgKiAgICAgICAgICAgLSBHZXQgMzIgYml0IFJhbmRvbSBudW1iZXIgICAgICANCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCAgICAgICANCisgICogICAgICAgICANCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgIA0KKyAgKiAgICAgICAgICAxLiBFbmFibGUgVGhlIFJORyBjb250cm9sbGVyIGNsb2NrIHVzaW5nIA0KKyAgKiAgICAgICAgICAgIFJDQ19BSEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FIQjJQZXJpcGhfUk5HLCBFTkFCTEUpIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDIuIEFjdGl2YXRlIHRoZSBSTkcgcGVyaXBoZXJhbCB1c2luZyBSTkdfQ21kKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICAzLiBXYWl0IHVudGlsIHRoZSAzMiBiaXQgUmFuZG9tIG51bWJlciBHZW5lcmF0b3IgY29udGFpbnMgYSB2YWxpZCANCisgICogICAgICAgICAgICByYW5kb20gZGF0YSAodXNpbmcgcG9sbGluZy9pbnRlcnJ1cHQgbW9kZSkuIEZvciBtb3JlIGRldGFpbHMsIA0KKyAgKiAgICAgICAgICAgIHJlZmVyIHRvICJJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyIgbW9kdWxlIA0KKyAgKiAgICAgICAgICAgIGRlc2NyaXB0aW9uLg0KKyAgKiAgICAgICAgICAgDQorICAqICAgICAgICAgIDQuIEdldCB0aGUgMzIgYml0IFJhbmRvbSBudW1iZXIgdXNpbmcgUk5HX0dldFJhbmRvbU51bWJlcigpIGZ1bmN0aW9uDQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICA1LiBUbyBnZXQgYW5vdGhlciAzMiBiaXQgUmFuZG9tIG51bWJlciwgZ28gdG8gc3RlcCAzLiAgICAgICANCisgICoNCisgICogICAgICAgICANCisgICogICAgICAgICAgICAgIA0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqICAgICAgICAgDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfcm5nLmgiDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBSTkcgDQorICAqIEBicmllZiBSTkcgZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovIA0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUk5HX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFJOR19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byANCisgICAtIEluaXRpYWxpemUgdGhlIFJORyBwZXJpcGhlcmFsDQorICAgLSBFbmFibGUgb3IgZGlzYWJsZSB0aGUgUk5HIHBlcmlwaGVyYWwNCisgICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRGVpbml0aWFsaXplcyB0aGUgUk5HIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUk5HX0RlSW5pdCh2b2lkKQ0KK3sNCisgIC8qIEVuYWJsZSBSTkcgcmVzZXQgc3RhdGUgKi8NCisgIFJDQ19BSEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FIQjJQZXJpcGhfUk5HLCBFTkFCTEUpOw0KKw0KKyAgLyogUmVsZWFzZSBSTkcgZnJvbSByZXNldCBzdGF0ZSAqLw0KKyAgUkNDX0FIQjJQZXJpcGhSZXNldENtZChSQ0NfQUhCMlBlcmlwaF9STkcsIERJU0FCTEUpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBSTkcgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBSTkcgcGVyaXBoZXJhbC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUk5HX0NtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBSTkcgKi8NCisgICAgUk5HLT5DUiB8PSBSTkdfQ1JfUk5HRU47DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFJORyAqLw0KKyAgICBSTkctPkNSICY9IH5STkdfQ1JfUk5HRU47DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFJOR19Hcm91cDIgR2V0IDMyIGJpdCBSYW5kb20gbnVtYmVyIGZ1bmN0aW9uDQorICogIEBicmllZiAgICBHZXQgMzIgYml0IFJhbmRvbSBudW1iZXIgZnVuY3Rpb24gDQorICoNCisNCitAdmVyYmF0aW0gICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgR2V0IDMyIGJpdCBSYW5kb20gbnVtYmVyIGZ1bmN0aW9uDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgZnVuY3Rpb24gYWxsb3dpbmcgdG8gZ2V0IHRoZSAzMiBiaXQgUmFuZG9tIG51bWJlciAgDQorICANCisgIEBub3RlICBCZWZvcmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHlvdSBoYXZlIHRvIHdhaXQgdGlsbCBEUkRZIGZsYWcgaXMgc2V0LA0KKyAgICAgICAgIHVzaW5nIFJOR19HZXRGbGFnU3RhdHVzKFJOR19GTEFHX0RSRFkpIGZ1bmN0aW9uLiANCisgICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyBhIDMyLWJpdCByYW5kb20gbnVtYmVyLg0KKyAgKiAgIA0KKyAgKiBAbm90ZSAgIEJlZm9yZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24geW91IGhhdmUgdG8gd2FpdCB0aWxsIERSRFkgKGRhdGEgcmVhZHkpDQorICAqICAgICAgICAgZmxhZyBpcyBzZXQsIHVzaW5nIFJOR19HZXRGbGFnU3RhdHVzKFJOR19GTEFHX0RSRFkpIGZ1bmN0aW9uLg0KKyAgKiBAbm90ZSAgIEVhY2ggdGltZSB0aGUgdGhlIFJhbmRvbSBudW1iZXIgZGF0YSBpcyByZWFkICh1c2luZyBSTkdfR2V0UmFuZG9tTnVtYmVyKCkNCisgICogICAgICAgICBmdW5jdGlvbiksIHRoZSBSTkdfRkxBR19EUkRZIGZsYWcgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkLg0KKyAgKiBAbm90ZSAgIEluIHRoZSBjYXNlIG9mIGEgc2VlZCBlcnJvciwgdGhlIGdlbmVyYXRpb24gb2YgcmFuZG9tIG51bWJlcnMgaXMgDQorICAqICAgICAgICAgaW50ZXJydXB0ZWQgZm9yIGFzIGxvbmcgYXMgdGhlIFNFQ1MgYml0IGlzICcxJy4gSWYgYSBudW1iZXIgaXMgDQorICAqICAgICAgICAgYXZhaWxhYmxlIGluIHRoZSBSTkdfRFIgcmVnaXN0ZXIsIGl0IG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBtYXkgDQorICAqICAgICAgICAgbm90IGhhdmUgZW5vdWdoIGVudHJvcHkuIEluIHRoaXMgY2FzZSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gY2xlYXIgdGhlIA0KKyAgKiAgICAgICAgIFNFSVMgYml0KHVzaW5nIFJOR19DbGVhckZsYWcoUk5HX0ZMQUdfU0VDUykgZnVuY3Rpb24pLCB0aGVuIGRpc2FibGUgDQorICAqICAgICAgICAgYW5kIGVuYWJsZSB0aGUgUk5HIHBlcmlwaGVyYWwgKHVzaW5nIFJOR19DbWQoKSBmdW5jdGlvbikgdG8gDQorICAqICAgICAgICAgcmVpbml0aWFsaXplIGFuZCByZXN0YXJ0IHRoZSBSTkcuDQorICAqIEBub3RlICAgSW4gdGhlIGNhc2Ugb2YgYSBjbG9jayBlcnJvciwgdGhlIFJORyBpcyBubyBtb3JlIGFibGUgdG8gZ2VuZXJhdGUgDQorICAqICAgICAgICAgcmFuZG9tIG51bWJlcnMgYmVjYXVzZSB0aGUgUExMNDhDTEsgY2xvY2sgaXMgbm90IGNvcnJlY3QuIFVzZXIgaGF2ZSANCisgICogICAgICAgICB0byBjaGVjayB0aGF0IHRoZSBjbG9jayBjb250cm9sbGVyIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIHRvIHByb3ZpZGUNCisgICogICAgICAgICB0aGUgUk5HIGNsb2NrIGFuZCBjbGVhciB0aGUgQ0VJUyBiaXQgKHVzaW5nIFJOR19DbGVhckZsYWcoUk5HX0ZMQUdfQ0VDUykgDQorICAqICAgICAgICAgZnVuY3Rpb24pIC4gVGhlIGNsb2NrIGVycm9yIGhhcyBubyBpbXBhY3Qgb24gdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIA0KKyAgKiAgICAgICAgIHJhbmRvbSBudW1iZXJzLCBhbmQgdGhlIFJOR19EUiByZWdpc3RlciBjb250ZW50cyBjYW4gYmUgdXNlZC4NCisgICogICAgICAgICANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgMzItYml0IHJhbmRvbSBudW1iZXIuDQorICAqLw0KK3VpbnQzMl90IFJOR19HZXRSYW5kb21OdW1iZXIodm9pZCkNCit7DQorICAvKiBSZXR1cm4gdGhlIDMyIGJpdCByYW5kb20gbnVtYmVyIGZyb20gdGhlIERSIHJlZ2lzdGVyICovDQorICByZXR1cm4gUk5HLT5EUjsNCit9DQorDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUk5HX0dyb3VwMyBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSB0aGUgUk5HIEludGVycnVwdHMgYW5kIA0KKyAgdG8gZ2V0IHRoZSBzdGF0dXMgYW5kIGNsZWFyIGZsYWdzIGFuZCBJbnRlcnJ1cHRzIHBlbmRpbmcgYml0cy4NCisgIA0KKyAgVGhlIFJORyBwcm92aWRlcyAzIEludGVycnVwdHMgc291cmNlcyBhbmQgMyBGbGFnczoNCisgIA0KKyAgRmxhZ3MgOg0KKyAgLS0tLS0tLS0tLSANCisgICAgIDEuIFJOR19GTEFHX0RSRFkgOiAgSW4gdGhlIGNhc2Ugb2YgdGhlIFJOR19EUiByZWdpc3RlciBjb250YWlucyB2YWxpZCANCisgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIGRhdGEuIGl0IGlzIGNsZWFyZWQgYnkgcmVhZGluZyB0aGUgdmFsaWQgZGF0YSANCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVzaW5nIFJOR19HZXRSYW5kb21OdW1iZXIoKSBmdW5jdGlvbikuDQorDQorICAgICAyLiBSTkdfRkxBR19DRUNTIDogSW4gdGhlIGNhc2Ugb2YgYSBzZWVkIGVycm9yIGRldGVjdGlvbi4gDQorICAgICAgDQorICAgICAzLiBSTkdfRkxBR19TRUNTIDogSW4gdGhlIGNhc2Ugb2YgYSBjbG9jayBlcnJvciBkZXRlY3Rpb24uDQorICAgICAgICAgICAgICANCisNCisgIEludGVycnVwdHMgOg0KKyAgLS0tLS0tLS0tLS0tDQorICAgaWYgZW5hYmxlZCwgYW4gUk5HIGludGVycnVwdCBpcyBwZW5kaW5nIDoNCisgICAgDQorICAgMS4gIEluIHRoZSBjYXNlIG9mIHRoZSBSTkdfRFIgcmVnaXN0ZXIgY29udGFpbnMgdmFsaWQgcmFuZG9tIGRhdGEuIA0KKyAgICAgICBUaGlzIGludGVycnVwdCBzb3VyY2UgaXMgY2xlYXJlZCBvbmNlIHRoZSBSTkdfRFIgcmVnaXN0ZXIgaGFzIGJlZW4gcmVhZCANCisgICAgICAgKHVzaW5nIFJOR19HZXRSYW5kb21OdW1iZXIoKSBmdW5jdGlvbikgdW50aWwgYSBuZXcgdmFsaWQgdmFsdWUgaXMgDQorICAgICAgIGNvbXB1dGVkLiANCisgICANCisgICBvciANCisgICAyLiBJbiB0aGUgY2FzZSBvZiBhIHNlZWQgZXJyb3IgOiBPbmUgb2YgdGhlIGZvbGxvd2luZyBmYXVsdHkgc2VxdWVuY2VzIGhhcyANCisgICAgICBiZWVuIGRldGVjdGVkOg0KKyAgICAgIC0gTW9yZSB0aGFuIDY0IGNvbnNlY3V0aXZlIGJpdHMgYXQgdGhlIHNhbWUgdmFsdWUgKDAgb3IgMSkNCisgICAgICAtIE1vcmUgdGhhbiAzMiBjb25zZWN1dGl2ZSBhbHRlcm5hbmNlIG9mIDAgYW5kIDEgKDAxMDEwMTAxMDEuLi4wMSkNCisgICAgICBUaGlzIGludGVycnVwdCBzb3VyY2UgaXMgY2xlYXJlZCB1c2luZyBSTkdfQ2xlYXJJVFBlbmRpbmdCaXQoUk5HX0lUX1NFSSkNCisgICAgICBmdW5jdGlvbi4NCisgICANCisgICBvcg0KKyAgIDMuIEluIHRoZSBjYXNlIG9mIGEgY2xvY2sgZXJyb3IgOiB0aGUgUExMNDhDTEsgKFJORyBwZXJpcGhlcmFsIGNsb2NrIHNvdXJjZSkgDQorICAgICAgd2FzIG5vdCBjb3JyZWN0bHkgZGV0ZWN0ZWQgKGZQTEw0OENMSzwgZkhDTEsvMTYpLg0KKyAgICAgIFRoaXMgaW50ZXJydXB0IHNvdXJjZSBpcyBjbGVhcmVkIHVzaW5nIFJOR19DbGVhcklUUGVuZGluZ0JpdChSTkdfSVRfQ0VJKQ0KKyAgICAgIGZ1bmN0aW9uLg0KKyAgICAgIEBub3RlIEluIHRoaXMgY2FzZSwgVXNlciBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGNsb2NrIGNvbnRyb2xsZXIgaXMgDQorICAgICAgICAgICAgY29ycmVjdGx5IGNvbmZpZ3VyZWQgdG8gcHJvdmlkZSB0aGUgUk5HIGNsb2NrLiANCisNCisgIE1hbmFnaW5nIHRoZSBSTkcgY29udHJvbGxlciBldmVudHMgOg0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KKyAgVGhlIHVzZXIgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIG1vZGUgd2lsbCBiZSB1c2VkIGluIGhpcyBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgDQorICB0aGUgUk5HIGNvbnRyb2xsZXIgZXZlbnRzOiBQb2xsaW5nIG1vZGUgb3IgSW50ZXJydXB0IG1vZGUuDQorICANCisgIDEuICBJbiB0aGUgUG9sbGluZyBNb2RlIGl0IGlzIGFkdmlzZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgICAgIC0gUk5HX0dldEZsYWdTdGF0dXMoKSA6IHRvIGNoZWNrIGlmIGZsYWdzIGV2ZW50cyBvY2N1ci4gDQorICAgICAgLSBSTkdfQ2xlYXJGbGFnKCkgICAgIDogdG8gY2xlYXIgdGhlIGZsYWdzIGV2ZW50cy4NCisgIA0KKyAgQG5vdGUgUk5HX0ZMQUdfRFJEWSBjYW4gbm90IGJlIGNsZWFyZWQgYnkgUk5HX0NsZWFyRmxhZygpLiBpdCBpcyBjbGVhcmVkIG9ubHkgDQorICAgICAgICBieSByZWFkaW5nIHRoZSBSYW5kb20gbnVtYmVyIGRhdGEuICAgICAgDQorICANCisgIDIuICBJbiB0aGUgSW50ZXJydXB0IE1vZGUgaXQgaXMgYWR2aXNlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQorICAgICAgLSBSTkdfSVRDb25maWcoKSAgICAgICA6IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgc291cmNlLg0KKyAgICAgIC0gUk5HX0dldElUU3RhdHVzKCkgICAgOiB0byBjaGVjayBpZiBJbnRlcnJ1cHQgb2NjdXJzLg0KKyAgICAgIC0gUk5HX0NsZWFySVRQZW5kaW5nQml0KCkgOiB0byBjbGVhciB0aGUgSW50ZXJydXB0IHBlbmRpbmcgQml0IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvcnJlc3BvbmRpbmcgRmxhZykuIA0KKyAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLyANCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBSTkcgaW50ZXJydXB0Lg0KKyAgKiBAbm90ZSAgIFRoZSBSTkcgcHJvdmlkZXMgMyBpbnRlcnJ1cHQgc291cmNlcywNCisgICogICAgICAgICAgIC0gQ29tcHV0ZWQgZGF0YSBpcyByZWFkeSBldmVudCAoRFJEWSksIGFuZCAgICAgICAgICAgDQorICAqICAgICAgICAgICAtIFNlZWQgZXJyb3IgSW50ZXJydXB0IChTRUkpIGFuZCANCisgICogICAgICAgICAgIC0gQ2xvY2sgZXJyb3IgSW50ZXJydXB0IChDRUkpLCANCisgICogICAgICAgICBhbGwgdGhlc2UgaW50ZXJydXB0cyBzb3VyY2VzIGFyZSBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIElFIGJpdCBpbiANCisgICogICAgICAgICBDUiByZWdpc3Rlci4gSG93ZXZlciwgZWFjaCBpbnRlcnJ1cHQgaGF2ZSBpdHMgc3BlY2lmaWMgc3RhdHVzIGJpdA0KKyAgKiAgICAgICAgIChzZWUgUk5HX0dldElUU3RhdHVzKCkgZnVuY3Rpb24pIGFuZCBjbGVhciBiaXQgZXhjZXB0IHRoZSBEUkRZIGV2ZW50DQorICAqICAgICAgICAgKHNlZSBSTkdfQ2xlYXJJVFBlbmRpbmdCaXQoKSBmdW5jdGlvbikuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgUk5HIGludGVycnVwdC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUk5HX0lUQ29uZmlnKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIFJORyBpbnRlcnJ1cHQgKi8NCisgICAgUk5HLT5DUiB8PSBSTkdfQ1JfSUU7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFJORyBpbnRlcnJ1cHQgKi8NCisgICAgUk5HLT5DUiAmPSB+Uk5HX0NSX0lFOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIFJORyBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgUk5HX0ZMQUc6IHNwZWNpZmllcyB0aGUgUk5HIGZsYWcgdG8gY2hlY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSTkdfRkxBR19EUkRZOiBEYXRhIFJlYWR5IGZsYWcuDQorICAqICAgICAgICAgICAgQGFyZyBSTkdfRkxBR19DRUNTOiBDbG9jayBFcnJvciBDdXJyZW50IGZsYWcuDQorICAqICAgICAgICAgICAgQGFyZyBSTkdfRkxBR19TRUNTOiBTZWVkIEVycm9yIEN1cnJlbnQgZmxhZy4NCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFJOR19GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIFJOR19HZXRGbGFnU3RhdHVzKHVpbnQ4X3QgUk5HX0ZMQUcpDQorew0KKyAgRmxhZ1N0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUk5HX0dFVF9GTEFHKFJOR19GTEFHKSk7DQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgUk5HIGZsYWcgKi8NCisgIGlmICgoUk5HLT5TUiAmIFJOR19GTEFHKSAhPSAodWludDhfdClSRVNFVCkNCisgIHsNCisgICAgLyogUk5HX0ZMQUcgaXMgc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogUk5HX0ZMQUcgaXMgcmVzZXQgKi8NCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIFJOR19GTEFHIHN0YXR1cyAqLw0KKyAgcmV0dXJuICBiaXRzdGF0dXM7DQorfQ0KKw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgUk5HIGZsYWdzLg0KKyAgKiBAcGFyYW0gIFJOR19GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUk5HX0ZMQUdfQ0VDUzogQ2xvY2sgRXJyb3IgQ3VycmVudCBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgUk5HX0ZMQUdfU0VDUzogU2VlZCBFcnJvciBDdXJyZW50IGZsYWcuDQorICAqIEBub3RlICAgUk5HX0ZMQUdfRFJEWSBjYW4gbm90IGJlIGNsZWFyZWQgYnkgUk5HX0NsZWFyRmxhZygpIGZ1bmN0aW9uLiANCisgICogICAgICAgICBUaGlzIGZsYWcgaXMgY2xlYXJlZCBvbmx5IGJ5IHJlYWRpbmcgdGhlIFJhbmRvbSBudW1iZXIgZGF0YSAodXNpbmcgDQorICAqICAgICAgICAgUk5HX0dldFJhbmRvbU51bWJlcigpIGZ1bmN0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUk5HX0NsZWFyRmxhZyh1aW50OF90IFJOR19GTEFHKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUk5HX0NMRUFSX0ZMQUcoUk5HX0ZMQUcpKTsNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBSTkcgZmxhZ3MgKi8NCisgIFJORy0+U1IgPSB+KHVpbnQzMl90KSgoKHVpbnQzMl90KVJOR19GTEFHKSA8PCA0KTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBSTkcgaW50ZXJydXB0IGhhcyBvY2N1cnJlZCBvciBub3QuDQorICAqIEBwYXJhbSAgUk5HX0lUOiBzcGVjaWZpZXMgdGhlIFJORyBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUk5HX0lUX0NFSTogQ2xvY2sgRXJyb3IgSW50ZXJydXB0Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgUk5HX0lUX1NFSTogU2VlZCBFcnJvciBJbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgUk5HX0lUIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBSTkdfR2V0SVRTdGF0dXModWludDhfdCBSTkdfSVQpDQorew0KKyAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JOR19HRVRfSVQoUk5HX0lUKSk7DQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgUk5HIGludGVycnVwdCAqLw0KKyAgaWYgKChSTkctPlNSICYgUk5HX0lUKSAhPSAodWludDhfdClSRVNFVCkNCisgIHsNCisgICAgLyogUk5HX0lUIGlzIHNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFJOR19JVCBpcyByZXNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIC8qIFJldHVybiB0aGUgUk5HX0lUIHN0YXR1cyAqLw0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBSTkcgaW50ZXJydXB0IHBlbmRpbmcgYml0KHMpLg0KKyAgKiBAcGFyYW0gIFJOR19JVDogc3BlY2lmaWVzIHRoZSBSTkcgaW50ZXJydXB0IHBlbmRpbmcgYml0KHMpIHRvIGNsZWFyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUk5HX0lUX0NFSTogQ2xvY2sgRXJyb3IgSW50ZXJydXB0Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgUk5HX0lUX1NFSTogU2VlZCBFcnJvciBJbnRlcnJ1cHQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJOR19DbGVhcklUUGVuZGluZ0JpdCh1aW50OF90IFJOR19JVCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JOR19JVChSTkdfSVQpKTsNCisNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBSTkcgaW50ZXJydXB0IHBlbmRpbmcgYml0ICovDQorICBSTkctPlNSID0gKHVpbnQ4X3QpflJOR19JVDsNCit9DQorLyoqDQorICAqIEB9DQorICAqLyANCisgIA0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9ydGMuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjMTFmMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfcnRjLmMKQEAgLTAsMCArMSwyMjQ0IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfcnRjLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUmVhbC1UaW1lIENsb2NrIChSVEMpIHBlcmlwaGVyYWw6DQorICAqICAgICAgICAgICAtIEluaXRpYWxpemF0aW9uDQorICAqICAgICAgICAgICAtIENhbGVuZGFyIChUaW1lIGFuZCBEYXRlKSBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIEFsYXJtcyAoQWxhcm0gQSBhbmQgQWxhcm0gQikgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBXYWtlVXAgVGltZXIgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBEYXlsaWdodCBTYXZpbmcgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBPdXRwdXQgcGluIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gQ29hcnNlIENhbGlicmF0aW9uIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gVGltZVN0YW1wIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gVGFtcGVycyBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIEJhY2t1cCBEYXRhIFJlZ2lzdGVycyBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAtIFJUQyBUYW1wZXIgYW5kIFRpbWVTdGFtcCBQaW5zIFNlbGVjdGlvbiBhbmQgT3V0cHV0IFR5cGUgQ29uZmlnIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKg0KKyAgKiAgQHZlcmJhdGltDQorICAqDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja3VwIERvbWFpbiBPcGVyYXRpbmcgQ29uZGl0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgVGhlIHJlYWwtdGltZSBjbG9jayAoUlRDKSwgdGhlIFJUQyBiYWNrdXAgcmVnaXN0ZXJzLCBhbmQgdGhlIGJhY2t1cCANCisgICogICAgICAgICAgU1JBTSAoQktQIFNSQU0pIGNhbiBiZSBwb3dlcmVkIGZyb20gdGhlIFZCQVQgdm9sdGFnZSB3aGVuIHRoZSBtYWluIA0KKyAgKiAgICAgICAgICBWREQgc3VwcGx5IGlzIHBvd2VyZWQgb2ZmLg0KKyAgKiAgICAgICAgICBUbyByZXRhaW4gdGhlIGNvbnRlbnQgb2YgdGhlIFJUQyBiYWNrdXAgcmVnaXN0ZXJzLCBiYWNrdXAgU1JBTSwgDQorICAqICAgICAgICAgIGFuZCBzdXBwbHkgdGhlIFJUQyB3aGVuIFZERCBpcyB0dXJuZWQgb2ZmLCBWQkFUIHBpbiBjYW4gYmUgY29ubmVjdGVkIA0KKyAgKiAgICAgICAgICB0byBhbiBvcHRpb25hbCBzdGFuZGJ5IHZvbHRhZ2Ugc3VwcGxpZWQgYnkgYSBiYXR0ZXJ5IG9yIGJ5IGFub3RoZXIgDQorICAqICAgICAgICAgIHNvdXJjZS4NCisgICoNCisgICogICAgICAgICAgVG8gYWxsb3cgdGhlIFJUQyB0byBvcGVyYXRlIGV2ZW4gd2hlbiB0aGUgbWFpbiBkaWdpdGFsIHN1cHBseSAoVkREKSANCisgICogICAgICAgICAgaXMgdHVybmVkIG9mZiwgdGhlIFZCQVQgcGluIHBvd2VycyB0aGUgZm9sbG93aW5nIGJsb2NrczoNCisgICogICAgICAgICAgICAxIC0gVGhlIFJUQw0KKyAgKiAgICAgICAgICAgIDIgLSBUaGUgTFNFIG9zY2lsbGF0b3INCisgICogICAgICAgICAgICAzIC0gVGhlIGJhY2t1cCBTUkFNIHdoZW4gdGhlIGxvdyBwb3dlciBiYWNrdXAgcmVndWxhdG9yIGlzIGVuYWJsZWQNCisgICogICAgICAgICAgICA0IC0gUEMxMyB0byBQQzE1IEkvT3MsIHBsdXMgUEk4IEkvTyAod2hlbiBhdmFpbGFibGUpDQorICAqDQorICAqICAgICAgICAgIFdoZW4gdGhlIGJhY2t1cCBkb21haW4gaXMgc3VwcGxpZWQgYnkgVkREIChhbmFsb2cgc3dpdGNoIGNvbm5lY3RlZCANCisgICogICAgICAgICAgdG8gVkREKSwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZToNCisgICogICAgICAgICAgICAxIC0gUEMxNCBhbmQgUEMxNSBjYW4gYmUgdXNlZCBhcyBlaXRoZXIgR1BJTyBvciBMU0UgcGlucw0KKyAgKiAgICAgICAgICAgIDIgLSBQQzEzIGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMSBwaW4NCisgICogICAgICAgICAgICAzIC0gUEk4IGNhbiBiZSB1c2VkIGFzIGEgR1BJTyBvciBhcyB0aGUgUlRDX0FGMiBwaW4NCisgICoNCisgICogICAgICAgICAgV2hlbiB0aGUgYmFja3VwIGRvbWFpbiBpcyBzdXBwbGllZCBieSBWQkFUIChhbmFsb2cgc3dpdGNoIGNvbm5lY3RlZCANCisgICogICAgICAgICAgdG8gVkJBVCBiZWNhdXNlIFZERCBpcyBub3QgcHJlc2VudCksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGU6DQorICAqICAgICAgICAgICAgMSAtIFBDMTQgYW5kIFBDMTUgY2FuIGJlIHVzZWQgYXMgTFNFIHBpbnMgb25seQ0KKyAgKiAgICAgICAgICAgIDIgLSBQQzEzIGNhbiBiZSB1c2VkIGFzIHRoZSBSVENfQUYxIHBpbiANCisgICogICAgICAgICAgICAzIC0gUEk4IGNhbiBiZSB1c2VkIGFzIHRoZSBSVENfQUYyIHBpbg0KKyAgKg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja3VwIERvbWFpbiBSZXNldA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgIFRoZSBiYWNrdXAgZG9tYWluIHJlc2V0IHNldHMgYWxsIFJUQyByZWdpc3RlcnMgYW5kIHRoZSBSQ0NfQkRDUiANCisgICogICAgICAgICAgcmVnaXN0ZXIgdG8gdGhlaXIgcmVzZXQgdmFsdWVzLiBUaGUgQktQU1JBTSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhpcw0KKyAgKiAgICAgICAgICByZXNldC4gVGhlIG9ubHkgd2F5IG9mIHJlc2V0dGluZyB0aGUgQktQU1JBTSBpcyB0aHJvdWdoIHRoZSBGbGFzaCANCisgICogICAgICAgICAgaW50ZXJmYWNlIGJ5IHJlcXVlc3RpbmcgYSBwcm90ZWN0aW9uIGxldmVsIGNoYW5nZSBmcm9tIDEgdG8gMC4NCisgICogICAgICAgICAgQSBiYWNrdXAgZG9tYWluIHJlc2V0IGlzIGdlbmVyYXRlZCB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cw0KKyAgKiAgICAgICAgICBvY2N1cnM6DQorICAqICAgICAgICAgICAgMSAtIFNvZnR3YXJlIHJlc2V0LCB0cmlnZ2VyZWQgYnkgc2V0dGluZyB0aGUgQkRSU1QgYml0IGluIHRoZSANCisgICogICAgICAgICAgICAgICAgUkNDIEJhY2t1cCBkb21haW4gY29udHJvbCByZWdpc3RlciAoUkNDX0JEQ1IpLiBZb3UgY2FuIHVzZSB0aGUNCisgICogICAgICAgICAgICAgICAgUkNDX0JhY2t1cFJlc2V0Q21kKCkuDQorICAqICAgICAgICAgICAgMiAtIFZERCBvciBWQkFUIHBvd2VyIG9uLCBpZiBib3RoIHN1cHBsaWVzIGhhdmUgcHJldmlvdXNseSBiZWVuDQorICAqICAgICAgICAgICAgICAgIHBvd2VyZWQgb2ZmLg0KKyAgKg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrdXAgRG9tYWluIEFjY2Vzcw0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgIEFmdGVyIHJlc2V0LCB0aGUgYmFja3VwIGRvbWFpbiAoUlRDIHJlZ2lzdGVycywgUlRDIGJhY2t1cCBkYXRhIA0KKyAgKiAgICAgICAgICByZWdpc3RlcnMgYW5kIGJhY2t1cCBTUkFNKSBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBwb3NzaWJsZSB1bndhbnRlZCANCisgICogICAgICAgICAgd3JpdGUgYWNjZXNzZXMuIA0KKyAgKiAgICAgICAgICBUbyBlbmFibGUgYWNjZXNzIHRvIHRoZSBSVEMgRG9tYWluIGFuZCBSVEMgcmVnaXN0ZXJzLCBwcm9jZWVkIGFzIGZvbGxvd3M6DQorICAqICAgICAgICAgICAgLSBFbmFibGUgdGhlIFBvd2VyIENvbnRyb2xsZXIgKFBXUikgQVBCMSBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgdGhlDQorICAqICAgICAgICAgICAgICBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgLSBFbmFibGUgYWNjZXNzIHRvIFJUQyBkb21haW4gdXNpbmcgdGhlIFBXUl9CYWNrdXBBY2Nlc3NDbWQoKSBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAtIFNlbGVjdCB0aGUgUlRDIGNsb2NrIHNvdXJjZSB1c2luZyB0aGUgUkNDX1JUQ0NMS0NvbmZpZygpIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgIC0gRW5hYmxlIFJUQyBDbG9jayB1c2luZyB0aGUgUkNDX1JUQ0NMS0NtZCgpIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEMgRHJpdmVyOiBob3cgdG8gdXNlIGl0DQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAtIEVuYWJsZSB0aGUgUlRDIGRvbWFpbiBhY2Nlc3MgKHNlZSBkZXNjcmlwdGlvbiBpbiB0aGUgc2VjdGlvbiBhYm92ZSkNCisgICogICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGUgUlRDIFByZXNjYWxlciAoQXN5bmNocm9ub3VzIGFuZCBTeW5jaHJvbm91cykgYW5kDQorICAqICAgICAgICAgICAgICBSVEMgaG91ciBmb3JtYXQgdXNpbmcgdGhlIFJUQ19Jbml0KCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIFRpbWUgYW5kIERhdGUgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAtIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIENhbGVuZGFyIChUaW1lIGFuZCBEYXRlKSB1c2UgdGhlIFJUQ19TZXRUaW1lKCkNCisgICogICAgICAgICAgICAgIGFuZCBSVENfU2V0RGF0ZSgpIGZ1bmN0aW9ucy4NCisgICogICAgICAgICAgICAtIFRvIHJlYWQgdGhlIFJUQyBDYWxlbmRhciwgdXNlIHRoZSBSVENfR2V0VGltZSgpIGFuZCBSVENfR2V0RGF0ZSgpDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbnMuDQorICAqICAgICAgICAgICAgLSBVc2UgdGhlIFJUQ19EYXlMaWdodFNhdmluZ0NvbmZpZygpIGZ1bmN0aW9uIHRvIGFkZCBvciBzdWIgb25lDQorICAqICAgICAgICAgICAgICBob3VyIHRvIHRoZSBSVEMgQ2FsZW5kYXIuICAgIA0KKyAgKg0KKyAgKiAgICAgICAgICBBbGFybSBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAtIFRvIGNvbmZpZ3VyZSB0aGUgUlRDIEFsYXJtIHVzZSB0aGUgUlRDX1NldEFsYXJtKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgLSBFbmFibGUgdGhlIHNlbGVjdGVkIFJUQyBBbGFybSB1c2luZyB0aGUgUlRDX0FsYXJtQ21kKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAtIFRvIHJlYWQgdGhlIFJUQyBBbGFybSwgdXNlIHRoZSBSVENfR2V0QWxhcm0oKSBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgUlRDIFdha2V1cCBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBSVEMgV2FrZXVwIENsb2NrIHNvdXJjZSB1c2UgdGhlIFJUQ19XYWtlVXBDbG9ja0NvbmZpZygpDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGUgUlRDIFdha2VVcCBDb3VudGVyIHVzaW5nIHRoZSBSVENfU2V0V2FrZVVwQ291bnRlcigpIA0KKyAgKiAgICAgICAgICAgICAgZnVuY3Rpb24gIA0KKyAgKiAgICAgICAgICAgIC0gRW5hYmxlIHRoZSBSVEMgV2FrZVVwIHVzaW5nIHRoZSBSVENfV2FrZVVwQ21kKCkgZnVuY3Rpb24gIA0KKyAgKiAgICAgICAgICAgIC0gVG8gcmVhZCB0aGUgUlRDIFdha2VVcCBDb3VudGVyIHJlZ2lzdGVyLCB1c2UgdGhlIFJUQ19HZXRXYWtlVXBDb3VudGVyKCkgDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgT3V0cHV0cyBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICBUaGUgUlRDIGhhcyAyIGRpZmZlcmVudCBvdXRwdXRzOg0KKyAgKiAgICAgICAgICAgIC0gQUZPX0FMQVJNOiB0aGlzIG91dHB1dCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgUlRDIEFsYXJtIEEsIEFsYXJtIEINCisgICogICAgICAgICAgICAgIGFuZCBXYUtlVXAgc2lnbmFscy4gICAgICAgICAgDQorICAqICAgICAgICAgICAgICBUbyBvdXRwdXQgdGhlIHNlbGVjdGVkIFJUQyBzaWduYWwgb24gUlRDX0FGMSBwaW4sIHVzZSB0aGUgDQorICAqICAgICAgICAgICAgICBSVENfT3V0cHV0Q29uZmlnKCkgZnVuY3Rpb24uICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgIC0gQUZPX0NBTElCOiB0aGlzIG91dHB1dCBpcyB1c2VkIHRvIG1hbmFnZSB0aGUgUlRDIENsb2NrIGRpdmlkZWQgDQorICAqICAgICAgICAgICAgICBieSA2NCAoNTEySHopIHNpZ25hbC4NCisgICogICAgICAgICAgICAgIFRvIG91dHB1dCB0aGUgUlRDIENsb2NrIG9uIFJUQ19BRjEgcGluLCB1c2UgdGhlIFJUQ19DYWxpYk91dHB1dENtZCgpDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgQ29hcnNlIENhbGlicmF0aW9uIGNvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgLSBDb25maWd1cmUgdGhlIFJUQyBDb2Fyc2UgQ2FsaWJyYXRpb24gVmFsdWUgYW5kIHRoZSBjb3JyZXNwb25kaW5nDQorICAqICAgICAgICAgICAgICBzaWduIHVzaW5nIHRoZSBSVENfQ29hcnNlQ2FsaWJDb25maWcoKSBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAtIEVuYWJsZSB0aGUgUlRDIENvYXJzZSBDYWxpYnJhdGlvbiB1c2luZyB0aGUgUlRDX0NvYXJzZUNhbGliQ21kKCkgDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbiAgDQorICAqDQorICAqICAgICAgICAgIFRpbWVTdGFtcCBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgLSBDb25maWd1cmUgdGhlIFJUQ19BRjEgdHJpZ2dlciBhbmQgZW5hYmxlcyB0aGUgUlRDIFRpbWVTdGFtcCANCisgICogICAgICAgICAgICAgIHVzaW5nIHRoZSBSVENfVGltZVN0YW1wQ21kKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgLSBUbyByZWFkIHRoZSBSVEMgVGltZVN0YW1wIFRpbWUgYW5kIERhdGUgcmVnaXN0ZXIsIHVzZSB0aGUgDQorICAqICAgICAgICAgICAgICBSVENfR2V0VGltZVN0YW1wKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgLSBUaGUgVEFNUEVSMSBhbHRlcm5hdGUgZnVuY3Rpb24gY2FuIGJlIG1hcHBlZCBlaXRoZXIgdG8gUlRDX0FGMShQQzEzKQ0KKyAgKiAgICAgICAgICAgICAgb3IgUlRDX0FGMiAoUEk4KSBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIFRBTVAxSU5TRUwgYml0IGluIA0KKyAgKiAgICAgICAgICAgICAgUlRDX1RBRkNSIHJlZ2lzdGVyLiBZb3UgY2FuIHVzZSB0aGUgIFJUQ19UYW1wZXJQaW5TZWxlY3Rpb24oKQ0KKyAgKiAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gc2VsZWN0IHRoZSBjb3JyZXNwb25kaW5nIHBpbi4gICAgIA0KKyAgKg0KKyAgKiAgICAgICAgICBUYW1wZXIgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBSVEMgVGFtcGVyIHRyaWdnZXIgdXNpbmcgdGhlIFJUQ19UYW1wZXJDb25maWcoKSANCisgICogICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgIC0gRW5hYmxlIHRoZSBSVEMgVGFtcGVyIHVzaW5nIHRoZSBSVENfVGFtcGVyQ21kKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgLSBUaGUgVElNRVNUQU1QIGFsdGVybmF0ZSBmdW5jdGlvbiBjYW4gYmUgbWFwcGVkIHRvIGVpdGhlciBSVENfQUYxIA0KKyAgKiAgICAgICAgICAgICAgb3IgUlRDX0FGMiBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZSBUU0lOU0VMIGJpdCBpbiB0aGUgDQorICAqICAgICAgICAgICAgICBSVENfVEFGQ1IgcmVnaXN0ZXIuIFlvdSBjYW4gdXNlIHRoZSAgUlRDX1RpbWVTdGFtcFBpblNlbGVjdGlvbigpDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbiB0byBzZWxlY3QgdGhlIGNvcnJlc3BvbmRpbmcgcGluLiAgIA0KKyAgKg0KKyAgKiAgICAgICAgICBCYWNrdXAgRGF0YSBSZWdpc3RlcnMgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgIC0gVG8gd3JpdGUgdG8gdGhlIFJUQyBCYWNrdXAgRGF0YSByZWdpc3RlcnMsIHVzZSB0aGUgUlRDX1dyaXRlQmFja3VwUmVnaXN0ZXIoKQ0KKyAgKiAgICAgICAgICAgICAgZnVuY3Rpb24uICANCisgICogICAgICAgICAgICAtIFRvIHJlYWQgdGhlIFJUQyBCYWNrdXAgRGF0YSByZWdpc3RlcnMsIHVzZSB0aGUgUlRDX1JlYWRCYWNrdXBSZWdpc3RlcigpDQorICAqICAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICogDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDIGFuZCBsb3cgcG93ZXIgbW9kZXMNCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgVGhlIE1DVSBjYW4gYmUgd29rZW4gdXAgZnJvbSBhIGxvdyBwb3dlciBtb2RlIGJ5IGFuIFJUQyBhbHRlcm5hdGUgDQorICAqICAgICAgICAgICBmdW5jdGlvbi4NCisgICogICAgICAgICAgIFRoZSBSVEMgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBhcmUgdGhlIFJUQyBhbGFybXMgKEFsYXJtIEEgYW5kIEFsYXJtIEIpLCANCisgICogICAgICAgICAgIFJUQyB3YWtldXAsIFJUQyB0YW1wZXIgZXZlbnQgZGV0ZWN0aW9uIGFuZCBSVEMgdGltZSBzdGFtcCBldmVudCBkZXRlY3Rpb24uDQorICAqICAgICAgICAgICBUaGVzZSBSVEMgYWx0ZXJuYXRlIGZ1bmN0aW9ucyBjYW4gd2FrZSB1cCB0aGUgc3lzdGVtIGZyb20gdGhlIFN0b3AgDQorICAqICAgICAgICAgICBhbmQgU3RhbmRieSBsb3dwb3dlciBtb2Rlcy4NCisgICogICAgICAgICAgIFRoZSBzeXN0ZW0gY2FuIGFsc28gd2FrZSB1cCBmcm9tIGxvdyBwb3dlciBtb2RlcyB3aXRob3V0IGRlcGVuZGluZyANCisgICogICAgICAgICAgIG9uIGFuIGV4dGVybmFsIGludGVycnVwdCAoQXV0by13YWtldXAgbW9kZSksIGJ5IHVzaW5nIHRoZSBSVEMgYWxhcm0gDQorICAqICAgICAgICAgICBvciB0aGUgUlRDIHdha2V1cCBldmVudHMuDQorICAqICAgICAgICAgICBUaGUgUlRDIHByb3ZpZGVzIGEgcHJvZ3JhbW1hYmxlIHRpbWUgYmFzZSBmb3Igd2FraW5nIHVwIGZyb20gdGhlIA0KKyAgKiAgICAgICAgICAgU3RvcCBvciBTdGFuZGJ5IG1vZGUgYXQgcmVndWxhciBpbnRlcnZhbHMuDQorICAqICAgICAgICAgICBXYWtldXAgZnJvbSBTVE9QIGFuZCBTdGFuZGJ5IG1vZGVzIGlzIHBvc3NpYmxlIG9ubHkgd2hlbiB0aGUgUlRDIA0KKyAgKiAgICAgICAgICAgY2xvY2sgc291cmNlIGlzIExTRSBvciBMU0kuDQorICAqDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9mIFJUQ19BRjEgYWx0ZXJuYXRlIGZ1bmN0aW9ucw0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgIFRoZSBSVENfQUYxIHBpbiAoUEMxMykgY2FuIGJlIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgcHVycG9zZXM6DQorICAqICAgICAgICAgICAgLSBBRk9fQUxBUk0gb3V0cHV0DQorICAqICAgICAgICAgICAgLSBBRk9fQ0FMSUIgb3V0cHV0DQorICAqICAgICAgICAgICAgLSBBRklfVEFNUEVSDQorICAqICAgICAgICAgICAgLSBBRklfVElNRVNUQU1QDQorICAqDQorICAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyAgKiB8ICAgICBQaW4gICAgICAgICB8QUZPX0FMQVJNIHxBRk9fQ0FMSUIgfEFGSV9UQU1QRVIgfEFGSV9USU1FU1RBTVAgfCBUQU1QMUlOU0VMIHwgICBUU0lOU0VMICAgIHxBTEFSTU9VVFRZUEUgIHwNCisgICogfCAgY29uZmlndXJhdGlvbiAgfCBFTkFCTEVEICB8IEVOQUJMRUQgIHwgIEVOQUJMRUQgIHwgICBFTkFCTEVEICAgIHxUQU1QRVIxIHBpbiB8VElNRVNUQU1QIHBpbiB8ICBBRk9fQUxBUk0gICB8DQorICAqIHwgIGFuZCBmdW5jdGlvbiAgIHwgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8IHNlbGVjdGlvbiAgfCAgc2VsZWN0aW9uICAgfENvbmZpZ3VyYXRpb24gfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwNCisgICogfCAgIEFsYXJtIG91dCAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgRG9uJ3QgICB8ICAgICBEb24ndCAgICB8ICAgICAgICAgICAgICB8DQorICAqIHwgICBvdXRwdXQgT0QgICAgIHwgICAgIDEgICAgfERvbid0IGNhcmV8RG9uJ3QgY2FyZSB8IERvbid0IGNhcmUgICB8ICAgIGNhcmUgICAgfCAgICAgY2FyZSAgICAgfCAgICAgIDAgICAgICAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwNCisgICogfCAgIEFsYXJtIG91dCAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgRG9uJ3QgICB8ICAgICBEb24ndCAgICB8ICAgICAgICAgICAgICB8DQorICAqIHwgICBvdXRwdXQgUFAgICAgIHwgICAgIDEgICAgfERvbid0IGNhcmV8RG9uJ3QgY2FyZSB8IERvbid0IGNhcmUgICB8ICAgIGNhcmUgICAgfCAgICAgY2FyZSAgICAgfCAgICAgIDEgICAgICAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwNCisgICogfCBDYWxpYnJhdGlvbiBvdXQgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgRG9uJ3QgICB8ICAgICBEb24ndCAgICB8ICAgICAgICAgICAgICB8DQorICAqIHwgICBvdXRwdXQgUFAgICAgIHwgICAgIDAgICAgfCAgICAxICAgICB8RG9uJ3QgY2FyZSB8IERvbid0IGNhcmUgICB8ICAgIGNhcmUgICAgfCAgICAgY2FyZSAgICAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwNCisgICogfCAgVEFNUEVSIGlucHV0ICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICBEb24ndCAgICB8ICAgICAgICAgICAgICB8DQorICAqIHwgICBmbG9hdGluZyAgICAgIHwgICAgIDAgICAgfCAgICAwICAgICB8ICAgICAxICAgICB8ICAgICAgMCAgICAgICB8ICAgICAgMCAgICAgfCAgICAgY2FyZSAgICAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwNCisgICogfCAgVElNRVNUQU1QIGFuZCAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8DQorICAqIHwgIFRBTVBFUiBpbnB1dCAgIHwgICAgIDAgICAgfCAgICAwICAgICB8ICAgICAxICAgICB8ICAgICAgMSAgICAgICB8ICAgICAgMCAgICAgfCAgICAgIDAgICAgICAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiB8ICAgZmxvYXRpbmcgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwNCisgICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18DQorICAqIHwgVElNRVNUQU1QIGlucHV0IHwgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIERvbid0ICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfA0KKyAgKiB8ICAgIGZsb2F0aW5nICAgICB8ICAgICAwICAgIHwgICAgMCAgICAgfCAgICAgMCAgICAgfCAgICAgIDEgICAgICAgfCAgICBjYXJlICAgIHwgICAgICAwICAgICAgIHwgIERvbid0IGNhcmUgIHwNCisgICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18DQorICAqIHwgIFN0YW5kYXJkIEdQSU8gIHwgICAgIDAgICAgfCAgICAwICAgICB8ICAgICAwICAgICB8ICAgICAgMCAgICAgICB8IERvbid0IGNhcmUgfCAgRG9uJ3QgY2FyZSAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisgICoNCisgICoNCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb24gb2YgUlRDX0FGMiBhbHRlcm5hdGUgZnVuY3Rpb25zDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgVGhlIFJUQ19BRjIgcGluIChQSTgpIGNhbiBiZSB1c2VkIGZvciB0aGUgZm9sbG93aW5nIHB1cnBvc2VzOg0KKyAgKiAgICAgICAgICAgIC0gQUZJX1RBTVBFUg0KKyAgKiAgICAgICAgICAgIC0gQUZJX1RJTUVTVEFNUA0KKyAgKg0KKyAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyAgKiB8ICAgICBQaW4gICAgICAgICB8QUZJX1RBTVBFUiB8QUZJX1RJTUVTVEFNUCB8IFRBTVAxSU5TRUwgfCAgIFRTSU5TRUwgICAgfEFMQVJNT1VUVFlQRSAgfA0KKyAgKiB8ICBjb25maWd1cmF0aW9uICB8ICBFTkFCTEVEICB8ICAgRU5BQkxFRCAgICB8VEFNUEVSMSBwaW4gfFRJTUVTVEFNUCBwaW4gfCAgQUZPX0FMQVJNICAgfA0KKyAgKiB8ICBhbmQgZnVuY3Rpb24gICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8IHNlbGVjdGlvbiAgfCAgc2VsZWN0aW9uICAgfENvbmZpZ3VyYXRpb24gfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfA0KKyAgKiB8ICBUQU1QRVIgaW5wdXQgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgRG9uJ3QgICAgfCAgICAgICAgICAgICAgfA0KKyAgKiB8ICAgZmxvYXRpbmcgICAgICB8ICAgICAxICAgICB8ICAgICAgMCAgICAgICB8ICAgICAgMSAgICAgfCAgICAgY2FyZSAgICAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfA0KKyAgKiB8ICBUSU1FU1RBTVAgYW5kICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfA0KKyAgKiB8ICBUQU1QRVIgaW5wdXQgICB8ICAgICAxICAgICB8ICAgICAgMSAgICAgICB8ICAgICAgMSAgICAgfCAgICAgIDEgICAgICAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiB8ICAgZmxvYXRpbmcgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfA0KKyAgKiB8IFRJTUVTVEFNUCBpbnB1dCB8ICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIERvbid0ICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfA0KKyAgKiB8ICAgIGZsb2F0aW5nICAgICB8ICAgICAwICAgICB8ICAgICAgMSAgICAgICB8ICAgIGNhcmUgICAgfCAgICAgIDEgICAgICAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfA0KKyAgKiB8ICBTdGFuZGFyZCBHUElPICB8ICAgICAwICAgICB8ICAgICAgMCAgICAgICB8IERvbid0IGNhcmUgfCAgRG9uJ3QgY2FyZSAgfCAgRG9uJ3QgY2FyZSAgfA0KKyAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KKyAgKiANCisgICoNCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovIA0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9ydGMuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFJUQyANCisgICogQGJyaWVmIFJUQyBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogTWFza3MgRGVmaW5pdGlvbiAqLw0KKyNkZWZpbmUgUlRDX1RSX1JFU0VSVkVEX01BU0sgICAgKCh1aW50MzJfdCkweDAwN0Y3RjdGKQ0KKyNkZWZpbmUgUlRDX0RSX1JFU0VSVkVEX01BU0sgICAgKCh1aW50MzJfdCkweDAwRkZGRjNGKSANCisjZGVmaW5lIFJUQ19JTklUX01BU0sgICAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGRikgIA0KKyNkZWZpbmUgUlRDX1JTRl9NQVNLICAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGRjVGKQ0KKyNkZWZpbmUgUlRDX0ZMQUdTX01BU0sgICAgICAgICAgKCh1aW50MzJfdCkoUlRDX0ZMQUdfVFNPVkYgfCBSVENfRkxBR19UU0YgfCBSVENfRkxBR19XVVRGIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0ZMQUdfQUxSQkYgfCBSVENfRkxBR19BTFJBRiB8IFJUQ19GTEFHX0lOSVRGIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0ZMQUdfUlNGIHwgUlRDX0ZMQUdfSU5JVFMgfCBSVENfRkxBR19XVVRXRiB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19GTEFHX0FMUkJXRiB8IFJUQ19GTEFHX0FMUkFXRiB8IFJUQ19GTEFHX1RBTVAxRiApKQ0KKw0KKyNkZWZpbmUgSU5JVE1PREVfVElNRU9VVCAgICAgICAgICgodWludDMyX3QpIDB4MDAwMTAwMDApDQorI2RlZmluZSBTWU5DSFJPX1RJTUVPVVQgICAgICAgICAgKCh1aW50MzJfdCkgMHgwMDAwODAwMCkNCisNCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCitzdGF0aWMgdWludDhfdCBSVENfQnl0ZVRvQmNkMih1aW50OF90IFZhbHVlKTsNCitzdGF0aWMgdWludDhfdCBSVENfQmNkMlRvQnl0ZSh1aW50OF90IFZhbHVlKTsNCisNCisvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLyANCisNCisvKiogQGRlZmdyb3VwIFJUQ19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGUgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGluaXRpYWxpemUgYW5kIGNvbmZpZ3VyZSB0aGUgUlRDDQorICBQcmVzY2FsZXIgKFN5bmNocm9ub3VzIGFuZCBBc3luY2hyb25vdXMpLCBSVEMgSG91ciBmb3JtYXQsIGRpc2FibGUgUlRDIHJlZ2lzdGVycw0KKyAgV3JpdGUgcHJvdGVjdGlvbiwgZW50ZXIgYW5kIGV4aXQgdGhlIFJUQyBpbml0aWFsaXphdGlvbiBtb2RlLCBSVEMgcmVnaXN0ZXJzDQorICBzeW5jaHJvbml6YXRpb24gY2hlY2sgYW5kIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24gZW5hYmxlLg0KKyAgDQorICAxLiBUaGUgUlRDIFByZXNjYWxlciBpcyBwcm9ncmFtbWVkIHRvIGdlbmVyYXRlIHRoZSBSVEMgMUh6IHRpbWUgYmFzZS4gSXQgaXMNCisgICAgIHNwbGl0IGludG8gMiBwcm9ncmFtbWFibGUgcHJlc2NhbGVycyB0byBtaW5pbWl6ZSBwb3dlciBjb25zdW1wdGlvbi4NCisgICAgIC0gQSA3LWJpdCBhc3luY2hyb25vdXMgcHJlc2NhbGVyIGFuZCBBIDEzLWJpdCBzeW5jaHJvbm91cyBwcmVzY2FsZXIuDQorICAgICAtIFdoZW4gYm90aCBwcmVzY2FsZXJzIGFyZSB1c2VkLCBpdCBpcyByZWNvbW1lbmRlZCB0byBjb25maWd1cmUgdGhlIGFzeW5jaHJvbm91cw0KKyAgICAgICBwcmVzY2FsZXIgdG8gYSBoaWdoIHZhbHVlIHRvIG1pbmltaXplIGNvbnN1bXB0aW9uLg0KKw0KKyAgMi4gQWxsIFJUQyByZWdpc3RlcnMgYXJlIFdyaXRlIHByb3RlY3RlZC4gV3JpdGluZyB0byB0aGUgUlRDIHJlZ2lzdGVycw0KKyAgICAgaXMgZW5hYmxlZCBieSB3cml0aW5nIGEga2V5IGludG8gdGhlIFdyaXRlIFByb3RlY3Rpb24gcmVnaXN0ZXIsIFJUQ19XUFIuDQorDQorICAzLiBUbyBDb25maWd1cmUgdGhlIFJUQyBDYWxlbmRhciwgdXNlciBhcHBsaWNhdGlvbiBzaG91bGQgZW50ZXIgaW5pdGlhbGl6YXRpb24NCisgICAgIG1vZGUuIEluIHRoaXMgbW9kZSwgdGhlIGNhbGVuZGFyIGNvdW50ZXIgaXMgc3RvcHBlZCBhbmQgaXRzIHZhbHVlIGNhbiBiZSANCisgICAgIHVwZGF0ZWQuIFdoZW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzIGNvbXBsZXRlLCB0aGUgY2FsZW5kYXIgcmVzdGFydHMgDQorICAgICBjb3VudGluZyBhZnRlciA0IFJUQ0NMSyBjeWNsZXMuDQorDQorICA0LiBUbyByZWFkIHRoZSBjYWxlbmRhciB0aHJvdWdoIHRoZSBzaGFkb3cgcmVnaXN0ZXJzIGFmdGVyIENhbGVuZGFyIGluaXRpYWxpemF0aW9uLA0KKyAgICAgY2FsZW5kYXIgdXBkYXRlIG9yIGFmdGVyIHdha2V1cCBmcm9tIGxvdyBwb3dlciBtb2RlcyB0aGUgc29mdHdhcmUgbXVzdCBmaXJzdCANCisgICAgIGNsZWFyIHRoZSBSU0YgZmxhZy4gVGhlIHNvZnR3YXJlIG11c3QgdGhlbiB3YWl0IHVudGlsIGl0IGlzIHNldCBhZ2FpbiBiZWZvcmUgDQorICAgICByZWFkaW5nIHRoZSBjYWxlbmRhciwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2FsZW5kYXIgcmVnaXN0ZXJzIGhhdmUgYmVlbiANCisgICAgIGNvcnJlY3RseSBjb3BpZWQgaW50byB0aGUgUlRDX1RSIGFuZCBSVENfRFIgc2hhZG93IHJlZ2lzdGVycy4NCisgICAgIFRoZSBSVENfV2FpdEZvclN5bmNocm8oKSBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBhYm92ZSBzb2Z0d2FyZSBzZXF1ZW5jZSANCisgICAgIChSU0YgY2xlYXIgYW5kIFJTRiBjaGVjaykuDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgdGhlIFJUQyByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlc2V0IHRoZSBSVEMgQ2xvY2sgc291cmNlIGFuZCBSVEMgQmFja3VwIERhdGENCisgICogICAgICAgICByZWdpc3RlcnMuICAgICAgIA0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBSVEMgcmVnaXN0ZXJzIGFyZSBkZWluaXRpYWxpemVkDQorICAqICAgICAgICAgIC0gRVJST1I6IFJUQyByZWdpc3RlcnMgYXJlIG5vdCBkZWluaXRpYWxpemVkDQorICAqLw0KK0Vycm9yU3RhdHVzIFJUQ19EZUluaXQodm9pZCkNCit7DQorICBfX0lPIHVpbnQzMl90IHd1dGNvdW50ZXIgPSAweDAwOw0KKyAgdWludDMyX3Qgd3V0d2ZzdGF0dXMgPSAweDAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7DQorICANCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisNCisgIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICBpZiAoUlRDX0VudGVySW5pdE1vZGUoKSA9PSBFUlJPUikNCisgIHsNCisgICAgc3RhdHVzID0gRVJST1I7DQorICB9ICANCisgIGVsc2UNCisgIHsNCisgICAgLyogUmVzZXQgVFIsIERSIGFuZCBDUiByZWdpc3RlcnMgKi8NCisgICAgUlRDLT5UUiA9ICh1aW50MzJfdCkweDAwMDAwMDAwOw0KKyAgICBSVEMtPkRSID0gKHVpbnQzMl90KTB4MDAwMDIxMDE7DQorICAgIC8qIFJlc2V0IEFsbCBDUiBiaXRzIGV4Y2VwdCBDUlsyOjBdICovDQorICAgIFJUQy0+Q1IgJj0gKHVpbnQzMl90KTB4MDAwMDAwMDc7DQorICANCisgICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovDQorICAgIGRvDQorICAgIHsNCisgICAgICB3dXR3ZnN0YXR1cyA9IFJUQy0+SVNSICYgUlRDX0lTUl9XVVRXRjsNCisgICAgICB3dXRjb3VudGVyKys7ICANCisgICAgfSB3aGlsZSgod3V0Y291bnRlciAhPSBJTklUTU9ERV9USU1FT1VUKSAmJiAod3V0d2ZzdGF0dXMgPT0gMHgwMCkpOw0KKyAgICANCisgICAgaWYgKChSVEMtPklTUiAmIFJUQ19JU1JfV1VUV0YpID09IFJFU0VUKQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgLyogUmVzZXQgYWxsIFJUQyBDUiByZWdpc3RlciBiaXRzICovDQorICAgICAgUlRDLT5DUiAmPSAodWludDMyX3QpMHgwMDAwMDAwMDsNCisgICAgICBSVEMtPldVVFIgPSAodWludDMyX3QpMHgwMDAwRkZGRjsNCisgICAgICBSVEMtPlBSRVIgPSAodWludDMyX3QpMHgwMDdGMDBGRjsNCisgICAgICBSVEMtPkNBTElCUiA9ICh1aW50MzJfdCkweDAwMDAwMDAwOw0KKyAgICAgIFJUQy0+QUxSTUFSID0gKHVpbnQzMl90KTB4MDAwMDAwMDA7ICAgICAgICANCisgICAgICBSVEMtPkFMUk1CUiA9ICh1aW50MzJfdCkweDAwMDAwMDAwOw0KKyAgICAgIA0KKyAgICAgIC8qIFJlc2V0IElTUiByZWdpc3RlciBhbmQgZXhpdCBpbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgICAgUlRDLT5JU1IgPSAodWludDMyX3QpMHgwMDAwMDAwMDsNCisgICAgICANCisgICAgICAvKiBSZXNldCBUYW1wZXIgYW5kIGFsdGVybmF0ZSBmdW5jdGlvbnMgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLw0KKyAgICAgIFJUQy0+VEFGQ1IgPSAweDAwMDAwMDAwOw0KKyAgDQorICAgICAgaWYoUlRDX1dhaXRGb3JTeW5jaHJvKCkgPT0gRVJST1IpDQorICAgICAgew0KKyAgICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgICAgfQ0KKyAgICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICBzdGF0dXMgPSBTVUNDRVNTOyAgICAgIA0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKyAgDQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgIA0KKyAgDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgUlRDIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIA0KKyAgKiAgICAgICAgIGluIFJUQ19Jbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIFJUQ19Jbml0U3RydWN0OiBwb2ludGVyIHRvIGEgUlRDX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIA0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgUlRDIHBlcmlwaGVyYWwuDQorICAqIEBub3RlICAgVGhlIFJUQyBQcmVzY2FsZXIgcmVnaXN0ZXIgaXMgd3JpdGUgcHJvdGVjdGVkIGFuZCBjYW4gYmUgd3JpdHRlbiBpbiANCisgICogICAgICAgICBpbml0aWFsaXphdGlvbiBtb2RlIG9ubHkuICANCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBSVEMgcmVnaXN0ZXJzIGFyZSBpbml0aWFsaXplZA0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBSVEMgcmVnaXN0ZXJzIGFyZSBub3QgaW5pdGlhbGl6ZWQgIA0KKyAgKi8NCitFcnJvclN0YXR1cyBSVENfSW5pdChSVENfSW5pdFR5cGVEZWYqIFJUQ19Jbml0U3RydWN0KQ0KK3sNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IEVSUk9SOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSX0ZPUk1BVChSVENfSW5pdFN0cnVjdC0+UlRDX0hvdXJGb3JtYXQpKTsNCisgIGFzc2VydF9wYXJhbShJU19SVENfQVNZTkNIX1BSRURJVihSVENfSW5pdFN0cnVjdC0+UlRDX0FzeW5jaFByZWRpdikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TWU5DSF9QUkVESVYoUlRDX0luaXRTdHJ1Y3QtPlJUQ19TeW5jaFByZWRpdikpOw0KKw0KKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweENBOw0KKyAgUlRDLT5XUFIgPSAweDUzOw0KKw0KKyAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8NCisgIGlmIChSVENfRW50ZXJJbml0TW9kZSgpID09IEVSUk9SKQ0KKyAgew0KKyAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0gDQorICBlbHNlDQorICB7DQorICAgIC8qIENsZWFyIFJUQyBDUiBGTVQgQml0ICovDQorICAgIFJUQy0+Q1IgJj0gKCh1aW50MzJfdCl+KFJUQ19DUl9GTVQpKTsNCisgICAgLyogU2V0IFJUQ19DUiByZWdpc3RlciAqLw0KKyAgICBSVEMtPkNSIHw9ICAoKHVpbnQzMl90KShSVENfSW5pdFN0cnVjdC0+UlRDX0hvdXJGb3JtYXQpKTsNCisgIA0KKyAgICAvKiBDb25maWd1cmUgdGhlIFJUQyBQUkVSICovDQorICAgIFJUQy0+UFJFUiA9ICh1aW50MzJfdCkoUlRDX0luaXRTdHJ1Y3QtPlJUQ19TeW5jaFByZWRpdik7DQorICAgIFJUQy0+UFJFUiB8PSAodWludDMyX3QpKFJUQ19Jbml0U3RydWN0LT5SVENfQXN5bmNoUHJlZGl2IDw8IDE2KTsNCisNCisgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgIFJUQ19FeGl0SW5pdE1vZGUoKTsNCisNCisgICAgc3RhdHVzID0gU1VDQ0VTUzsgICAgDQorICB9DQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgDQorICANCisgIHJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggUlRDX0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgUlRDX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBSVENfSW5pdFR5cGVEZWYgc3RydWN0dXJlIHdoaWNoIHdpbGwgYmUgDQorICAqICAgICAgICAgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJUQ19TdHJ1Y3RJbml0KFJUQ19Jbml0VHlwZURlZiogUlRDX0luaXRTdHJ1Y3QpDQorew0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgUlRDX0hvdXJGb3JtYXQgbWVtYmVyICovDQorICBSVENfSW5pdFN0cnVjdC0+UlRDX0hvdXJGb3JtYXQgPSBSVENfSG91ckZvcm1hdF8yNDsNCisgICAgDQorICAvKiBJbml0aWFsaXplIHRoZSBSVENfQXN5bmNoUHJlZGl2IG1lbWJlciAqLw0KKyAgUlRDX0luaXRTdHJ1Y3QtPlJUQ19Bc3luY2hQcmVkaXYgPSAodWludDMyX3QpMHg3RjsNCisNCisgIC8qIEluaXRpYWxpemUgdGhlIFJUQ19TeW5jaFByZWRpdiBtZW1iZXIgKi8NCisgIFJUQ19Jbml0U3RydWN0LT5SVENfU3luY2hQcmVkaXYgPSAodWludDMyX3QpMHhGRjsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFJUQyByZWdpc3RlcnMgd3JpdGUgcHJvdGVjdGlvbi4NCisgICogQG5vdGUgICBBbGwgdGhlIFJUQyByZWdpc3RlcnMgYXJlIHdyaXRlIHByb3RlY3RlZCBleGNlcHQgZm9yIFJUQ19JU1JbMTM6OF0sIA0KKyAgKiAgICAgICAgIFJUQ19UQUZDUiBhbmQgUlRDX0JLUHhSLg0KKyAgKiBAbm90ZSAgIFdyaXRpbmcgYSB3cm9uZyBrZXkgcmVhY3RpdmF0ZXMgdGhlIHdyaXRlIHByb3RlY3Rpb24uDQorICAqIEBub3RlICAgVGhlIHByb3RlY3Rpb24gbWVjaGFuaXNtIGlzIG5vdCBhZmZlY3RlZCBieSBzeXN0ZW0gcmVzZXQuICANCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSB3cml0ZSBwcm90ZWN0aW9uLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfV3JpdGVQcm90ZWN0aW9uQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgICAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICAgIFJUQy0+V1BSID0gMHhGRjsgICANCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgICBSVEMtPldQUiA9IDB4Q0E7DQorICAgIFJUQy0+V1BSID0gMHg1MzsgICAgDQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVudGVycyB0aGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUuDQorICAqIEBub3RlICAgVGhlIFJUQyBJbml0aWFsaXphdGlvbiBtb2RlIGlzIHdyaXRlIHByb3RlY3RlZCwgdXNlIHRoZSANCisgICogICAgICAgICBSVENfV3JpdGVQcm90ZWN0aW9uQ21kKERJU0FCTEUpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICAgIA0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBSVEMgaXMgaW4gSW5pdCBtb2RlDQorICAqICAgICAgICAgIC0gRVJST1I6IFJUQyBpcyBub3QgaW4gSW5pdCBtb2RlICANCisgICovDQorRXJyb3JTdGF0dXMgUlRDX0VudGVySW5pdE1vZGUodm9pZCkNCit7DQorICBfX0lPIHVpbnQzMl90IGluaXRjb3VudGVyID0gMHgwMDsNCisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IEVSUk9SOw0KKyAgdWludDMyX3QgaW5pdHN0YXR1cyA9IDB4MDA7DQorICAgICANCisgIC8qIENoZWNrIGlmIHRoZSBJbml0aWFsaXphdGlvbiBtb2RlIGlzIHNldCAqLw0KKyAgaWYgKChSVEMtPklTUiAmIFJUQ19JU1JfSU5JVEYpID09ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgLyogU2V0IHRoZSBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgIFJUQy0+SVNSID0gKHVpbnQzMl90KVJUQ19JTklUX01BU0s7DQorICAgIA0KKyAgICAvKiBXYWl0IHRpbGwgUlRDIGlzIGluIElOSVQgc3RhdGUgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLw0KKyAgICBkbw0KKyAgICB7DQorICAgICAgaW5pdHN0YXR1cyA9IFJUQy0+SVNSICYgUlRDX0lTUl9JTklURjsNCisgICAgICBpbml0Y291bnRlcisrOyAgDQorICAgIH0gd2hpbGUoKGluaXRjb3VudGVyICE9IElOSVRNT0RFX1RJTUVPVVQpICYmIChpbml0c3RhdHVzID09IDB4MDApKTsNCisgICAgDQorICAgIGlmICgoUlRDLT5JU1IgJiBSVENfSVNSX0lOSVRGKSAhPSBSRVNFVCkNCisgICAgew0KKyAgICAgIHN0YXR1cyA9IFNVQ0NFU1M7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0gICAgICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBzdGF0dXMgPSBTVUNDRVNTOyAgDQorICB9IA0KKyAgICANCisgIHJldHVybiAoc3RhdHVzKTsgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFeGl0cyB0aGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUuDQorICAqIEBub3RlICAgV2hlbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgY29tcGxldGUsIHRoZSBjYWxlbmRhciByZXN0YXJ0cyANCisgICogICAgICAgICBjb3VudGluZyBhZnRlciA0IFJUQ0NMSyBjeWNsZXMuICANCisgICogQG5vdGUgICBUaGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUgaXMgd3JpdGUgcHJvdGVjdGVkLCB1c2UgdGhlIA0KKyAgKiAgICAgICAgIFJUQ19Xcml0ZVByb3RlY3Rpb25DbWQoRElTQUJMRSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gICAgICANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJUQ19FeGl0SW5pdE1vZGUodm9pZCkNCit7IA0KKyAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICBSVEMtPklTUiAmPSAodWludDMyX3QpflJUQ19JU1JfSU5JVDsgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBXYWl0cyB1bnRpbCB0aGUgUlRDIFRpbWUgYW5kIERhdGUgcmVnaXN0ZXJzIChSVENfVFIgYW5kIFJUQ19EUikgYXJlIA0KKyAgKiAgICAgICAgIHN5bmNocm9uaXplZCB3aXRoIFJUQyBBUEIgY2xvY2suDQorICAqIEBub3RlICAgVGhlIFJUQyBSZXN5bmNocm9uaXphdGlvbiBtb2RlIGlzIHdyaXRlIHByb3RlY3RlZCwgdXNlIHRoZSANCisgICogICAgICAgICBSVENfV3JpdGVQcm90ZWN0aW9uQ21kKERJU0FCTEUpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIA0KKyAgKiBAbm90ZSAgIFRvIHJlYWQgdGhlIGNhbGVuZGFyIHRocm91Z2ggdGhlIHNoYWRvdyByZWdpc3RlcnMgYWZ0ZXIgQ2FsZW5kYXIgDQorICAqICAgICAgICAgaW5pdGlhbGl6YXRpb24sIGNhbGVuZGFyIHVwZGF0ZSBvciBhZnRlciB3YWtldXAgZnJvbSBsb3cgcG93ZXIgbW9kZXMgDQorICAqICAgICAgICAgdGhlIHNvZnR3YXJlIG11c3QgZmlyc3QgY2xlYXIgdGhlIFJTRiBmbGFnLiANCisgICogICAgICAgICBUaGUgc29mdHdhcmUgbXVzdCB0aGVuIHdhaXQgdW50aWwgaXQgaXMgc2V0IGFnYWluIGJlZm9yZSByZWFkaW5nIA0KKyAgKiAgICAgICAgIHRoZSBjYWxlbmRhciwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgY2FsZW5kYXIgcmVnaXN0ZXJzIGhhdmUgYmVlbiANCisgICogICAgICAgICBjb3JyZWN0bHkgY29waWVkIGludG8gdGhlIFJUQ19UUiBhbmQgUlRDX0RSIHNoYWRvdyByZWdpc3RlcnMuICAgDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFJUQyByZWdpc3RlcnMgYXJlIHN5bmNocm9uaXNlZA0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBSVEMgcmVnaXN0ZXJzIGFyZSBub3Qgc3luY2hyb25pc2VkDQorICAqLw0KK0Vycm9yU3RhdHVzIFJUQ19XYWl0Rm9yU3luY2hybyh2b2lkKQ0KK3sNCisgIF9fSU8gdWludDMyX3Qgc3luY2hyb2NvdW50ZXIgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7DQorICB1aW50MzJfdCBzeW5jaHJvc3RhdHVzID0gMHgwMDsNCisNCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisgICAgDQorICAvKiBDbGVhciBSU0YgZmxhZyAqLw0KKyAgUlRDLT5JU1IgJj0gKHVpbnQzMl90KVJUQ19SU0ZfTUFTSzsNCisgICAgDQorICAvKiBXYWl0IHRoZSByZWdpc3RlcnMgdG8gYmUgc3luY2hyb25pc2VkICovDQorICBkbw0KKyAgew0KKyAgICBzeW5jaHJvc3RhdHVzID0gUlRDLT5JU1IgJiBSVENfSVNSX1JTRjsNCisgICAgc3luY2hyb2NvdW50ZXIrKzsgIA0KKyAgfSB3aGlsZSgoc3luY2hyb2NvdW50ZXIgIT0gU1lOQ0hST19USU1FT1VUKSAmJiAoc3luY2hyb3N0YXR1cyA9PSAweDAwKSk7DQorICAgIA0KKyAgaWYgKChSVEMtPklTUiAmIFJUQ19JU1JfUlNGKSAhPSBSRVNFVCkNCisgIHsNCisgICAgc3RhdHVzID0gU1VDQ0VTUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgc3RhdHVzID0gRVJST1I7DQorICB9ICAgICAgICANCisNCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweEZGOyANCisgICAgDQorICByZXR1cm4gKHN0YXR1cyk7IA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBSVEMgcmVmZXJlbmNlIGNsb2NrIGRldGVjdGlvbi4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBSVEMgcmVmZXJlbmNlIGNsb2NrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFJUQyByZWZlcmVuY2UgY2xvY2sgZGV0ZWN0aW9uIGlzIGVuYWJsZWQNCisgICogICAgICAgICAgLSBFUlJPUjogUlRDIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24gaXMgZGlzYWJsZWQgIA0KKyAgKi8NCitFcnJvclN0YXR1cyBSVENfUmVmQ2xvY2tDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sgDQorICBFcnJvclN0YXR1cyBzdGF0dXMgPSBFUlJPUjsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisgICAgDQorICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLw0KKyAgaWYgKFJUQ19FbnRlckluaXRNb2RlKCkgPT0gRVJST1IpDQorICB7DQorICAgIHN0YXR1cyA9IEVSUk9SOw0KKyAgfSANCisgIGVsc2UNCisgIHsgIA0KKyAgICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgICAgew0KKyAgICAgIC8qIEVuYWJsZSB0aGUgUlRDIHJlZmVyZW5jZSBjbG9jayBkZXRlY3Rpb24gKi8NCisgICAgICBSVEMtPkNSIHw9IFJUQ19DUl9SRUZDS09OOyAgIA0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIC8qIERpc2FibGUgdGhlIFJUQyByZWZlcmVuY2UgY2xvY2sgZGV0ZWN0aW9uICovDQorICAgICAgUlRDLT5DUiAmPSB+UlRDX0NSX1JFRkNLT047ICAgIA0KKyAgICB9DQorICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLw0KKyAgICBSVENfRXhpdEluaXRNb2RlKCk7DQorICAgIA0KKyAgICBzdGF0dXMgPSBTVUNDRVNTOw0KKyAgfQ0KKyAgDQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgIA0KKyAgDQorICByZXR1cm4gc3RhdHVzOyANCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0dyb3VwMiBUaW1lIGFuZCBEYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIFRpbWUgYW5kIERhdGUgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICBUaW1lIGFuZCBEYXRlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGUgZnVuY3Rpb25zIGFsbG93aW5nIHRvIHByb2dyYW0gYW5kIHJlYWQgdGhlIFJUQyBDYWxlbmRhcg0KKyAgKFRpbWUgYW5kIERhdGUpLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBTZXQgdGhlIFJUQyBjdXJyZW50IHRpbWUuDQorICAqIEBwYXJhbSAgUlRDX0Zvcm1hdDogc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGVudGVyZWQgcGFyYW1ldGVycy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlICBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfRm9ybWF0X0JJTjogIEJpbmFyeSBkYXRhIGZvcm1hdCANCisgICogICAgICAgICAgICBAYXJnIFJUQ19Gb3JtYXRfQkNEOiAgQkNEIGRhdGEgZm9ybWF0DQorICAqIEBwYXJhbSAgUlRDX1RpbWVTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBSVENfVGltZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRpbWUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFJUQy4gICAgIA0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFJUQyBUaW1lIHJlZ2lzdGVyIGlzIGNvbmZpZ3VyZWQNCisgICogICAgICAgICAgLSBFUlJPUjogUlRDIFRpbWUgcmVnaXN0ZXIgaXMgbm90IGNvbmZpZ3VyZWQNCisgICovDQorRXJyb3JTdGF0dXMgUlRDX1NldFRpbWUodWludDMyX3QgUlRDX0Zvcm1hdCwgUlRDX1RpbWVUeXBlRGVmKiBSVENfVGltZVN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7DQorICAgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKFJUQ19Gb3JtYXQpKTsNCisgIA0KKyAgaWYgKFJUQ19Gb3JtYXQgPT0gUlRDX0Zvcm1hdF9CSU4pDQorICB7DQorICAgIGlmICgoUlRDLT5DUiAmIFJUQ19DUl9GTVQpICE9ICh1aW50MzJfdClSRVNFVCkNCisgICAgew0KKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjEyKFJUQ19UaW1lU3RydWN0LT5SVENfSG91cnMpKTsNCisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0gxMihSVENfVGltZVN0cnVjdC0+UlRDX0gxMikpOw0KKyAgICB9IA0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBSVENfVGltZVN0cnVjdC0+UlRDX0gxMiA9IDB4MDA7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoUlRDX1RpbWVTdHJ1Y3QtPlJUQ19Ib3VycykpOw0KKyAgICB9DQorICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfVGltZVN0cnVjdC0+UlRDX01pbnV0ZXMpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TRUNPTkRTKFJUQ19UaW1lU3RydWN0LT5SVENfU2Vjb25kcykpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBpZiAoKFJUQy0+Q1IgJiBSVENfQ1JfRk1UKSAhPSAodWludDMyX3QpUkVTRVQpDQorICAgIHsNCisgICAgICB0bXByZWcgPSBSVENfQmNkMlRvQnl0ZShSVENfVGltZVN0cnVjdC0+UlRDX0hvdXJzKTsNCisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0hPVVIxMih0bXByZWcpKTsNCisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0gxMihSVENfVGltZVN0cnVjdC0+UlRDX0gxMikpOyANCisgICAgfSANCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19IMTIgPSAweDAwOw0KKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKFJUQ19UaW1lU3RydWN0LT5SVENfSG91cnMpKSk7DQorICAgIH0NCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NSU5VVEVTKFJUQ19CY2QyVG9CeXRlKFJUQ19UaW1lU3RydWN0LT5SVENfTWludXRlcykpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TRUNPTkRTKFJUQ19CY2QyVG9CeXRlKFJUQ19UaW1lU3RydWN0LT5SVENfU2Vjb25kcykpKTsNCisgIH0NCisgIA0KKyAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovDQorICBpZiAoUlRDX0Zvcm1hdCAhPSBSVENfRm9ybWF0X0JJTikNCisgIHsNCisgICAgdG1wcmVnID0gKCgodWludDMyX3QpKFJUQ19UaW1lU3RydWN0LT5SVENfSG91cnMpIDw8IDE2KSB8IFwNCisgICAgICAgICAgICAgKCh1aW50MzJfdCkoUlRDX1RpbWVTdHJ1Y3QtPlJUQ19NaW51dGVzKSA8PCA4KSB8IFwNCisgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfVGltZVN0cnVjdC0+UlRDX1NlY29uZHMpIHwgXA0KKyAgICAgICAgICAgICAoKHVpbnQzMl90KShSVENfVGltZVN0cnVjdC0+UlRDX0gxMikgPDwgMTYpKTsgDQorICB9ICANCisgIGVsc2UNCisgIHsNCisgICAgdG1wcmVnID0gKHVpbnQzMl90KSgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKFJUQ19UaW1lU3RydWN0LT5SVENfSG91cnMpIDw8IDE2KSB8IFwNCisgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihSVENfVGltZVN0cnVjdC0+UlRDX01pbnV0ZXMpIDw8IDgpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKFJUQ19UaW1lU3RydWN0LT5SVENfU2Vjb25kcykpIHwgXA0KKyAgICAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClSVENfVGltZVN0cnVjdC0+UlRDX0gxMikgPDwgMTYpKTsNCisgIH0gIA0KKw0KKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweENBOw0KKyAgUlRDLT5XUFIgPSAweDUzOw0KKw0KKyAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8NCisgIGlmIChSVENfRW50ZXJJbml0TW9kZSgpID09IEVSUk9SKQ0KKyAgew0KKyAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0gDQorICBlbHNlDQorICB7DQorICAgIC8qIFNldCB0aGUgUlRDX1RSIHJlZ2lzdGVyICovDQorICAgIFJUQy0+VFIgPSAodWludDMyX3QpKHRtcHJlZyAmIFJUQ19UUl9SRVNFUlZFRF9NQVNLKTsNCisNCisgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgIFJUQ19FeGl0SW5pdE1vZGUoKTsgDQorDQorICAgIGlmKFJUQ19XYWl0Rm9yU3luY2hybygpID09IEVSUk9SKQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gU1VDQ0VTUzsNCisgICAgfQ0KKyAgDQorICB9DQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgDQorICAgIA0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBSVENfVGltZVN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZQ0KKyAgKiAgICAgICAgIChUaW1lID0gMDBoOjAwbWluOjAwc2VjKS4NCisgICogQHBhcmFtICBSVENfVGltZVN0cnVjdDogcG9pbnRlciB0byBhIFJUQ19UaW1lVHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggd2lsbCBiZSANCisgICogICAgICAgICBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX1RpbWVTdHJ1Y3RJbml0KFJUQ19UaW1lVHlwZURlZiogUlRDX1RpbWVTdHJ1Y3QpDQorew0KKyAgLyogVGltZSA9IDAwaDowMG1pbjowMHNlYyAqLw0KKyAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19IMTIgPSBSVENfSDEyX0FNOw0KKyAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19Ib3VycyA9IDA7DQorICBSVENfVGltZVN0cnVjdC0+UlRDX01pbnV0ZXMgPSAwOw0KKyAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19TZWNvbmRzID0gMDsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEdldCB0aGUgUlRDIGN1cnJlbnQgVGltZS4NCisgICogQHBhcmFtICBSVENfRm9ybWF0OiBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgcmV0dXJuZWQgcGFyYW1ldGVycy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlICBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfRm9ybWF0X0JJTjogIEJpbmFyeSBkYXRhIGZvcm1hdCANCisgICogICAgICAgICAgICBAYXJnIFJUQ19Gb3JtYXRfQkNEOiAgQkNEIGRhdGEgZm9ybWF0DQorICAqIEBwYXJhbSAgUlRDX1RpbWVTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBSVENfVGltZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgd2lsbCANCisgICogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSByZXR1cm5lZCBjdXJyZW50IHRpbWUgY29uZmlndXJhdGlvbi4gICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfR2V0VGltZSh1aW50MzJfdCBSVENfRm9ybWF0LCBSVENfVGltZVR5cGVEZWYqIFJUQ19UaW1lU3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19GT1JNQVQoUlRDX0Zvcm1hdCkpOw0KKw0KKyAgLyogR2V0IHRoZSBSVENfVFIgcmVnaXN0ZXIgKi8NCisgIHRtcHJlZyA9ICh1aW50MzJfdCkoUlRDLT5UUiAmIFJUQ19UUl9SRVNFUlZFRF9NQVNLKTsgDQorICANCisgIC8qIEZpbGwgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd2l0aCB0aGUgcmVhZCBwYXJhbWV0ZXJzICovDQorICBSVENfVGltZVN0cnVjdC0+UlRDX0hvdXJzID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVKSkgPj4gMTYpOw0KKyAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19NaW51dGVzID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUpKSA+PjgpOw0KKyAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19TZWNvbmRzID0gKHVpbnQ4X3QpKHRtcHJlZyAmIChSVENfVFJfU1QgfCBSVENfVFJfU1UpKTsNCisgIFJUQ19UaW1lU3RydWN0LT5SVENfSDEyID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX1RSX1BNKSkgPj4gMTYpOyAgDQorDQorICAvKiBDaGVjayB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3JtYXQgKi8NCisgIGlmIChSVENfRm9ybWF0ID09IFJUQ19Gb3JtYXRfQklOKQ0KKyAgew0KKyAgICAvKiBDb252ZXJ0IHRoZSBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB0byBCaW5hcnkgZm9ybWF0ICovDQorICAgIFJUQ19UaW1lU3RydWN0LT5SVENfSG91cnMgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShSVENfVGltZVN0cnVjdC0+UlRDX0hvdXJzKTsNCisgICAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19NaW51dGVzID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoUlRDX1RpbWVTdHJ1Y3QtPlJUQ19NaW51dGVzKTsNCisgICAgUlRDX1RpbWVTdHJ1Y3QtPlJUQ19TZWNvbmRzID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoUlRDX1RpbWVTdHJ1Y3QtPlJUQ19TZWNvbmRzKTsgICANCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0IHRoZSBSVEMgY3VycmVudCBkYXRlLg0KKyAgKiBAcGFyYW0gIFJUQ19Gb3JtYXQ6IHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBlbnRlcmVkIHBhcmFtZXRlcnMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0Zvcm1hdF9CSU46ICBCaW5hcnkgZGF0YSBmb3JtYXQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRm9ybWF0X0JDRDogIEJDRCBkYXRhIGZvcm1hdA0KKyAgKiBAcGFyYW0gIFJUQ19EYXRlU3RydWN0OiBwb2ludGVyIHRvIGEgUlRDX0RhdGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgUlRDLg0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFJUQyBEYXRlIHJlZ2lzdGVyIGlzIGNvbmZpZ3VyZWQNCisgICogICAgICAgICAgLSBFUlJPUjogUlRDIERhdGUgcmVnaXN0ZXIgaXMgbm90IGNvbmZpZ3VyZWQNCisgICovDQorRXJyb3JTdGF0dXMgUlRDX1NldERhdGUodWludDMyX3QgUlRDX0Zvcm1hdCwgUlRDX0RhdGVUeXBlRGVmKiBSVENfRGF0ZVN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChSVENfRm9ybWF0KSk7DQorDQorICBpZiAoKFJUQ19Gb3JtYXQgPT0gUlRDX0Zvcm1hdF9CSU4pICYmICgoUlRDX0RhdGVTdHJ1Y3QtPlJUQ19Nb250aCAmIDB4MTApID09IDB4MTApKQ0KKyAgew0KKyAgICBSVENfRGF0ZVN0cnVjdC0+UlRDX01vbnRoID0gKFJUQ19EYXRlU3RydWN0LT5SVENfTW9udGggJiAodWludDMyX3QpfigweDEwKSkgKyAweDBBOw0KKyAgfSAgDQorICBpZiAoUlRDX0Zvcm1hdCA9PSBSVENfRm9ybWF0X0JJTikNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19ZRUFSKFJUQ19EYXRlU3RydWN0LT5SVENfWWVhcikpOw0KKyAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX01PTlRIKFJUQ19EYXRlU3RydWN0LT5SVENfTW9udGgpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19EQVRFKFJUQ19EYXRlU3RydWN0LT5SVENfRGF0ZSkpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX1lFQVIoUlRDX0JjZDJUb0J5dGUoUlRDX0RhdGVTdHJ1Y3QtPlJUQ19ZZWFyKSkpOw0KKyAgICB0bXByZWcgPSBSVENfQmNkMlRvQnl0ZShSVENfRGF0ZVN0cnVjdC0+UlRDX01vbnRoKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19NT05USCh0bXByZWcpKTsNCisgICAgdG1wcmVnID0gUlRDX0JjZDJUb0J5dGUoUlRDX0RhdGVTdHJ1Y3QtPlJUQ19EYXRlKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19EQVRFKHRtcHJlZykpOw0KKyAgfQ0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19XRUVLREFZKFJUQ19EYXRlU3RydWN0LT5SVENfV2Vla0RheSkpOw0KKw0KKyAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovDQorICBpZiAoUlRDX0Zvcm1hdCAhPSBSVENfRm9ybWF0X0JJTikNCisgIHsNCisgICAgdG1wcmVnID0gKCgoKHVpbnQzMl90KVJUQ19EYXRlU3RydWN0LT5SVENfWWVhcikgPDwgMTYpIHwgXA0KKyAgICAgICAgICAgICAgKCgodWludDMyX3QpUlRDX0RhdGVTdHJ1Y3QtPlJUQ19Nb250aCkgPDwgOCkgfCBcDQorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19EYXRlU3RydWN0LT5SVENfRGF0ZSkgfCBcDQorICAgICAgICAgICAgICAoKCh1aW50MzJfdClSVENfRGF0ZVN0cnVjdC0+UlRDX1dlZWtEYXkpIDw8IDEzKSk7IA0KKyAgfSAgDQorICBlbHNlDQorICB7DQorICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKFJUQ19EYXRlU3RydWN0LT5SVENfWWVhcikgPDwgMTYpIHwgXA0KKyAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihSVENfRGF0ZVN0cnVjdC0+UlRDX01vbnRoKSA8PCA4KSB8IFwNCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoUlRDX0RhdGVTdHJ1Y3QtPlJUQ19EYXRlKSkgfCBcDQorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19EYXRlU3RydWN0LT5SVENfV2Vla0RheSA8PCAxMykpOw0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweENBOw0KKyAgUlRDLT5XUFIgPSAweDUzOw0KKw0KKyAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8NCisgIGlmIChSVENfRW50ZXJJbml0TW9kZSgpID09IEVSUk9SKQ0KKyAgew0KKyAgICBzdGF0dXMgPSBFUlJPUjsNCisgIH0gDQorICBlbHNlDQorICB7DQorICAgIC8qIFNldCB0aGUgUlRDX0RSIHJlZ2lzdGVyICovDQorICAgIFJUQy0+RFIgPSAodWludDMyX3QpKHRtcHJlZyAmIFJUQ19EUl9SRVNFUlZFRF9NQVNLKTsNCisNCisgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgIFJUQ19FeGl0SW5pdE1vZGUoKTsgDQorDQorICAgIGlmKFJUQ19XYWl0Rm9yU3luY2hybygpID09IEVSUk9SKQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gU1VDQ0VTUzsNCisgICAgfQ0KKyAgfQ0KKyAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4RkY7ICAgDQorICANCisgIHJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggUlRDX0RhdGVTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUNCisgICogICAgICAgICAoTW9uZGF5LCBKYW51YXJ5IDAxIHh4MDApLg0KKyAgKiBAcGFyYW0gIFJUQ19EYXRlU3RydWN0OiBwb2ludGVyIHRvIGEgUlRDX0RhdGVUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsIGJlIA0KKyAgKiAgICAgICAgIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfRGF0ZVN0cnVjdEluaXQoUlRDX0RhdGVUeXBlRGVmKiBSVENfRGF0ZVN0cnVjdCkNCit7DQorICAvKiBNb25kYXksIEphbnVhcnkgMDEgeHgwMCAqLw0KKyAgUlRDX0RhdGVTdHJ1Y3QtPlJUQ19XZWVrRGF5ID0gUlRDX1dlZWtkYXlfTW9uZGF5Ow0KKyAgUlRDX0RhdGVTdHJ1Y3QtPlJUQ19EYXRlID0gMTsNCisgIFJUQ19EYXRlU3RydWN0LT5SVENfTW9udGggPSBSVENfTW9udGhfSmFudWFyeTsNCisgIFJUQ19EYXRlU3RydWN0LT5SVENfWWVhciA9IDA7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEdldCB0aGUgUlRDIGN1cnJlbnQgZGF0ZS4gDQorICAqIEBwYXJhbSAgUlRDX0Zvcm1hdDogc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHJldHVybmVkIHBhcmFtZXRlcnMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfRm9ybWF0X0JJTjogQmluYXJ5IGRhdGEgZm9ybWF0IA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0Zvcm1hdF9CQ0Q6IEJDRCBkYXRhIGZvcm1hdA0KKyAgKiBAcGFyYW0gUlRDX0RhdGVTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBSVENfRGF0ZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgd2lsbCANCisgICogICAgICAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSByZXR1cm5lZCBjdXJyZW50IGRhdGUgY29uZmlndXJhdGlvbi4gICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfR2V0RGF0ZSh1aW50MzJfdCBSVENfRm9ybWF0LCBSVENfRGF0ZVR5cGVEZWYqIFJUQ19EYXRlU3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19GT1JNQVQoUlRDX0Zvcm1hdCkpOw0KKyAgDQorICAvKiBHZXQgdGhlIFJUQ19UUiByZWdpc3RlciAqLw0KKyAgdG1wcmVnID0gKHVpbnQzMl90KShSVEMtPkRSICYgUlRDX0RSX1JFU0VSVkVEX01BU0spOyANCisNCisgIC8qIEZpbGwgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd2l0aCB0aGUgcmVhZCBwYXJhbWV0ZXJzICovDQorICBSVENfRGF0ZVN0cnVjdC0+UlRDX1llYXIgPSAodWludDhfdCkoKHRtcHJlZyAmIChSVENfRFJfWVQgfCBSVENfRFJfWVUpKSA+PiAxNik7DQorICBSVENfRGF0ZVN0cnVjdC0+UlRDX01vbnRoID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX0RSX01UIHwgUlRDX0RSX01VKSkgPj4gOCk7DQorICBSVENfRGF0ZVN0cnVjdC0+UlRDX0RhdGUgPSAodWludDhfdCkodG1wcmVnICYgKFJUQ19EUl9EVCB8IFJUQ19EUl9EVSkpOw0KKyAgUlRDX0RhdGVTdHJ1Y3QtPlJUQ19XZWVrRGF5ID0gKHVpbnQ4X3QpKCh0bXByZWcgJiAoUlRDX0RSX1dEVSkpID4+IDEzKTsgIA0KKw0KKyAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovDQorICBpZiAoUlRDX0Zvcm1hdCA9PSBSVENfRm9ybWF0X0JJTikNCisgIHsNCisgICAgLyogQ29udmVydCB0aGUgc3RydWN0dXJlIHBhcmFtZXRlcnMgdG8gQmluYXJ5IGZvcm1hdCAqLw0KKyAgICBSVENfRGF0ZVN0cnVjdC0+UlRDX1llYXIgPSAodWludDhfdClSVENfQmNkMlRvQnl0ZShSVENfRGF0ZVN0cnVjdC0+UlRDX1llYXIpOw0KKyAgICBSVENfRGF0ZVN0cnVjdC0+UlRDX01vbnRoID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoUlRDX0RhdGVTdHJ1Y3QtPlJUQ19Nb250aCk7DQorICAgIFJUQ19EYXRlU3RydWN0LT5SVENfRGF0ZSA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKFJUQ19EYXRlU3RydWN0LT5SVENfRGF0ZSk7IA0KKyAgfQ0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSVENfR3JvdXAzIEFsYXJtcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBBbGFybXMgKEFsYXJtIEEgYW5kIEFsYXJtIEIpIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgIEFsYXJtcyAoQWxhcm0gQSBhbmQgQWxhcm0gQikgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZSBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gcHJvZ3JhbSBhbmQgcmVhZCB0aGUgUlRDIEFsYXJtcy4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgU2V0IHRoZSBzcGVjaWZpZWQgUlRDIEFsYXJtLg0KKyAgKiBAbm90ZSAgIFRoZSBBbGFybSByZWdpc3RlciBjYW4gb25seSBiZSB3cml0dGVuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgQWxhcm0NCisgICogICAgICAgICBpcyBkaXNhYmxlZCAoVXNlIHRoZSBSVENfQWxhcm1DbWQoRElTQUJMRSkpLiAgICANCisgICogQHBhcmFtICBSVENfRm9ybWF0OiBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgcmV0dXJuZWQgcGFyYW1ldGVycy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19Gb3JtYXRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRm9ybWF0X0JDRDogQkNEIGRhdGEgZm9ybWF0DQorICAqIEBwYXJhbSAgUlRDX0FsYXJtOiBzcGVjaWZpZXMgdGhlIGFsYXJtIHRvIGJlIGNvbmZpZ3VyZWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfQWxhcm1fQTogdG8gc2VsZWN0IEFsYXJtIEENCisgICogICAgICAgICAgICBAYXJnIFJUQ19BbGFybV9COiB0byBzZWxlY3QgQWxhcm0gQiAgDQorICAqIEBwYXJhbSAgUlRDX0FsYXJtU3RydWN0OiBwb2ludGVyIHRvIGEgUlRDX0FsYXJtVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBhbGFybSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX1NldEFsYXJtKHVpbnQzMl90IFJUQ19Gb3JtYXQsIHVpbnQzMl90IFJUQ19BbGFybSwgUlRDX0FsYXJtVHlwZURlZiogUlRDX0FsYXJtU3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChSVENfRm9ybWF0KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNKFJUQ19BbGFybSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0FMQVJNX01BU0soUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1NYXNrKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9TRUwoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1EYXRlV2Vla0RheVNlbCkpOw0KKw0KKyAgaWYgKFJUQ19Gb3JtYXQgPT0gUlRDX0Zvcm1hdF9CSU4pDQorICB7DQorICAgIGlmICgoUlRDLT5DUiAmIFJUQ19DUl9GTVQpICE9ICh1aW50MzJfdClSRVNFVCkNCisgICAgew0KKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjEyKFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfSG91cnMpKTsNCisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0gxMihSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX0gxMikpOw0KKyAgICB9IA0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX0gxMiA9IDB4MDA7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMjQoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19Ib3VycykpOw0KKyAgICB9DQorICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX01pbnV0ZXMpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TRUNPTkRTKFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfU2Vjb25kcykpOw0KKyAgICANCisgICAgaWYoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1EYXRlV2Vla0RheVNlbCA9PSBSVENfQWxhcm1EYXRlV2Vla0RheVNlbF9EYXRlKQ0KKyAgICB7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfREFURShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5KSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19BTEFSTV9EQVRFX1dFRUtEQVlfV0VFS0RBWShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5KSk7DQorICAgIH0NCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgaWYgKChSVEMtPkNSICYgUlRDX0NSX0ZNVCkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgICB7DQorICAgICAgdG1wcmVnID0gUlRDX0JjZDJUb0J5dGUoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19Ib3Vycyk7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSMTIodG1wcmVnKSk7DQorICAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IMTIoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19IMTIpKTsNCisgICAgfSANCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19IMTIgPSAweDAwOw0KKyAgICAgIGFzc2VydF9wYXJhbShJU19SVENfSE9VUjI0KFJUQ19CY2QyVG9CeXRlKFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfSG91cnMpKSk7DQorICAgIH0NCisgICAgDQorICAgIGFzc2VydF9wYXJhbShJU19SVENfTUlOVVRFUyhSVENfQmNkMlRvQnl0ZShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX01pbnV0ZXMpKSk7DQorICAgIGFzc2VydF9wYXJhbShJU19SVENfU0VDT05EUyhSVENfQmNkMlRvQnl0ZShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX1NlY29uZHMpKSk7DQorICAgIA0KKyAgICBpZihSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5U2VsID09IFJUQ19BbGFybURhdGVXZWVrRGF5U2VsX0RhdGUpDQorICAgIHsNCisgICAgICB0bXByZWcgPSBSVENfQmNkMlRvQnl0ZShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5KTsNCisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9EQVRFKHRtcHJlZykpOyAgICANCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICB0bXByZWcgPSBSVENfQmNkMlRvQnl0ZShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5KTsNCisgICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNX0RBVEVfV0VFS0RBWV9XRUVLREFZKHRtcHJlZykpOyAgICAgIA0KKyAgICB9ICAgIA0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovDQorICBpZiAoUlRDX0Zvcm1hdCAhPSBSVENfRm9ybWF0X0JJTikNCisgIHsNCisgICAgdG1wcmVnID0gKCgodWludDMyX3QpKFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfSG91cnMpIDw8IDE2KSB8IFwNCisgICAgICAgICAgICAgICgodWludDMyX3QpKFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfTWludXRlcykgPDwgOCkgfCBcDQorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfU2Vjb25kcykgfCBcDQorICAgICAgICAgICAgICAoKHVpbnQzMl90KShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX0gxMikgPDwgMTYpIHwgXA0KKyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1EYXRlV2Vla0RheSkgPDwgMjQpIHwgXA0KKyAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5U2VsKSB8IFwNCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1NYXNrKSk7IA0KKyAgfSAgDQorICBlbHNlDQorICB7DQorICAgIHRtcHJlZyA9ICgoKHVpbnQzMl90KVJUQ19CeXRlVG9CY2QyKFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfSG91cnMpIDw8IDE2KSB8IFwNCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19NaW51dGVzKSA8PCA4KSB8IFwNCisgICAgICAgICAgICAgICgodWludDMyX3QpUlRDX0J5dGVUb0JjZDIoUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19TZWNvbmRzKSkgfCBcDQorICAgICAgICAgICAgICAoKHVpbnQzMl90KShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX0gxMikgPDwgMTYpIHwgXA0KKyAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQnl0ZVRvQmNkMihSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5KSA8PCAyNCkgfCBcDQorICAgICAgICAgICAgICAoKHVpbnQzMl90KVJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtRGF0ZVdlZWtEYXlTZWwpIHwgXA0KKyAgICAgICAgICAgICAgKCh1aW50MzJfdClSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybU1hc2spKTsgDQorICB9IA0KKw0KKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweENBOw0KKyAgUlRDLT5XUFIgPSAweDUzOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBBbGFybSByZWdpc3RlciAqLw0KKyAgaWYgKFJUQ19BbGFybSA9PSBSVENfQWxhcm1fQSkNCisgIHsNCisgICAgUlRDLT5BTFJNQVIgPSAodWludDMyX3QpdG1wcmVnOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBSVEMtPkFMUk1CUiA9ICh1aW50MzJfdCl0bXByZWc7DQorICB9DQorDQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBSVENfQWxhcm1TdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUNCisgICogICAgICAgICAoVGltZSA9IDAwaDowMG1uOjAwc2VjIC8gRGF0ZSA9IDFzdCBkYXkgb2YgdGhlIG1vbnRoL01hc2sgPQ0KKyAgKiAgICAgICAgIGFsbCBmaWVsZHMgYXJlIG1hc2tlZCkuDQorICAqIEBwYXJhbSAgUlRDX0FsYXJtU3RydWN0OiBwb2ludGVyIHRvIGEgQHJlZiBSVENfQWxhcm1UeXBlRGVmIHN0cnVjdHVyZSB3aGljaA0KKyAgKiAgICAgICAgIHdpbGwgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJUQ19BbGFybVN0cnVjdEluaXQoUlRDX0FsYXJtVHlwZURlZiogUlRDX0FsYXJtU3RydWN0KQ0KK3sNCisgIC8qIEFsYXJtIFRpbWUgU2V0dGluZ3MgOiBUaW1lID0gMDBoOjAwbW46MDBzZWMgKi8NCisgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfSDEyID0gUlRDX0gxMl9BTTsNCisgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfSG91cnMgPSAwOw0KKyAgUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19NaW51dGVzID0gMDsNCisgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfU2Vjb25kcyA9IDA7DQorDQorICAvKiBBbGFybSBEYXRlIFNldHRpbmdzIDogRGF0ZSA9IDFzdCBkYXkgb2YgdGhlIG1vbnRoICovDQorICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5U2VsID0gUlRDX0FsYXJtRGF0ZVdlZWtEYXlTZWxfRGF0ZTsNCisgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtRGF0ZVdlZWtEYXkgPSAxOw0KKw0KKyAgLyogQWxhcm0gTWFza3MgU2V0dGluZ3MgOiBNYXNrID0gIGFsbCBmaWVsZHMgYXJlIG5vdCBtYXNrZWQgKi8NCisgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtTWFzayA9IFJUQ19BbGFybU1hc2tfTm9uZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgR2V0IHRoZSBSVEMgQWxhcm0gdmFsdWUgYW5kIG1hc2tzLg0KKyAgKiBAcGFyYW0gIFJUQ19Gb3JtYXQ6IHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQgcGFyYW1ldGVycy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19Gb3JtYXRfQklOOiBCaW5hcnkgZGF0YSBmb3JtYXQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRm9ybWF0X0JDRDogQkNEIGRhdGEgZm9ybWF0DQorICAqIEBwYXJhbSAgUlRDX0FsYXJtOiBzcGVjaWZpZXMgdGhlIGFsYXJtIHRvIGJlIHJlYWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfQWxhcm1fQTogdG8gc2VsZWN0IEFsYXJtIEENCisgICogICAgICAgICAgICBAYXJnIFJUQ19BbGFybV9COiB0byBzZWxlY3QgQWxhcm0gQiAgDQorICAqIEBwYXJhbSAgUlRDX0FsYXJtU3RydWN0OiBwb2ludGVyIHRvIGEgUlRDX0FsYXJtVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCB3aWxsIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIG91dHB1dCBhbGFybSBjb25maWd1cmF0aW9uIHZhbHVlcy4gICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfR2V0QWxhcm0odWludDMyX3QgUlRDX0Zvcm1hdCwgdWludDMyX3QgUlRDX0FsYXJtLCBSVENfQWxhcm1UeXBlRGVmKiBSVENfQWxhcm1TdHJ1Y3QpDQorew0KKyAgdWludDMyX3QgdG1wcmVnID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0ZPUk1BVChSVENfRm9ybWF0KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMQVJNKFJUQ19BbGFybSkpOyANCisNCisgIC8qIEdldCB0aGUgUlRDX0FMUk14UiByZWdpc3RlciAqLw0KKyAgaWYgKFJUQ19BbGFybSA9PSBSVENfQWxhcm1fQSkNCisgIHsNCisgICAgdG1wcmVnID0gKHVpbnQzMl90KShSVEMtPkFMUk1BUik7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHRtcHJlZyA9ICh1aW50MzJfdCkoUlRDLT5BTFJNQlIpOw0KKyAgfQ0KKw0KKyAgLyogRmlsbCB0aGUgc3RydWN0dXJlIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLw0KKyAgUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19Ib3VycyA9ICh1aW50MzJfdCkoKHRtcHJlZyAmIChSVENfQUxSTUFSX0hUIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0FMUk1BUl9IVSkpID4+IDE2KTsNCisgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtVGltZS5SVENfTWludXRlcyA9ICh1aW50MzJfdCkoKHRtcHJlZyAmIChSVENfQUxSTUFSX01OVCB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUQ19BTFJNQVJfTU5VKSkgPj4gOCk7DQorICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX1NlY29uZHMgPSAodWludDMyX3QpKHRtcHJlZyAmIChSVENfQUxSTUFSX1NUIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0FMUk1BUl9TVSkpOw0KKyAgUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19IMTIgPSAodWludDMyX3QpKCh0bXByZWcgJiBSVENfQUxSTUFSX1BNKSA+PiAxNik7DQorICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5ID0gKHVpbnQzMl90KSgodG1wcmVnICYgKFJUQ19BTFJNQVJfRFQgfCBSVENfQUxSTUFSX0RVKSkgPj4gMjQpOw0KKyAgUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1EYXRlV2Vla0RheVNlbCA9ICh1aW50MzJfdCkodG1wcmVnICYgUlRDX0FMUk1BUl9XRFNFTCk7DQorICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybU1hc2sgPSAodWludDMyX3QpKHRtcHJlZyAmIFJUQ19BbGFybU1hc2tfQWxsKTsNCisNCisgIGlmIChSVENfRm9ybWF0ID09IFJUQ19Gb3JtYXRfQklOKQ0KKyAgew0KKyAgICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX0hvdXJzID0gUlRDX0JjZDJUb0J5dGUoUlRDX0FsYXJtU3RydWN0LT4gXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0FsYXJtVGltZS5SVENfSG91cnMpOw0KKyAgICBSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybVRpbWUuUlRDX01pbnV0ZXMgPSBSVENfQmNkMlRvQnl0ZShSVENfQWxhcm1TdHJ1Y3QtPiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfQWxhcm1UaW1lLlJUQ19NaW51dGVzKTsNCisgICAgUlRDX0FsYXJtU3RydWN0LT5SVENfQWxhcm1UaW1lLlJUQ19TZWNvbmRzID0gUlRDX0JjZDJUb0J5dGUoUlRDX0FsYXJtU3RydWN0LT4gXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRDX0FsYXJtVGltZS5SVENfU2Vjb25kcyk7DQorICAgIFJUQ19BbGFybVN0cnVjdC0+UlRDX0FsYXJtRGF0ZVdlZWtEYXkgPSBSVENfQmNkMlRvQnl0ZShSVENfQWxhcm1TdHJ1Y3QtPlJUQ19BbGFybURhdGVXZWVrRGF5KTsNCisgIH0gIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgUlRDIEFsYXJtLg0KKyAgKiBAcGFyYW0gIFJUQ19BbGFybTogc3BlY2lmaWVzIHRoZSBhbGFybSB0byBiZSBjb25maWd1cmVkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0FsYXJtX0E6IHRvIHNlbGVjdCBBbGFybSBBDQorICAqICAgICAgICAgICAgQGFyZyBSVENfQWxhcm1fQjogdG8gc2VsZWN0IEFsYXJtIEIgIA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBhbGFybS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBBbiBFcnJvclN0YXR1cyBlbnVtZXJhdGlvbiB2YWx1ZToNCisgICogICAgICAgICAgLSBTVUNDRVNTOiBSVEMgQWxhcm0gaXMgZW5hYmxlZC9kaXNhYmxlZA0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBSVEMgQWxhcm0gaXMgbm90IGVuYWJsZWQvZGlzYWJsZWQgIA0KKyAgKi8NCitFcnJvclN0YXR1cyBSVENfQWxhcm1DbWQodWludDMyX3QgUlRDX0FsYXJtLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgX19JTyB1aW50MzJfdCBhbGFybWNvdW50ZXIgPSAweDAwOw0KKyAgdWludDMyX3QgYWxhcm1zdGF0dXMgPSAweDAwOw0KKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7DQorICAgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfQ01EX0FMQVJNKFJUQ19BbGFybSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgQWxhcm0gc3RhdGUgKi8NCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICBSVEMtPkNSIHw9ICh1aW50MzJfdClSVENfQWxhcm07DQorDQorICAgIHN0YXR1cyA9IFNVQ0NFU1M7ICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgeyANCisgICAgLyogRGlzYWJsZSB0aGUgQWxhcm0gaW4gUlRDX0NSIHJlZ2lzdGVyICovDQorICAgIFJUQy0+Q1IgJj0gKHVpbnQzMl90KX5SVENfQWxhcm07DQorICAgDQorICAgIC8qIFdhaXQgdGlsbCBSVEMgQUxSeFdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8NCisgICAgZG8NCisgICAgew0KKyAgICAgIGFsYXJtc3RhdHVzID0gUlRDLT5JU1IgJiAoUlRDX0FsYXJtID4+IDgpOw0KKyAgICAgIGFsYXJtY291bnRlcisrOyAgDQorICAgIH0gd2hpbGUoKGFsYXJtY291bnRlciAhPSBJTklUTU9ERV9USU1FT1VUKSAmJiAoYWxhcm1zdGF0dXMgPT0gMHgwMCkpOw0KKyAgICANCisgICAgaWYgKChSVEMtPklTUiAmIChSVENfQWxhcm0gPj4gOCkpID09IFJFU0VUKQ0KKyAgICB7DQorICAgICAgc3RhdHVzID0gRVJST1I7DQorICAgIH0gDQorICAgIGVsc2UNCisgICAgew0KKyAgICAgIHN0YXR1cyA9IFNVQ0NFU1M7DQorICAgIH0gICAgICAgIA0KKyAgfSANCisNCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweEZGOyANCisgIA0KKyAgcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0dyb3VwNCBXYWtlVXAgVGltZXIgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgV2FrZVVwIFRpbWVyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICBXYWtlVXAgVGltZXIgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZSBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gcHJvZ3JhbSBhbmQgcmVhZCB0aGUgUlRDIFdha2VVcC4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgUlRDIFdha2V1cCBjbG9jayBzb3VyY2UuDQorICAqIEBub3RlICAgVGhlIFdha2VVcCBDbG9jayBzb3VyY2UgY2FuIG9ubHkgYmUgY2hhbmdlZCB3aGVuIHRoZSBSVEMgV2FrZVVwDQorICAqICAgICAgICAgaXMgZGlzYWJsZWQgKFVzZSB0aGUgUlRDX1dha2VVcENtZChESVNBQkxFKSkuICAgICAgDQorICAqIEBwYXJhbSAgUlRDX1dha2VVcENsb2NrOiBXYWtldXAgQ2xvY2sgc291cmNlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1dha2VVcENsb2NrX1JUQ0NMS19EaXYxNjogUlRDIFdha2V1cCBDb3VudGVyIENsb2NrID0gUlRDQ0xLLzE2DQorICAqICAgICAgICAgICAgQGFyZyBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0Rpdjg6IFJUQyBXYWtldXAgQ291bnRlciBDbG9jayA9IFJUQ0NMSy84DQorICAqICAgICAgICAgICAgQGFyZyBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0RpdjQ6IFJUQyBXYWtldXAgQ291bnRlciBDbG9jayA9IFJUQ0NMSy80DQorICAqICAgICAgICAgICAgQGFyZyBSVENfV2FrZVVwQ2xvY2tfUlRDQ0xLX0RpdjI6IFJUQyBXYWtldXAgQ291bnRlciBDbG9jayA9IFJUQ0NMSy8yDQorICAqICAgICAgICAgICAgQGFyZyBSVENfV2FrZVVwQ2xvY2tfQ0tfU1BSRV8xNmJpdHM6IFJUQyBXYWtldXAgQ291bnRlciBDbG9jayA9IENLX1NQUkUNCisgICogICAgICAgICAgICBAYXJnIFJUQ19XYWtlVXBDbG9ja19DS19TUFJFXzE3Yml0czogUlRDIFdha2V1cCBDb3VudGVyIENsb2NrID0gQ0tfU1BSRQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfV2FrZVVwQ2xvY2tDb25maWcodWludDMyX3QgUlRDX1dha2VVcENsb2NrKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX1dBS0VVUF9DTE9DSyhSVENfV2FrZVVwQ2xvY2spKTsNCisNCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisNCisgIC8qIENsZWFyIHRoZSBXYWtldXAgVGltZXIgY2xvY2sgc291cmNlIGJpdHMgaW4gQ1IgcmVnaXN0ZXIgKi8NCisgIFJUQy0+Q1IgJj0gKHVpbnQzMl90KX5SVENfQ1JfV1VDS1NFTDsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgY2xvY2sgc291cmNlICovDQorICBSVEMtPkNSIHw9ICh1aW50MzJfdClSVENfV2FrZVVwQ2xvY2s7DQorICANCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweEZGOyANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgUlRDIFdha2V1cCBjb3VudGVyLg0KKyAgKiBAbm90ZSAgIFRoZSBSVEMgV2FrZVVwIGNvdW50ZXIgY2FuIG9ubHkgYmUgd3JpdHRlbiB3aGVuIHRoZSBSVEMgV2FrZVVwDQorICAqICAgICAgICAgaXMgZGlzYWJsZWQgKFVzZSB0aGUgUlRDX1dha2VVcENtZChESVNBQkxFKSkuICAgICAgICANCisgICogQHBhcmFtICBSVENfV2FrZVVwQ291bnRlcjogc3BlY2lmaWVzIHRoZSBXYWtlVXAgY291bnRlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAweDAwMDAgdG8gMHhGRkZGLiANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX1NldFdha2VVcENvdW50ZXIodWludDMyX3QgUlRDX1dha2VVcENvdW50ZXIpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfV0FLRVVQX0NPVU5URVIoUlRDX1dha2VVcENvdW50ZXIpKTsNCisgIA0KKyAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweENBOw0KKyAgUlRDLT5XUFIgPSAweDUzOw0KKyAgDQorICAvKiBDb25maWd1cmUgdGhlIFdha2V1cCBUaW1lciBjb3VudGVyICovDQorICBSVEMtPldVVFIgPSAodWludDMyX3QpUlRDX1dha2VVcENvdW50ZXI7DQorICANCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweEZGOyANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgUlRDIFdha2VVcCB0aW1lciBjb3VudGVyIHZhbHVlLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBUaGUgUlRDIFdha2VVcCBDb3VudGVyIHZhbHVlLg0KKyAgKi8NCit1aW50MzJfdCBSVENfR2V0V2FrZVVwQ291bnRlcih2b2lkKQ0KK3sNCisgIC8qIEdldCB0aGUgY291bnRlciB2YWx1ZSAqLw0KKyAgcmV0dXJuICgodWludDMyX3QpKFJUQy0+V1VUUiAmIFJUQ19XVVRSX1dVVCkpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIERpc2FibGVzIHRoZSBSVEMgV2FrZVVwIHRpbWVyLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFdha2VVcCB0aW1lci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK0Vycm9yU3RhdHVzIFJUQ19XYWtlVXBDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIF9fSU8gdWludDMyX3Qgd3V0Y291bnRlciA9IDB4MDA7DQorICB1aW50MzJfdCB3dXR3ZnN0YXR1cyA9IDB4MDA7DQorICBFcnJvclN0YXR1cyBzdGF0dXMgPSBFUlJPUjsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4Q0E7DQorICBSVEMtPldQUiA9IDB4NTM7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBXYWtldXAgVGltZXIgKi8NCisgICAgUlRDLT5DUiB8PSAodWludDMyX3QpUlRDX0NSX1dVVEU7DQorICAgIHN0YXR1cyA9IFNVQ0NFU1M7ICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBXYWtldXAgVGltZXIgKi8NCisgICAgUlRDLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9XVVRFOw0KKyAgICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8NCisgICAgZG8NCisgICAgew0KKyAgICAgIHd1dHdmc3RhdHVzID0gUlRDLT5JU1IgJiBSVENfSVNSX1dVVFdGOw0KKyAgICAgIHd1dGNvdW50ZXIrKzsgIA0KKyAgICB9IHdoaWxlKCh3dXRjb3VudGVyICE9IElOSVRNT0RFX1RJTUVPVVQpICYmICh3dXR3ZnN0YXR1cyA9PSAweDAwKSk7DQorICAgIA0KKyAgICBpZiAoKFJUQy0+SVNSICYgUlRDX0lTUl9XVVRXRikgPT0gUkVTRVQpDQorICAgIHsNCisgICAgICBzdGF0dXMgPSBFUlJPUjsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBzdGF0dXMgPSBTVUNDRVNTOw0KKyAgICB9ICAgIA0KKyAgfQ0KKw0KKyAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4RkY7IA0KKyAgDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSVENfR3JvdXA1IERheWxpZ2h0IFNhdmluZyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBEYXlsaWdodCBTYXZpbmcgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgRGF5bGlnaHQgU2F2aW5nIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGUgZnVuY3Rpb25zIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSB0aGUgUlRDIERheUxpZ2h0IFNhdmluZy4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQWRkcyBvciBzdWJzdHJhY3Qgb25lIGhvdXIgZnJvbSB0aGUgY3VycmVudCB0aW1lLg0KKyAgKiBAcGFyYW0gIFJUQ19EYXlMaWdodFNhdmVPcGVyYXRpb246IHRoZSB2YWx1ZSBvZiBob3VyIGFkanVzdG1lbnQuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0RheUxpZ2h0U2F2aW5nX1NVQjFIOiBTdWJzdHJhY3Qgb25lIGhvdXIgKHdpbnRlciB0aW1lKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0RheUxpZ2h0U2F2aW5nX0FERDFIOiBBZGQgb25lIGhvdXIgKHN1bW1lciB0aW1lKQ0KKyAgKiBAcGFyYW0gIFJUQ19TdG9yZU9wZXJhdGlvbjogU3BlY2lmaWVzIHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBCQ0sgYml0IA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBDUiByZWdpc3RlciB0byBzdG9yZSB0aGUgb3BlcmF0aW9uLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1N0b3JlT3BlcmF0aW9uX1Jlc2V0OiBCQ0sgQml0IFJlc2V0DQorICAqICAgICAgICAgICAgQGFyZyBSVENfU3RvcmVPcGVyYXRpb25fU2V0OiBCQ0sgQml0IFNldA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfRGF5TGlnaHRTYXZpbmdDb25maWcodWludDMyX3QgUlRDX0RheUxpZ2h0U2F2aW5nLCB1aW50MzJfdCBSVENfU3RvcmVPcGVyYXRpb24pDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfREFZTElHSFRfU0FWSU5HKFJUQ19EYXlMaWdodFNhdmluZykpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19TVE9SRV9PUEVSQVRJT04oUlRDX1N0b3JlT3BlcmF0aW9uKSk7DQorDQorICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4Q0E7DQorICBSVEMtPldQUiA9IDB4NTM7DQorDQorICAvKiBDbGVhciB0aGUgYml0cyB0byBiZSBjb25maWd1cmVkICovDQorICBSVEMtPkNSICY9ICh1aW50MzJfdCl+KFJUQ19DUl9CQ0spOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBSVENfQ1IgcmVnaXN0ZXIgKi8NCisgIFJUQy0+Q1IgfD0gKHVpbnQzMl90KShSVENfRGF5TGlnaHRTYXZpbmcgfCBSVENfU3RvcmVPcGVyYXRpb24pOw0KKw0KKyAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4RkY7IA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBSVEMgRGF5IExpZ2h0IFNhdmluZyBzdG9yZWQgb3BlcmF0aW9uLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBSVEMgRGF5IExpZ2h0IFNhdmluZyBzdG9yZWQgb3BlcmF0aW9uLg0KKyAgKiAgICAgICAgICAtIFJUQ19TdG9yZU9wZXJhdGlvbl9SZXNldA0KKyAgKiAgICAgICAgICAtIFJUQ19TdG9yZU9wZXJhdGlvbl9TZXQgICAgICAgDQorICAqLw0KK3VpbnQzMl90IFJUQ19HZXRTdG9yZU9wZXJhdGlvbih2b2lkKQ0KK3sNCisgIHJldHVybiAoUlRDLT5DUiAmIFJUQ19DUl9CQ0spOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSVENfR3JvdXA2IE91dHB1dCBwaW4gQ29uZmlndXJhdGlvbiBmdW5jdGlvbg0KKyAqICBAYnJpZWYgICBPdXRwdXQgcGluIENvbmZpZ3VyYXRpb24gZnVuY3Rpb24gDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgcGluIENvbmZpZ3VyYXRpb24gZnVuY3Rpb24NCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZSBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBSVEMgT3V0cHV0IHNvdXJjZS4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgUlRDIG91dHB1dCBzb3VyY2UgKEFGT19BTEFSTSkuDQorICAqIEBwYXJhbSAgUlRDX091dHB1dDogU3BlY2lmaWVzIHdoaWNoIHNpZ25hbCB3aWxsIGJlIHJvdXRlZCB0byB0aGUgUlRDIG91dHB1dC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfT3V0cHV0X0Rpc2FibGU6IE5vIG91dHB1dCBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX091dHB1dF9BbGFybUE6IHNpZ25hbCBvZiBBbGFybUEgbWFwcGVkIHRvIG91dHB1dA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX091dHB1dF9BbGFybUI6IHNpZ25hbCBvZiBBbGFybUIgbWFwcGVkIHRvIG91dHB1dA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX091dHB1dF9XYWtlVXA6IHNpZ25hbCBvZiBXYWtlVXAgbWFwcGVkIHRvIG91dHB1dA0KKyAgKiBAcGFyYW0gIFJUQ19PdXRwdXRQb2xhcml0eTogU3BlY2lmaWVzIHRoZSBwb2xhcml0eSBvZiB0aGUgb3V0cHV0IHNpZ25hbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19PdXRwdXRQb2xhcml0eV9IaWdoOiBUaGUgb3V0cHV0IHBpbiBpcyBoaWdoIHdoZW4gdGhlIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMUkFGL0FMUkJGL1dVVEYgaXMgaGlnaCAoZGVwZW5kaW5nIG9uIE9TRUwpDQorICAqICAgICAgICAgICAgQGFyZyBSVENfT3V0cHV0UG9sYXJpdHlfTG93OiBUaGUgb3V0cHV0IHBpbiBpcyBsb3cgd2hlbiB0aGUgDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxSQUYvQUxSQkYvV1VURiBpcyBoaWdoIChkZXBlbmRpbmcgb24gT1NFTCkNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX091dHB1dENvbmZpZyh1aW50MzJfdCBSVENfT3V0cHV0LCB1aW50MzJfdCBSVENfT3V0cHV0UG9sYXJpdHkpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfT1VUUFVUKFJUQ19PdXRwdXQpKTsNCisgIGFzc2VydF9wYXJhbShJU19SVENfT1VUUFVUX1BPTChSVENfT3V0cHV0UG9sYXJpdHkpKTsNCisNCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisNCisgIC8qIENsZWFyIHRoZSBiaXRzIHRvIGJlIGNvbmZpZ3VyZWQgKi8NCisgIFJUQy0+Q1IgJj0gKHVpbnQzMl90KX4oUlRDX0NSX09TRUwgfCBSVENfQ1JfUE9MKTsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgb3V0cHV0IHNlbGVjdGlvbiBhbmQgcG9sYXJpdHkgKi8NCisgIFJUQy0+Q1IgfD0gKHVpbnQzMl90KShSVENfT3V0cHV0IHwgUlRDX091dHB1dFBvbGFyaXR5KTsNCisNCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweEZGOyANCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0dyb3VwNyBDb2Fyc2UgQ2FsaWJyYXRpb24gY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgQ29hcnNlIENhbGlicmF0aW9uIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICBDb2Fyc2UgQ2FsaWJyYXRpb24gY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIENvYXJzZSBjYWxpYnJhdGlvbiBwYXJhbWV0ZXJzLg0KKyAgKiBAcGFyYW0gIFJUQ19DYWxpYlNpZ246IHNwZWNpZmllcyB0aGUgc2lnbiBvZiB0aGUgY29hcnNlIGNhbGlicmF0aW9uIHZhbHVlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19DYWxpYlNpZ25fUG9zaXRpdmU6IFRoZSB2YWx1ZSBzaWduIGlzIHBvc2l0aXZlIA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0NhbGliU2lnbl9OZWdhdGl2ZTogVGhlIHZhbHVlIHNpZ24gaXMgbmVnYXRpdmUNCisgICogQHBhcmFtICBWYWx1ZTogdmFsdWUgb2YgY29hcnNlIGNhbGlicmF0aW9uIGV4cHJlc3NlZCBpbiBwcG0gKGNvZGVkIG9uIDUgYml0cykuDQorICAqICAgIA0KKyAgKiBAbm90ZSAgIFRoaXMgQ2FsaWJyYXRpb24gdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgNjMgd2hlbiB1c2luZyBuZWdhdGl2ZQ0KKyAgKiAgICAgICAgIHNpZ24gd2l0aCBhIDItcHBtIHN0ZXAuDQorICAqICAgICAgICAgICANCisgICogQG5vdGUgICBUaGlzIENhbGlicmF0aW9uIHZhbHVlIHNob3VsZCBiZSBiZXR3ZWVuIDAgYW5kIDEyNiB3aGVuIHVzaW5nIHBvc2l0aXZlDQorICAqICAgICAgICAgc2lnbiB3aXRoIGEgNC1wcG0gc3RlcC4NCisgICogICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOg0KKyAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFJUQyBDb2Fyc2UgY2FsaWJyYXRpb24gYXJlIGluaXRpYWxpemVkDQorICAqICAgICAgICAgIC0gRVJST1I6IFJUQyBDb2Fyc2UgY2FsaWJyYXRpb24gYXJlIG5vdCBpbml0aWFsaXplZCAgICAgDQorICAqLw0KK0Vycm9yU3RhdHVzIFJUQ19Db2Fyc2VDYWxpYkNvbmZpZyh1aW50MzJfdCBSVENfQ2FsaWJTaWduLCB1aW50MzJfdCBWYWx1ZSkNCit7DQorICBFcnJvclN0YXR1cyBzdGF0dXMgPSBFUlJPUjsNCisgICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0NBTElCX1NJR04oUlRDX0NhbGliU2lnbikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19DQUxJQl9WQUxVRShWYWx1ZSkpOyANCisNCisgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhDQTsNCisgIFJUQy0+V1BSID0gMHg1MzsNCisNCisgIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICBpZiAoUlRDX0VudGVySW5pdE1vZGUoKSA9PSBFUlJPUikNCisgIHsNCisgICAgc3RhdHVzID0gRVJST1I7DQorICB9IA0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBTZXQgdGhlIGNvYXJzZSBjYWxpYnJhdGlvbiB2YWx1ZSAqLw0KKyAgICBSVEMtPkNBTElCUiA9ICh1aW50MzJfdCkoUlRDX0NhbGliU2lnbiB8IFZhbHVlKTsNCisgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgIFJUQ19FeGl0SW5pdE1vZGUoKTsNCisgICAgDQorICAgIHN0YXR1cyA9IFNVQ0NFU1M7DQorICB9IA0KKw0KKyAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4RkY7IA0KKyAgDQorICByZXR1cm4gc3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBDb2Fyc2UgY2FsaWJyYXRpb24gcHJvY2Vzcy4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBDb2Fyc2UgY2FsaWJyYXRpb24uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6DQorICAqICAgICAgICAgIC0gU1VDQ0VTUzogUlRDIENvYXJzZSBjYWxpYnJhdGlvbiBhcmUgZW5hYmxlZC9kaXNhYmxlZA0KKyAgKiAgICAgICAgICAtIEVSUk9SOiBSVEMgQ29hcnNlIGNhbGlicmF0aW9uIGFyZSBub3QgZW5hYmxlZC9kaXNhYmxlZCAgICANCisgICovDQorRXJyb3JTdGF0dXMgUlRDX0NvYXJzZUNhbGliQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICBFcnJvclN0YXR1cyBzdGF0dXMgPSBFUlJPUjsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4Q0E7DQorICBSVEMtPldQUiA9IDB4NTM7DQorICANCisgIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICBpZiAoUlRDX0VudGVySW5pdE1vZGUoKSA9PSBFUlJPUikNCisgIHsNCisgICAgc3RhdHVzID0gIEVSUk9SOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgICAgew0KKyAgICAgIC8qIEVuYWJsZSB0aGUgQ29hcnNlIENhbGlicmF0aW9uICovDQorICAgICAgUlRDLT5DUiB8PSAodWludDMyX3QpUlRDX0NSX0RDRTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsgDQorICAgICAgLyogRGlzYWJsZSB0aGUgQ29hcnNlIENhbGlicmF0aW9uICovDQorICAgICAgUlRDLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9EQ0U7DQorICAgIH0NCisgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovDQorICAgIFJUQ19FeGl0SW5pdE1vZGUoKTsNCisgICAgDQorICAgIHN0YXR1cyA9IFNVQ0NFU1M7DQorICB9IA0KKyAgDQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgDQorICANCisgIHJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFJUQyBjbG9jayB0byBiZSBvdXRwdXQgdGhyb3VnaCB0aGUgcmVsYXRpdmUgcGluLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIGRpZ2l0YWwgY2FsaWJyYXRpb24gT3V0cHV0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfQ2FsaWJPdXRwdXRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4Q0E7DQorICBSVEMtPldQUiA9IDB4NTM7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIFJUQyBjbG9jayBvdXRwdXQgKi8NCisgICAgUlRDLT5DUiB8PSAodWludDMyX3QpUlRDX0NSX0NPRTsNCisgIH0NCisgIGVsc2UNCisgIHsgDQorICAgIC8qIERpc2FibGUgdGhlIFJUQyBjbG9jayBvdXRwdXQgKi8NCisgICAgUlRDLT5DUiAmPSAodWludDMyX3QpflJUQ19DUl9DT0U7DQorICB9DQorICANCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLw0KKyAgUlRDLT5XUFIgPSAweEZGOyANCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0dyb3VwOCBUaW1lU3RhbXAgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgVGltZVN0YW1wIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgIFRpbWVTdGFtcCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBEaXNhYmxlcyB0aGUgUlRDIFRpbWVTdGFtcCBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIA0KKyAgKiAgICAgICAgIHNwZWNpZmllZCB0aW1lIHN0YW1wIHBpbiBzdGltdWxhdGluZyBlZGdlLg0KKyAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBFZGdlOiBTcGVjaWZpZXMgdGhlIHBpbiBlZGdlIG9uIHdoaWNoIHRoZSBUaW1lU3RhbXAgaXMgDQorICAqICAgICAgICAgYWN0aXZhdGVkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfVGltZVN0YW1wRWRnZV9SaXNpbmc6IHRoZSBUaW1lIHN0YW1wIGV2ZW50IG9jY3VycyBvbiB0aGUgcmlzaW5nIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Ugb2YgdGhlIHJlbGF0ZWQgcGluLg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1RpbWVTdGFtcEVkZ2VfRmFsbGluZzogdGhlIFRpbWUgc3RhbXAgZXZlbnQgb2NjdXJzIG9uIHRoZSANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGluZyBlZGdlIG9mIHRoZSByZWxhdGVkIHBpbi4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBUaW1lU3RhbXAuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFJUQ19UaW1lU3RhbXBDbWQodWludDMyX3QgUlRDX1RpbWVTdGFtcEVkZ2UsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfVElNRVNUQU1QX0VER0UoUlRDX1RpbWVTdGFtcEVkZ2UpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAvKiBHZXQgdGhlIFJUQ19DUiByZWdpc3RlciBhbmQgY2xlYXIgdGhlIGJpdHMgdG8gYmUgY29uZmlndXJlZCAqLw0KKyAgdG1wcmVnID0gKHVpbnQzMl90KShSVEMtPkNSICYgKHVpbnQzMl90KX4oUlRDX0NSX1RTRURHRSB8IFJUQ19DUl9UU0UpKTsNCisNCisgIC8qIEdldCB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8NCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICB0bXByZWcgfD0gKHVpbnQzMl90KShSVENfVGltZVN0YW1wRWRnZSB8IFJUQ19DUl9UU0UpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICB0bXByZWcgfD0gKHVpbnQzMl90KShSVENfVGltZVN0YW1wRWRnZSk7DQorICB9DQorDQorICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4Q0E7DQorICBSVEMtPldQUiA9IDB4NTM7DQorDQorICAvKiBDb25maWd1cmUgdGhlIFRpbWUgU3RhbXAgVFNFREdFIGFuZCBFbmFibGUgYml0cyAqLw0KKyAgUlRDLT5DUiA9ICh1aW50MzJfdCl0bXByZWc7DQorDQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEdldCB0aGUgUlRDIFRpbWVTdGFtcCB2YWx1ZSBhbmQgbWFza3MuDQorICAqIEBwYXJhbSAgUlRDX0Zvcm1hdDogc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dCBwYXJhbWV0ZXJzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0Zvcm1hdF9CSU46IEJpbmFyeSBkYXRhIGZvcm1hdCANCisgICogICAgICAgICAgICBAYXJnIFJUQ19Gb3JtYXRfQkNEOiBCQ0QgZGF0YSBmb3JtYXQNCisgICogQHBhcmFtIFJUQ19TdGFtcFRpbWVTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBSVENfVGltZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgd2lsbCANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoZSBUaW1lU3RhbXAgdGltZSB2YWx1ZXMuIA0KKyAgKiBAcGFyYW0gUlRDX1N0YW1wRGF0ZVN0cnVjdDogcG9pbnRlciB0byBhIFJUQ19EYXRlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCB3aWxsIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhlIFRpbWVTdGFtcCBkYXRlIHZhbHVlcy4gICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfR2V0VGltZVN0YW1wKHVpbnQzMl90IFJUQ19Gb3JtYXQsIFJUQ19UaW1lVHlwZURlZiogUlRDX1N0YW1wVGltZVN0cnVjdCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVENfRGF0ZVR5cGVEZWYqIFJUQ19TdGFtcERhdGVTdHJ1Y3QpDQorew0KKyAgdWludDMyX3QgdG1wdGltZSA9IDAsIHRtcGRhdGUgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfRk9STUFUKFJUQ19Gb3JtYXQpKTsNCisNCisgIC8qIEdldCB0aGUgVGltZVN0YW1wIHRpbWUgYW5kIGRhdGUgcmVnaXN0ZXJzIHZhbHVlcyAqLw0KKyAgdG1wdGltZSA9ICh1aW50MzJfdCkoUlRDLT5UU1RSICYgUlRDX1RSX1JFU0VSVkVEX01BU0spOw0KKyAgdG1wZGF0ZSA9ICh1aW50MzJfdCkoUlRDLT5UU0RSICYgUlRDX0RSX1JFU0VSVkVEX01BU0spOw0KKw0KKyAgLyogRmlsbCB0aGUgVGltZSBzdHJ1Y3R1cmUgZmllbGRzIHdpdGggdGhlIHJlYWQgcGFyYW1ldGVycyAqLw0KKyAgUlRDX1N0YW1wVGltZVN0cnVjdC0+UlRDX0hvdXJzID0gKHVpbnQ4X3QpKCh0bXB0aW1lICYgKFJUQ19UUl9IVCB8IFJUQ19UUl9IVSkpID4+IDE2KTsNCisgIFJUQ19TdGFtcFRpbWVTdHJ1Y3QtPlJUQ19NaW51dGVzID0gKHVpbnQ4X3QpKCh0bXB0aW1lICYgKFJUQ19UUl9NTlQgfCBSVENfVFJfTU5VKSkgPj4gOCk7DQorICBSVENfU3RhbXBUaW1lU3RydWN0LT5SVENfU2Vjb25kcyA9ICh1aW50OF90KSh0bXB0aW1lICYgKFJUQ19UUl9TVCB8IFJUQ19UUl9TVSkpOw0KKyAgUlRDX1N0YW1wVGltZVN0cnVjdC0+UlRDX0gxMiA9ICh1aW50OF90KSgodG1wdGltZSAmIChSVENfVFJfUE0pKSA+PiAxNik7ICANCisNCisgIC8qIEZpbGwgdGhlIERhdGUgc3RydWN0dXJlIGZpZWxkcyB3aXRoIHRoZSByZWFkIHBhcmFtZXRlcnMgKi8NCisgIFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19ZZWFyID0gMDsNCisgIFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19Nb250aCA9ICh1aW50OF90KSgodG1wZGF0ZSAmIChSVENfRFJfTVQgfCBSVENfRFJfTVUpKSA+PiA4KTsNCisgIFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19EYXRlID0gKHVpbnQ4X3QpKHRtcGRhdGUgJiAoUlRDX0RSX0RUIHwgUlRDX0RSX0RVKSk7DQorICBSVENfU3RhbXBEYXRlU3RydWN0LT5SVENfV2Vla0RheSA9ICh1aW50OF90KSgodG1wZGF0ZSAmIChSVENfRFJfV0RVKSkgPj4gMTMpOw0KKw0KKyAgLyogQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMgZm9ybWF0ICovDQorICBpZiAoUlRDX0Zvcm1hdCA9PSBSVENfRm9ybWF0X0JJTikNCisgIHsNCisgICAgLyogQ29udmVydCB0aGUgVGltZSBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB0byBCaW5hcnkgZm9ybWF0ICovDQorICAgIFJUQ19TdGFtcFRpbWVTdHJ1Y3QtPlJUQ19Ib3VycyA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKFJUQ19TdGFtcFRpbWVTdHJ1Y3QtPlJUQ19Ib3Vycyk7DQorICAgIFJUQ19TdGFtcFRpbWVTdHJ1Y3QtPlJUQ19NaW51dGVzID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoUlRDX1N0YW1wVGltZVN0cnVjdC0+UlRDX01pbnV0ZXMpOw0KKyAgICBSVENfU3RhbXBUaW1lU3RydWN0LT5SVENfU2Vjb25kcyA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKFJUQ19TdGFtcFRpbWVTdHJ1Y3QtPlJUQ19TZWNvbmRzKTsNCisNCisgICAgLyogQ29udmVydCB0aGUgRGF0ZSBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB0byBCaW5hcnkgZm9ybWF0ICovDQorICAgIFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19Nb250aCA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19Nb250aCk7DQorICAgIFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19EYXRlID0gKHVpbnQ4X3QpUlRDX0JjZDJUb0J5dGUoUlRDX1N0YW1wRGF0ZVN0cnVjdC0+UlRDX0RhdGUpOw0KKyAgICBSVENfU3RhbXBEYXRlU3RydWN0LT5SVENfV2Vla0RheSA9ICh1aW50OF90KVJUQ19CY2QyVG9CeXRlKFJUQ19TdGFtcERhdGVTdHJ1Y3QtPlJUQ19XZWVrRGF5KTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgUlRDX0dyb3VwOSBUYW1wZXJzIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIFRhbXBlcnMgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgVGFtcGVycyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgc2VsZWN0IFRhbXBlciBwaW4gZWRnZS4NCisgICogQHBhcmFtICBSVENfVGFtcGVyOiBTZWxlY3RlZCB0YW1wZXIgcGluLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgUlRDX1RhbXBlcl8xLg0KKyAgKiBAcGFyYW0gIFJUQ19UYW1wZXJUcmlnZ2VyOiBTcGVjaWZpZXMgdGhlIHRyaWdnZXIgb24gdGhlIHRhbXBlciBwaW4gdGhhdCANCisgICogICAgICAgICBzdGltdWxhdGVzIHRhbXBlciBldmVudC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfVGFtcGVyVHJpZ2dlcl9SaXNpbmdFZGdlOiBSaXNpbmcgRWRnZSBvZiB0aGUgdGFtcGVyIHBpbiBjYXVzZXMgdGFtcGVyIGV2ZW50Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX1RhbXBlclRyaWdnZXJfRmFsbGluZ0VkZ2U6IEZhbGxpbmcgRWRnZSBvZiB0aGUgdGFtcGVyIHBpbiBjYXVzZXMgdGFtcGVyIGV2ZW50LiAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX1RhbXBlclRyaWdnZXJDb25maWcodWludDMyX3QgUlRDX1RhbXBlciwgdWludDMyX3QgUlRDX1RhbXBlclRyaWdnZXIpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfVEFNUEVSKFJUQ19UYW1wZXIpKTsgDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9UUklHR0VSKFJUQ19UYW1wZXJUcmlnZ2VyKSk7DQorIA0KKyAgaWYgKFJUQ19UYW1wZXJUcmlnZ2VyID09IFJUQ19UYW1wZXJUcmlnZ2VyX1Jpc2luZ0VkZ2UpDQorICB7ICANCisgICAgLyogQ29uZmlndXJlIHRoZSBSVENfVEFGQ1IgcmVnaXN0ZXIgKi8NCisgICAgUlRDLT5UQUZDUiAmPSAodWludDMyX3QpKCh1aW50MzJfdCl+KFJUQ19UYW1wZXIgPDwgMSkpOwkNCisgIH0NCisgIGVsc2UNCisgIHsgDQorICAgIC8qIENvbmZpZ3VyZSB0aGUgUlRDX1RBRkNSIHJlZ2lzdGVyICovDQorICAgIFJUQy0+VEFGQ1IgfD0gKHVpbnQzMl90KShSVENfVGFtcGVyIDw8IDEpOyAgDQorICB9ICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBEaXNhYmxlcyB0aGUgVGFtcGVyIGRldGVjdGlvbi4NCisgICogQHBhcmFtICBSVENfVGFtcGVyOiBTZWxlY3RlZCB0YW1wZXIgcGluLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgUlRDX1RhbXBlcl8xLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHRhbXBlciBwaW4uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfVGFtcGVyQ21kKHVpbnQzMl90IFJUQ19UYW1wZXIsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19UQU1QRVIoUlRDX1RhbXBlcikpOyAgDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBUYW1wZXIgcGluICovDQorICAgIFJUQy0+VEFGQ1IgfD0gKHVpbnQzMl90KVJUQ19UYW1wZXI7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIFRhbXBlciBwaW4gKi8NCisgICAgUlRDLT5UQUZDUiAmPSAodWludDMyX3QpflJUQ19UYW1wZXI7ICAgIA0KKyAgfSAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFJUQ19Hcm91cDEwIEJhY2t1cCBEYXRhIFJlZ2lzdGVycyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBCYWNrdXAgRGF0YSBSZWdpc3RlcnMgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgIEJhY2t1cCBEYXRhIFJlZ2lzdGVycyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFdyaXRlcyBhIGRhdGEgaW4gYSBzcGVjaWZpZWQgUlRDIEJhY2t1cCBkYXRhIHJlZ2lzdGVyLg0KKyAgKiBAcGFyYW0gIFJUQ19CS1BfRFI6IFJUQyBCYWNrdXAgZGF0YSBSZWdpc3RlciBudW1iZXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogUlRDX0JLUF9EUnggd2hlcmUgeCBjYW4gYmUgZnJvbSAwIHRvIDE5IHRvIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGUgcmVnaXN0ZXIuDQorICAqIEBwYXJhbSAgRGF0YTogRGF0YSB0byBiZSB3cml0dGVuIGluIHRoZSBzcGVjaWZpZWQgUlRDIEJhY2t1cCBkYXRhIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfV3JpdGVCYWNrdXBSZWdpc3Rlcih1aW50MzJfdCBSVENfQktQX0RSLCB1aW50MzJfdCBEYXRhKQ0KK3sNCisgIF9fSU8gdWludDMyX3QgdG1wID0gMDsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfQktQKFJUQ19CS1BfRFIpKTsNCisNCisgIHRtcCA9IFJUQ19CQVNFICsgMHg1MDsNCisgIHRtcCArPSAoUlRDX0JLUF9EUiAqIDQpOw0KKw0KKyAgLyogV3JpdGUgdGhlIHNwZWNpZmllZCByZWdpc3RlciAqLw0KKyAgKihfX0lPIHVpbnQzMl90ICopdG1wID0gKHVpbnQzMl90KURhdGE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJlYWRzIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIFJUQyBCYWNrdXAgZGF0YSBSZWdpc3Rlci4NCisgICogQHBhcmFtICBSVENfQktQX0RSOiBSVEMgQmFja3VwIGRhdGEgUmVnaXN0ZXIgbnVtYmVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IFJUQ19CS1BfRFJ4IHdoZXJlIHggY2FuIGJlIGZyb20gMCB0byAxOSB0byANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgdGhlIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3VpbnQzMl90IFJUQ19SZWFkQmFja3VwUmVnaXN0ZXIodWludDMyX3QgUlRDX0JLUF9EUikNCit7DQorICBfX0lPIHVpbnQzMl90IHRtcCA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0JLUChSVENfQktQX0RSKSk7DQorDQorICB0bXAgPSBSVENfQkFTRSArIDB4NTA7DQorICB0bXAgKz0gKFJUQ19CS1BfRFIgKiA0KTsNCisgIA0KKyAgLyogUmVhZCB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyICovDQorICByZXR1cm4gKCooX19JTyB1aW50MzJfdCAqKXRtcCk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFJUQ19Hcm91cDExIFJUQyBUYW1wZXIgYW5kIFRpbWVTdGFtcCBQaW5zIFNlbGVjdGlvbiBhbmQgT3V0cHV0IFR5cGUgQ29uZmlnIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIFJUQyBUYW1wZXIgYW5kIFRpbWVTdGFtcCBQaW5zIFNlbGVjdGlvbiBhbmQgT3V0cHV0IFR5cGUgQ29uZmlnIA0KKyAqICAgICAgICAgICBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgUlRDIFRhbXBlciBhbmQgVGltZVN0YW1wIFBpbnMgU2VsZWN0aW9uIGFuZCBPdXRwdXQgVHlwZSBDb25maWcgY29uZmlndXJhdGlvbiANCisgIGZ1bmN0aW9ucyANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbGVjdHMgdGhlIFJUQyBUYW1wZXIgUGluLg0KKyAgKiBAcGFyYW0gIFJUQ19UYW1wZXJQaW46IHNwZWNpZmllcyB0aGUgUlRDIFRhbXBlciBQaW4uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfVGFtcGVyUGluX1BDMTM6IFBDMTMgaXMgc2VsZWN0ZWQgYXMgUlRDIFRhbXBlciBQaW4uDQorICAqICAgICAgICAgICAgQGFyZyBSVENfVGFtcGVyUGluX1BJODogUEk4IGlzIHNlbGVjdGVkIGFzIFJUQyBUYW1wZXIgUGluLiAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX1RhbXBlclBpblNlbGVjdGlvbih1aW50MzJfdCBSVENfVGFtcGVyUGluKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RBTVBFUl9QSU4oUlRDX1RhbXBlclBpbikpOw0KKyAgDQorICBSVEMtPlRBRkNSICY9ICh1aW50MzJfdCl+KFJUQ19UQUZDUl9UQU1QSU5TRUwpOw0KKyAgUlRDLT5UQUZDUiB8PSAodWludDMyX3QpKFJUQ19UYW1wZXJQaW4pOyAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbGVjdHMgdGhlIFJUQyBUaW1lU3RhbXAgUGluLg0KKyAgKiBAcGFyYW0gIFJUQ19UaW1lU3RhbXBQaW46IHNwZWNpZmllcyB0aGUgUlRDIFRpbWVTdGFtcCBQaW4uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfVGltZVN0YW1wUGluX1BDMTM6IFBDMTMgaXMgc2VsZWN0ZWQgYXMgUlRDIFRpbWVTdGFtcCBQaW4uDQorICAqICAgICAgICAgICAgQGFyZyBSVENfVGltZVN0YW1wUGluX1BJODogUEk4IGlzIHNlbGVjdGVkIGFzIFJUQyBUaW1lU3RhbXAgUGluLiAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX1RpbWVTdGFtcFBpblNlbGVjdGlvbih1aW50MzJfdCBSVENfVGltZVN0YW1wUGluKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX1RJTUVTVEFNUF9QSU4oUlRDX1RpbWVTdGFtcFBpbikpOw0KKyAgDQorICBSVEMtPlRBRkNSICY9ICh1aW50MzJfdCl+KFJUQ19UQUZDUl9UU0lOU0VMKTsNCisgIFJUQy0+VEFGQ1IgfD0gKHVpbnQzMl90KShSVENfVGltZVN0YW1wUGluKTsgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBSVEMgT3V0cHV0IFBpbiBtb2RlLiANCisgICogQHBhcmFtICBSVENfT3V0cHV0VHlwZTogc3BlY2lmaWVzIHRoZSBSVEMgT3V0cHV0IChQQzEzKSBwaW4gbW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19PdXRwdXRUeXBlX09wZW5EcmFpbjogUlRDIE91dHB1dCAoUEMxMykgaXMgY29uZmlndXJlZCBpbiANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIERyYWluIG1vZGUuDQorICAqICAgICAgICAgICAgQGFyZyBSVENfT3V0cHV0VHlwZV9QdXNoUHVsbDogIFJUQyBPdXRwdXQgKFBDMTMpIGlzIGNvbmZpZ3VyZWQgaW4gDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVzaCBQdWxsIG1vZGUuICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBSVENfT3V0cHV0VHlwZUNvbmZpZyh1aW50MzJfdCBSVENfT3V0cHV0VHlwZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19PVVRQVVRfVFlQRShSVENfT3V0cHV0VHlwZSkpOw0KKyAgDQorICBSVEMtPlRBRkNSICY9ICh1aW50MzJfdCl+KFJUQ19UQUZDUl9BTEFSTU9VVFRZUEUpOw0KKyAgUlRDLT5UQUZDUiB8PSAodWludDMyX3QpKFJUQ19PdXRwdXRUeXBlKTsgIA0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBSVENfR3JvdXAxMiBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorIEFsbCBSVEMgaW50ZXJydXB0cyBhcmUgY29ubmVjdGVkIHRvIHRoZSBFWFRJIGNvbnRyb2xsZXIuDQorIA0KKyAtIFRvIGVuYWJsZSB0aGUgUlRDIEFsYXJtIGludGVycnVwdCwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBpcyByZXF1aXJlZDoNCisgICAtIENvbmZpZ3VyZSBhbmQgZW5hYmxlIHRoZSBFWFRJIExpbmUgMTcgaW4gaW50ZXJydXB0IG1vZGUgYW5kIHNlbGVjdCB0aGUgcmlzaW5nIA0KKyAgICAgZWRnZSBzZW5zaXRpdml0eSB1c2luZyB0aGUgRVhUSV9Jbml0KCkgZnVuY3Rpb24uDQorICAgLSBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUlRDX0FsYXJtIElSUSBjaGFubmVsIGluIHRoZSBOVklDIHVzaW5nIHRoZSBOVklDX0luaXQoKQ0KKyAgICAgZnVuY3Rpb24uDQorICAgLSBDb25maWd1cmUgdGhlIFJUQyB0byBnZW5lcmF0ZSBSVEMgYWxhcm1zIChBbGFybSBBIGFuZC9vciBBbGFybSBCKSB1c2luZw0KKyAgICAgdGhlIFJUQ19TZXRBbGFybSgpIGFuZCBSVENfQWxhcm1DbWQoKSBmdW5jdGlvbnMuDQorDQorIC0gVG8gZW5hYmxlIHRoZSBSVEMgV2FrZXVwIGludGVycnVwdCwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBpcyByZXF1aXJlZDoNCisgICAtIENvbmZpZ3VyZSBhbmQgZW5hYmxlIHRoZSBFWFRJIExpbmUgMjIgaW4gaW50ZXJydXB0IG1vZGUgYW5kIHNlbGVjdCB0aGUgcmlzaW5nIA0KKyAgICAgZWRnZSBzZW5zaXRpdml0eSB1c2luZyB0aGUgRVhUSV9Jbml0KCkgZnVuY3Rpb24uDQorICAgLSBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUlRDX1dLVVAgSVJRIGNoYW5uZWwgaW4gdGhlIE5WSUMgdXNpbmcgdGhlIE5WSUNfSW5pdCgpDQorICAgICBmdW5jdGlvbi4NCisgICAtIENvbmZpZ3VyZSB0aGUgUlRDIHRvIGdlbmVyYXRlIHRoZSBSVEMgd2FrZXVwIHRpbWVyIGV2ZW50IHVzaW5nIHRoZSANCisgICAgIFJUQ19XYWtlVXBDbG9ja0NvbmZpZygpLCBSVENfU2V0V2FrZVVwQ291bnRlcigpIGFuZCBSVENfV2FrZVVwQ21kKCkgZnVuY3Rpb25zLg0KKw0KKyAtIFRvIGVuYWJsZSB0aGUgUlRDIFRhbXBlciBpbnRlcnJ1cHQsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgaXMgcmVxdWlyZWQ6DQorICAgLSBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgRVhUSSBMaW5lIDIxIGluIGludGVycnVwdCBtb2RlIGFuZCBzZWxlY3QgdGhlIHJpc2luZyANCisgICAgIGVkZ2Ugc2Vuc2l0aXZpdHkgdXNpbmcgdGhlIEVYVElfSW5pdCgpIGZ1bmN0aW9uLg0KKyAgIC0gQ29uZmlndXJlIGFuZCBlbmFibGUgdGhlIFRBTVBfU1RBTVAgSVJRIGNoYW5uZWwgaW4gdGhlIE5WSUMgdXNpbmcgdGhlIE5WSUNfSW5pdCgpDQorICAgICBmdW5jdGlvbi4NCisgICAtIENvbmZpZ3VyZSB0aGUgUlRDIHRvIGRldGVjdCB0aGUgUlRDIHRhbXBlciBldmVudCB1c2luZyB0aGUgDQorICAgICBSVENfVGFtcGVyVHJpZ2dlckNvbmZpZygpIGFuZCBSVENfVGFtcGVyQ21kKCkgZnVuY3Rpb25zLg0KKw0KKyAtIFRvIGVuYWJsZSB0aGUgUlRDIFRpbWVTdGFtcCBpbnRlcnJ1cHQsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgaXMgcmVxdWlyZWQ6DQorICAgLSBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgRVhUSSBMaW5lIDIxIGluIGludGVycnVwdCBtb2RlIGFuZCBzZWxlY3QgdGhlIHJpc2luZyANCisgICAgIGVkZ2Ugc2Vuc2l0aXZpdHkgdXNpbmcgdGhlIEVYVElfSW5pdCgpIGZ1bmN0aW9uLg0KKyAgIC0gQ29uZmlndXJlIGFuZCBlbmFibGUgdGhlIFRBTVBfU1RBTVAgSVJRIGNoYW5uZWwgaW4gdGhlIE5WSUMgdXNpbmcgdGhlIE5WSUNfSW5pdCgpDQorICAgICBmdW5jdGlvbi4NCisgICAtIENvbmZpZ3VyZSB0aGUgUlRDIHRvIGRldGVjdCB0aGUgUlRDIHRpbWUtc3RhbXAgZXZlbnQgdXNpbmcgdGhlIA0KKyAgICAgUlRDX1RpbWVTdGFtcENtZCgpIGZ1bmN0aW9ucy4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIFJUQyBpbnRlcnJ1cHRzLg0KKyAgKiBAcGFyYW0gIFJUQ19JVDogc3BlY2lmaWVzIHRoZSBSVEMgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVFM6ICBUaW1lIFN0YW1wIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiAgV2FrZVVwIFRpbWVyIGludGVycnVwdCBtYXNrDQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQjogIEFsYXJtIEIgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9BTFJBOiAgQWxhcm0gQSBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RBTVA6IFRhbXBlciBldmVudCBpbnRlcnJ1cHQgbWFzaw0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBSVEMgaW50ZXJydXB0cy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX0lUQ29uZmlnKHVpbnQzMl90IFJUQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0NPTkZJR19JVChSVENfSVQpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovDQorICBSVEMtPldQUiA9IDB4Q0E7DQorICBSVEMtPldQUiA9IDB4NTM7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogQ29uZmlndXJlIHRoZSBJbnRlcnJ1cHRzIGluIHRoZSBSVENfQ1IgcmVnaXN0ZXIgKi8NCisgICAgUlRDLT5DUiB8PSAodWludDMyX3QpKFJUQ19JVCAmIH5SVENfVEFGQ1JfVEFNUElFKTsNCisgICAgLyogQ29uZmlndXJlIHRoZSBUYW1wZXIgSW50ZXJydXB0IGluIHRoZSBSVENfVEFGQ1IgKi8NCisgICAgUlRDLT5UQUZDUiB8PSAodWludDMyX3QpKFJUQ19JVCAmIFJUQ19UQUZDUl9UQU1QSUUpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBDb25maWd1cmUgdGhlIEludGVycnVwdHMgaW4gdGhlIFJUQ19DUiByZWdpc3RlciAqLw0KKyAgICBSVEMtPkNSICY9ICh1aW50MzJfdCl+KFJUQ19JVCAmICh1aW50MzJfdCl+UlRDX1RBRkNSX1RBTVBJRSk7DQorICAgIC8qIENvbmZpZ3VyZSB0aGUgVGFtcGVyIEludGVycnVwdCBpbiB0aGUgUlRDX1RBRkNSICovDQorICAgIFJUQy0+VEFGQ1IgJj0gKHVpbnQzMl90KX4oUlRDX0lUICYgUlRDX1RBRkNSX1RBTVBJRSk7DQorICB9DQorICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8NCisgIFJUQy0+V1BSID0gMHhGRjsgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUlRDIGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBSVENfRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVEFNUDFGOiBUYW1wZXIgMSBldmVudCBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU09WRjogVGltZSBTdGFtcCBPdmVyRmxvdyBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19UU0Y6IFRpbWUgU3RhbXAgZXZlbnQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfV1VURjogV2FrZVVwIFRpbWVyIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkJGOiBBbGFybSBCIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0FMUkFGOiBBbGFybSBBIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX0lOSVRGOiBJbml0aWFsaXphdGlvbiBtb2RlIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1JTRjogUmVnaXN0ZXJzIFN5bmNocm9uaXplZCBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19JTklUUzogUmVnaXN0ZXJzIENvbmZpZ3VyZWQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfV1VUV0Y6IFdha2VVcCBUaW1lciBXcml0ZSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19BTFJCV0Y6IEFsYXJtIEIgV3JpdGUgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQVdGOiBBbGFybSBBIHdyaXRlIGZsYWcNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFJUQ19GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIFJUQ19HZXRGbGFnU3RhdHVzKHVpbnQzMl90IFJUQ19GTEFHKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19HRVRfRkxBRyhSVENfRkxBRykpOw0KKyAgDQorICAvKiBHZXQgYWxsIHRoZSBmbGFncyAqLw0KKyAgdG1wcmVnID0gKHVpbnQzMl90KShSVEMtPklTUiAmIFJUQ19GTEFHU19NQVNLKTsNCisgIA0KKyAgLyogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGZsYWcgKi8NCisgIGlmICgodG1wcmVnICYgUlRDX0ZMQUcpICE9ICh1aW50MzJfdClSRVNFVCkNCisgIHsNCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgUlRDJ3MgcGVuZGluZyBmbGFncy4NCisgICogQHBhcmFtICBSVENfRkxBRzogc3BlY2lmaWVzIHRoZSBSVEMgZmxhZyB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1RBTVAxRjogVGFtcGVyIDEgZXZlbnQgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfVFNPVkY6IFRpbWUgU3RhbXAgT3ZlcmZsb3cgZmxhZyANCisgICogICAgICAgICAgICBAYXJnIFJUQ19GTEFHX1RTRjogVGltZSBTdGFtcCBldmVudCBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBSVENfRkxBR19XVVRGOiBXYWtlVXAgVGltZXIgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQkY6IEFsYXJtIEIgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfQUxSQUY6IEFsYXJtIEEgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0ZMQUdfUlNGOiBSZWdpc3RlcnMgU3luY2hyb25pemVkIGZsYWcNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX0NsZWFyRmxhZyh1aW50MzJfdCBSVENfRkxBRykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1JUQ19DTEVBUl9GTEFHKFJUQ19GTEFHKSk7DQorDQorICAvKiBDbGVhciB0aGUgRmxhZ3MgaW4gdGhlIFJUQ19JU1IgcmVnaXN0ZXIgKi8NCisgIFJUQy0+SVNSID0gKHVpbnQzMl90KSgodWludDMyX3QpKH4oKFJUQ19GTEFHIHwgUlRDX0lTUl9JTklUKSYgMHgwMDAwRkZGRikgfCAodWludDMyX3QpKFJUQy0+SVNSICYgUlRDX0lTUl9JTklUKSkpOyAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgUlRDIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFJUQ19JVDogc3BlY2lmaWVzIHRoZSBSVEMgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9UUzogVGltZSBTdGFtcCBpbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfV1VUOiBXYWtlVXAgVGltZXIgaW50ZXJydXB0IA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX0FMUkI6IEFsYXJtIEIgaW50ZXJydXB0IA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX0FMUkE6IEFsYXJtIEEgaW50ZXJydXB0IA0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RBTVAxOiBUYW1wZXIgMSBldmVudCBpbnRlcnJ1cHQgDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBSVENfSVQgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0lUU3RhdHVzIFJUQ19HZXRJVFN0YXR1cyh1aW50MzJfdCBSVENfSVQpDQorew0KKyAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICB1aW50MzJfdCB0bXByZWcgPSAwLCBlbmFibGVzdGF0dXMgPSAwOw0KKyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfUlRDX0dFVF9JVChSVENfSVQpKTsNCisgIA0KKyAgLyogR2V0IHRoZSBUQU1QRVIgSW50ZXJydXB0IGVuYWJsZSBiaXQgYW5kIHBlbmRpbmcgYml0ICovDQorICB0bXByZWcgPSAodWludDMyX3QpKFJUQy0+VEFGQ1IgJiAoUlRDX1RBRkNSX1RBTVBJRSkpOw0KKyANCisgIC8qIEdldCB0aGUgSW50ZXJydXB0IGVuYWJsZSBTdGF0dXMgKi8NCisgIGVuYWJsZXN0YXR1cyA9ICh1aW50MzJfdCkoKFJUQy0+Q1IgJiBSVENfSVQpIHwgKHRtcHJlZyAmIChSVENfSVQgPj4gMTUpKSk7DQorICANCisgIC8qIEdldCB0aGUgSW50ZXJydXB0IHBlbmRpbmcgYml0ICovDQorICB0bXByZWcgPSAodWludDMyX3QpKChSVEMtPklTUiAmICh1aW50MzJfdCkoUlRDX0lUID4+IDQpKSk7DQorICANCisgIC8qIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBJbnRlcnJ1cHQgKi8NCisgIGlmICgoZW5hYmxlc3RhdHVzICE9ICh1aW50MzJfdClSRVNFVCkgJiYgKCh0bXByZWcgJiAweDAwMDBGRkZGKSAhPSAodWludDMyX3QpUkVTRVQpKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBSVEMncyBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzLg0KKyAgKiBAcGFyYW0gIFJUQ19JVDogc3BlY2lmaWVzIHRoZSBSVEMgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgUlRDX0lUX1RTOiBUaW1lIFN0YW1wIGludGVycnVwdCANCisgICogICAgICAgICAgICBAYXJnIFJUQ19JVF9XVVQ6IFdha2VVcCBUaW1lciBpbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQjogQWxhcm0gQiBpbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfQUxSQTogQWxhcm0gQSBpbnRlcnJ1cHQgDQorICAqICAgICAgICAgICAgQGFyZyBSVENfSVRfVEFNUDE6IFRhbXBlciAxIGV2ZW50IGludGVycnVwdCANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgUlRDX0NsZWFySVRQZW5kaW5nQml0KHVpbnQzMl90IFJUQ19JVCkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19SVENfQ0xFQVJfSVQoUlRDX0lUKSk7DQorDQorICAvKiBHZXQgdGhlIFJUQ19JU1IgSW50ZXJydXB0IHBlbmRpbmcgYml0cyBtYXNrICovDQorICB0bXByZWcgPSAodWludDMyX3QpKFJUQ19JVCA+PiA0KTsNCisNCisgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzIGluIHRoZSBSVENfSVNSIHJlZ2lzdGVyICovDQorICBSVEMtPklTUiA9ICh1aW50MzJfdCkoKHVpbnQzMl90KSh+KCh0bXByZWcgfCBSVENfSVNSX0lOSVQpJiAweDAwMDBGRkZGKSB8ICh1aW50MzJfdCkoUlRDLT5JU1IgJiBSVENfSVNSX0lOSVQpKSk7IA0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ29udmVydHMgYSAyIGRpZ2l0IGRlY2ltYWwgdG8gQkNEIGZvcm1hdC4NCisgICogQHBhcmFtICBWYWx1ZTogQnl0ZSB0byBiZSBjb252ZXJ0ZWQuDQorICAqIEByZXR2YWwgQ29udmVydGVkIGJ5dGUNCisgICovDQorc3RhdGljIHVpbnQ4X3QgUlRDX0J5dGVUb0JjZDIodWludDhfdCBWYWx1ZSkNCit7DQorICB1aW50OF90IGJjZGhpZ2ggPSAwOw0KKyAgDQorICB3aGlsZSAoVmFsdWUgPj0gMTApDQorICB7DQorICAgIGJjZGhpZ2grKzsNCisgICAgVmFsdWUgLT0gMTA7DQorICB9DQorICANCisgIHJldHVybiAgKCh1aW50OF90KShiY2RoaWdoIDw8IDQpIHwgVmFsdWUpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb252ZXJ0IGZyb20gMiBkaWdpdCBCQ0QgdG8gQmluYXJ5Lg0KKyAgKiBAcGFyYW0gIFZhbHVlOiBCQ0QgdmFsdWUgdG8gYmUgY29udmVydGVkLg0KKyAgKiBAcmV0dmFsIENvbnZlcnRlZCB3b3JkDQorICAqLw0KK3N0YXRpYyB1aW50OF90IFJUQ19CY2QyVG9CeXRlKHVpbnQ4X3QgVmFsdWUpDQorew0KKyAgdWludDhfdCB0bXAgPSAwOw0KKyAgdG1wID0gKCh1aW50OF90KShWYWx1ZSAmICh1aW50OF90KTB4RjApID4+ICh1aW50OF90KTB4NCkgKiAxMDsNCisgIHJldHVybiAodG1wICsgKFZhbHVlICYgKHVpbnQ4X3QpMHgwRikpOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfc2Rpby5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9zZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1YjI0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zdG0zMmYyeHhfc2Rpby5jCkBAIC0wLDAgKzEsMTAxMCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3NkaW8uYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBTZWN1cmUgZGlnaXRhbCBpbnB1dC9vdXRwdXQgaW50ZXJmYWNlIChTRElPKSANCisgICogICAgICAgICAgcGVyaXBoZXJhbDoNCisgICogICAgICAgICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gQ29tbWFuZCBwYXRoIHN0YXRlIG1hY2hpbmUgKENQU00pIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgIC0gRGF0YSBwYXRoIHN0YXRlIG1hY2hpbmUgKERQU00pIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgIC0gU0RJTyBJTyBDYXJkcyBtb2RlIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgIC0gQ0UtQVRBIG1vZGUgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgLSBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKg0KKyAgKiAgQHZlcmJhdGltDQorICAqDQorICAqDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgMS4gVGhlIFNESU8gY2xvY2sgKFNESU9DTEsgPSA0OCBNSHopIGlzIGNvbWluZyBmcm9tIGEgc3BlY2lmaWMgb3V0cHV0DQorICAqICAgICAgICAgICAgIG9mIFBMTCAoUExMNDhDTEspLiBCZWZvcmUgdG8gc3RhcnQgd29ya2luZyB3aXRoIFNESU8gcGVyaXBoZXJhbA0KKyAgKiAgICAgICAgICAgICBtYWtlIHN1cmUgdGhhdCB0aGUgUExMIGlzIHdlbGwgY29uZmlndXJlZC4NCisgICogICAgICAgICAgVGhlIFNESU8gcGVyaXBoZXJhbCB1c2VzIHR3byBjbG9jayBzaWduYWxzOg0KKyAgKiAgICAgICAgICAgICAgLSBTRElPIGFkYXB0ZXIgY2xvY2sgKFNESU9DTEsgPSA0OCBNSHopDQorICAqICAgICAgICAgICAgICAtIEFQQjIgYnVzIGNsb2NrIChQQ0xLMikNCisgICogICAgICAgICAgUENMSzIgYW5kIFNESU9fQ0sgY2xvY2sgZnJlcXVlbmNpZXMgbXVzdCByZXNwZWN0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOg0KKyAgKiAgICAgICAgICAgICAgICAgICBGcmVxdWVuYyhQQ0xLMikgPj0gKDMgLyA4IHggRnJlcXVlbmN5KFNESU9fQ0spKQ0KKyAgKg0KKyAgKiAgICAgICAgICAyLiBFbmFibGUgcGVyaXBoZXJhbCBjbG9jayB1c2luZyBSQ0NfQVBCMlBlcmlwaENsb2NrQ21kKFJDQ19BUEIyUGVyaXBoX1NESU8sIEVOQUJMRSkuDQorICAqDQorICAqICAgICAgICAgIDMuICBBY2NvcmRpbmcgdG8gdGhlIFNESU8gbW9kZSwgZW5hYmxlIHRoZSBHUElPIGNsb2NrcyB1c2luZyANCisgICogICAgICAgICAgICAgIFJDQ19BSEIxUGVyaXBoQ2xvY2tDbWQoKSBmdW5jdGlvbi4gDQorICAqICAgICAgICAgICAgICBUaGUgSS9PIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uczoNCisgICogICAgICAgICAgICAgICAgIC0gMS1iaXQgZGF0YSBsZW5ndGg6IFNESU9fQ01ELCBTRElPX0NLIGFuZCBEMC4NCisgICogICAgICAgICAgICAgICAgIC0gNC1iaXQgZGF0YSBsZW5ndGg6IFNESU9fQ01ELCBTRElPX0NLIGFuZCBEWzM6MF0uDQorICAqICAgICAgICAgICAgICAgICAtIDgtYml0IGRhdGEgbGVuZ3RoOiBTRElPX0NNRCwgU0RJT19DSyBhbmQgRFs3OjBdLiAgICAgIA0KKyAgKg0KKyAgKiAgICAgICAgICA0LiBQZXJpcGhlcmFsJ3MgYWx0ZXJuYXRlIGZ1bmN0aW9uOiANCisgICogICAgICAgICAgICAgICAgIC0gQ29ubmVjdCB0aGUgcGluIHRvIHRoZSBkZXNpcmVkIHBlcmlwaGVyYWxzJyBBbHRlcm5hdGUgDQorICAqICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIChBRikgdXNpbmcgR1BJT19QaW5BRkNvbmZpZygpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGUgZGVzaXJlZCBwaW4gaW4gYWx0ZXJuYXRlIGZ1bmN0aW9uIGJ5Og0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX0luaXRTdHJ1Y3QtPkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BRg0KKyAgKiAgICAgICAgICAgICAgICAgLSBTZWxlY3QgdGhlIHR5cGUsIHB1bGwtdXAvcHVsbC1kb3duIGFuZCBvdXRwdXQgc3BlZWQgdmlhIA0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX1B1UGQsIEdQSU9fT1R5cGUgYW5kIEdQSU9fU3BlZWQgbWVtYmVycw0KKyAgKiAgICAgICAgICAgICAgICAgLSBDYWxsIEdQSU9fSW5pdCgpIGZ1bmN0aW9uDQorICAqDQorICAqICAgICAgICAgIDUuIFByb2dyYW0gdGhlIENsb2NrIEVkZ2UsIENsb2NrIEJ5cGFzcywgQ2xvY2sgUG93ZXIgU2F2ZSwgQnVzIFdpZGUsIA0KKyAgKiAgICAgICAgICAgICBoYXJkd2FyZSwgZmxvdyBjb250cm9sIGFuZCB0aGUgQ2xvY2sgRGl2aWRlciB1c2luZyB0aGUgU0RJT19Jbml0KCkNCisgICogICAgICAgICAgICAgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDYuIEVuYWJsZSB0aGUgUG93ZXIgT04gU3RhdGUgdXNpbmcgdGhlIFNESU9fU2V0UG93ZXJTdGF0ZShTRElPX1Bvd2VyU3RhdGVfT04pIA0KKyAgKiAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA3LiBFbmFibGUgdGhlIGNsb2NrIHVzaW5nIHRoZSBTRElPX0Nsb2NrQ21kKCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDguIEVuYWJsZSB0aGUgTlZJQyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHVzaW5nIHRoZSBmdW5jdGlvbiANCisgICogICAgICAgICAgICAgU0RJT19JVENvbmZpZygpIGlmIHlvdSBuZWVkIHRvIHVzZSBpbnRlcnJ1cHQgbW9kZS4gDQorICAqDQorICAqICAgICAgICAgIDkuIFdoZW4gdXNpbmcgdGhlIERNQSBtb2RlIA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGUgRE1BIHVzaW5nIERNQV9Jbml0KCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgICAgLSBBY3RpdmUgdGhlIG5lZWRlZCBjaGFubmVsIFJlcXVlc3QgdXNpbmcgU0RJT19ETUFDbWQoKSBmdW5jdGlvbg0KKyAgKg0KKyAgKiAgICAgICAgICAxMC4gRW5hYmxlIHRoZSBETUEgdXNpbmcgdGhlIERNQV9DbWQoKSBmdW5jdGlvbiwgd2hlbiB1c2luZyBETUEgbW9kZS4gDQorICAqDQorICAqICAgICAgICAgIDExLiBUbyBjb250cm9sIHRoZSBDUFNNIChDb21tYW5kIFBhdGggU3RhdGUgTWFjaGluZSkgYW5kIHNlbmQgDQorICAqICAgICAgICAgICAgICBjb21tYW5kcyB0byB0aGUgY2FyZCB1c2UgdGhlIFNESU9fU2VuZENvbW1hbmQoKSwgDQorICAqICAgICAgICAgICAgICBTRElPX0dldENvbW1hbmRSZXNwb25zZSgpIGFuZCBTRElPX0dldFJlc3BvbnNlKCkgZnVuY3Rpb25zLiAgICAgDQorICAqICAgICAgICAgICAgICBGaXJzdCwgdXNlciBoYXMgdG8gZmlsbCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgKHBvaW50ZXIgdG8NCisgICogICAgICAgICAgICAgIFNESU9fQ21kSW5pdFR5cGVEZWYpIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgY29tbWFuZCB0byBiZSBzZW50Lg0KKyAgKiAgICAgICAgICAgICAgICAgVGhlIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgZmlsbGVkIGFyZToNCisgICogICAgICAgICAgICAgICAgICAgLSBDb21tYW5kIEFyZ3VtZW50DQorICAqICAgICAgICAgICAgICAgICAgIC0gQ29tbWFuZCBJbmRleA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENvbW1hbmQgUmVzcG9uc2UgdHlwZQ0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENvbW1hbmQgV2FpdA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENQU00gU3RhdHVzIChFbmFibGUgb3IgRGlzYWJsZSkNCisgICoNCisgICogICAgICAgICAgICAgIFRvIGNoZWNrIGlmIHRoZSBjb21tYW5kIGlzIHdlbGwgcmVjZWl2ZWQsIHJlYWQgdGhlIFNESU9fQ01EUkVTUA0KKyAgKiAgICAgICAgICAgICAgcmVnaXN0ZXIgdXNpbmcgdGhlIFNESU9fR2V0Q29tbWFuZFJlc3BvbnNlKCkuDQorICAqICAgICAgICAgICAgICBUaGUgU0RJTyByZXNwb25zZXMgcmVnaXN0ZXJzIChTRElPX1JFU1AxIHRvIFNESU9fUkVTUDIpLCB1c2UgdGhlDQorICAqICAgICAgICAgICAgICBTRElPX0dldFJlc3BvbnNlKCkgZnVuY3Rpb24uDQorICAqDQorICAqICAgICAgICAgIDEyLiBUbyBjb250cm9sIHRoZSBEUFNNIChEYXRhIFBhdGggU3RhdGUgTWFjaGluZSkgYW5kIHNlbmQvcmVjZWl2ZSANCisgICogICAgICAgICAgICAgIGRhdGEgdG8vZnJvbSB0aGUgY2FyZCB1c2UgdGhlIFNESU9fRGF0YUNvbmZpZygpLCBTRElPX0dldERhdGFDb3VudGVyKCksIA0KKyAgKiAgICAgICAgICAgICAgU0RJT19SZWFkRGF0YSgpLCBTRElPX1dyaXRlRGF0YSgpIGFuZCBTRElPX0dldEZJRk9Db3VudCgpIGZ1bmN0aW9ucy4NCisgICoNCisgICogICAgICAgICAgICAgIFJlYWQgT3BlcmF0aW9ucw0KKyAgKiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tDQorICAqICAgICAgICAgICAgICBhKSBGaXJzdCwgdXNlciBoYXMgdG8gZmlsbCB0aGUgZGF0YSBzdHJ1Y3R1cmUgKHBvaW50ZXIgdG8NCisgICogICAgICAgICAgICAgICAgIFNESU9fRGF0YUluaXRUeXBlRGVmKSBhY2NvcmRpbmcgdG8gdGhlIHNlbGVjdGVkIGRhdGEgdHlwZSB0bw0KKyAgKiAgICAgICAgICAgICAgICAgYmUgcmVjZWl2ZWQuDQorICAqICAgICAgICAgICAgICAgICBUaGUgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBiZSBmaWxsZWQgYXJlOg0KKyAgKiAgICAgICAgICAgICAgICAgICAtIERhdGEgVGltZU91dA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIERhdGEgTGVuZ3RoDQorICAqICAgICAgICAgICAgICAgICAgIC0gRGF0YSBCbG9jayBzaXplDQorICAqICAgICAgICAgICAgICAgICAgIC0gRGF0YSBUcmFuc2ZlciBkaXJlY3Rpb246IHNob3VsZCBiZSBmcm9tIGNhcmQgKFRvIFNESU8pDQorICAqICAgICAgICAgICAgICAgICAgIC0gRGF0YSBUcmFuc2ZlciBtb2RlDQorICAqICAgICAgICAgICAgICAgICAgIC0gRFBTTSBTdGF0dXMgKEVuYWJsZSBvciBEaXNhYmxlKQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAgICBiKSBDb25maWd1cmUgdGhlIFNESU8gcmVzb3VyY2VzIHRvIHJlY2VpdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZA0KKyAgKiAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIHRyYW5zZmVyIG1vZGUgKFJlZmVyIHRvIFN0ZXAgOCwgOSBhbmQgMTApLg0KKyAgKg0KKyAgKiAgICAgICAgICAgICAgYykgU2VuZCB0aGUgc2VsZWN0ZWQgUmVhZCBjb21tYW5kIChyZWZlciB0byBzdGVwIDExKS4NCisgICogICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgICAgIGQpIFVzZSB0aGUgU0RJTyBmbGFncy9pbnRlcnJ1cHRzIHRvIGNoZWNrIHRoZSB0cmFuc2ZlciBzdGF0dXMuDQorICAqDQorICAqICAgICAgICAgICAgICBXcml0ZSBPcGVyYXRpb25zDQorICAqICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgICAgICAgIGEpIEZpcnN0LCB1c2VyIGhhcyB0byBmaWxsIHRoZSBkYXRhIHN0cnVjdHVyZSAocG9pbnRlciB0bw0KKyAgKiAgICAgICAgICAgICAgICAgU0RJT19EYXRhSW5pdFR5cGVEZWYpIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgZGF0YSB0eXBlIHRvDQorICAqICAgICAgICAgICAgICAgICBiZSByZWNlaXZlZC4NCisgICogICAgICAgICAgICAgICAgIFRoZSBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGZpbGxlZCBhcmU6DQorICAqICAgICAgICAgICAgICAgICAgIC0gRGF0YSBUaW1lT3V0DQorICAqICAgICAgICAgICAgICAgICAgIC0gRGF0YSBMZW5ndGgNCisgICogICAgICAgICAgICAgICAgICAgLSBEYXRhIEJsb2NrIHNpemUNCisgICogICAgICAgICAgICAgICAgICAgLSBEYXRhIFRyYW5zZmVyIGRpcmVjdGlvbjogIHNob3VsZCBiZSB0byBjYXJkIChUbyBDQVJEKQ0KKyAgKiAgICAgICAgICAgICAgICAgICAtIERhdGEgVHJhbnNmZXIgbW9kZQ0KKyAgKiAgICAgICAgICAgICAgICAgICAtIERQU00gU3RhdHVzIChFbmFibGUgb3IgRGlzYWJsZSkNCisgICoNCisgICogICAgICAgICAgICAgIGIpIENvbmZpZ3VyZSB0aGUgU0RJTyByZXNvdXJjZXMgdG8gc2VuZCB0aGUgZGF0YSB0byB0aGUgY2FyZA0KKyAgKiAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIHRyYW5zZmVyIG1vZGUgKFJlZmVyIHRvIFN0ZXAgOCwgOSBhbmQgMTApLg0KKyAgKiAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgICAgIGMpIFNlbmQgdGhlIHNlbGVjdGVkIFdyaXRlIGNvbW1hbmQgKHJlZmVyIHRvIHN0ZXAgMTEpLg0KKyAgKiAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgICAgZCkgVXNlIHRoZSBTRElPIGZsYWdzL2ludGVycnVwdHMgdG8gY2hlY2sgdGhlIHRyYW5zZmVyIHN0YXR1cy4NCisgICoNCisgICoNCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X3NkaW8uaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNESU8gDQorICAqIEBicmllZiBTRElPIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLyANCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyogLS0tLS0tLS0tLS0tIFNESU8gcmVnaXN0ZXJzIGJpdCBhZGRyZXNzIGluIHRoZSBhbGlhcyByZWdpb24gLS0tLS0tLS0tLS0gKi8NCisjZGVmaW5lIFNESU9fT0ZGU0VUICAgICAgICAgICAgICAgIChTRElPX0JBU0UgLSBQRVJJUEhfQkFTRSkNCisNCisvKiAtLS0gQ0xLQ1IgUmVnaXN0ZXIgLS0tKi8NCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgQ0xLRU4gYml0ICovDQorI2RlZmluZSBDTEtDUl9PRkZTRVQgICAgICAgICAgICAgIChTRElPX09GRlNFVCArIDB4MDQpDQorI2RlZmluZSBDTEtFTl9CaXROdW1iZXIgICAgICAgICAgIDB4MDgNCisjZGVmaW5lIENMS0NSX0NMS0VOX0JCICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKENMS0NSX09GRlNFVCAqIDMyKSArIChDTEtFTl9CaXROdW1iZXIgKiA0KSkNCisNCisvKiAtLS0gQ01EIFJlZ2lzdGVyIC0tLSovDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIFNESU9TVVNQRU5EIGJpdCAqLw0KKyNkZWZpbmUgQ01EX09GRlNFVCAgICAgICAgICAgICAgICAoU0RJT19PRkZTRVQgKyAweDBDKQ0KKyNkZWZpbmUgU0RJT1NVU1BFTkRfQml0TnVtYmVyICAgICAweDBCDQorI2RlZmluZSBDTURfU0RJT1NVU1BFTkRfQkIgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDTURfT0ZGU0VUICogMzIpICsgKFNESU9TVVNQRU5EX0JpdE51bWJlciAqIDQpKQ0KKw0KKy8qIEFsaWFzIHdvcmQgYWRkcmVzcyBvZiBFTkNNRENPTVBMIGJpdCAqLw0KKyNkZWZpbmUgRU5DTURDT01QTF9CaXROdW1iZXIgICAgICAweDBDDQorI2RlZmluZSBDTURfRU5DTURDT01QTF9CQiAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDTURfT0ZGU0VUICogMzIpICsgKEVOQ01EQ09NUExfQml0TnVtYmVyICogNCkpDQorDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIE5JRU4gYml0ICovDQorI2RlZmluZSBOSUVOX0JpdE51bWJlciAgICAgICAgICAgIDB4MEQNCisjZGVmaW5lIENNRF9OSUVOX0JCICAgICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKENNRF9PRkZTRVQgKiAzMikgKyAoTklFTl9CaXROdW1iZXIgKiA0KSkNCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgQVRBQ01EIGJpdCAqLw0KKyNkZWZpbmUgQVRBQ01EX0JpdE51bWJlciAgICAgICAgICAweDBFDQorI2RlZmluZSBDTURfQVRBQ01EX0JCICAgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChDTURfT0ZGU0VUICogMzIpICsgKEFUQUNNRF9CaXROdW1iZXIgKiA0KSkNCisNCisvKiAtLS0gRENUUkwgUmVnaXN0ZXIgLS0tKi8NCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgRE1BRU4gYml0ICovDQorI2RlZmluZSBEQ1RSTF9PRkZTRVQgICAgICAgICAgICAgIChTRElPX09GRlNFVCArIDB4MkMpDQorI2RlZmluZSBETUFFTl9CaXROdW1iZXIgICAgICAgICAgIDB4MDMNCisjZGVmaW5lIERDVFJMX0RNQUVOX0JCICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKERDVFJMX09GRlNFVCAqIDMyKSArIChETUFFTl9CaXROdW1iZXIgKiA0KSkNCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgUldTVEFSVCBiaXQgKi8NCisjZGVmaW5lIFJXU1RBUlRfQml0TnVtYmVyICAgICAgICAgMHgwOA0KKyNkZWZpbmUgRENUUkxfUldTVEFSVF9CQiAgICAgICAgICAoUEVSSVBIX0JCX0JBU0UgKyAoRENUUkxfT0ZGU0VUICogMzIpICsgKFJXU1RBUlRfQml0TnVtYmVyICogNCkpDQorDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIFJXU1RPUCBiaXQgKi8NCisjZGVmaW5lIFJXU1RPUF9CaXROdW1iZXIgICAgICAgICAgMHgwOQ0KKyNkZWZpbmUgRENUUkxfUldTVE9QX0JCICAgICAgICAgICAoUEVSSVBIX0JCX0JBU0UgKyAoRENUUkxfT0ZGU0VUICogMzIpICsgKFJXU1RPUF9CaXROdW1iZXIgKiA0KSkNCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgUldNT0QgYml0ICovDQorI2RlZmluZSBSV01PRF9CaXROdW1iZXIgICAgICAgICAgIDB4MEENCisjZGVmaW5lIERDVFJMX1JXTU9EX0JCICAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKERDVFJMX09GRlNFVCAqIDMyKSArIChSV01PRF9CaXROdW1iZXIgKiA0KSkNCisNCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgU0RJT0VOIGJpdCAqLw0KKyNkZWZpbmUgU0RJT0VOX0JpdE51bWJlciAgICAgICAgICAweDBCDQorI2RlZmluZSBEQ1RSTF9TRElPRU5fQkIgICAgICAgICAgIChQRVJJUEhfQkJfQkFTRSArIChEQ1RSTF9PRkZTRVQgKiAzMikgKyAoU0RJT0VOX0JpdE51bWJlciAqIDQpKQ0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0RJTyByZWdpc3RlcnMgYml0IG1hc2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorLyogLS0tIENMS0NSIFJlZ2lzdGVyIC0tLSovDQorLyogQ0xLQ1IgcmVnaXN0ZXIgY2xlYXIgbWFzayAqLw0KKyNkZWZpbmUgQ0xLQ1JfQ0xFQVJfTUFTSyAgICAgICAgICgodWludDMyX3QpMHhGRkZGODEwMCkgDQorDQorLyogLS0tIFBXUkNUUkwgUmVnaXN0ZXIgLS0tKi8NCisvKiBTRElPIFBXUkNUUkwgTWFzayAqLw0KKyNkZWZpbmUgUFdSX1BXUkNUUkxfTUFTSyAgICAgICAgICgodWludDMyX3QpMHhGRkZGRkZGQykNCisNCisvKiAtLS0gRENUUkwgUmVnaXN0ZXIgLS0tKi8NCisvKiBTRElPIERDVFJMIENsZWFyIE1hc2sgKi8NCisjZGVmaW5lIERDVFJMX0NMRUFSX01BU0sgICAgICAgICAoKHVpbnQzMl90KTB4RkZGRkZGMDgpDQorDQorLyogLS0tIENNRCBSZWdpc3RlciAtLS0qLw0KKy8qIENNRCBSZWdpc3RlciBjbGVhciBtYXNrICovDQorI2RlZmluZSBDTURfQ0xFQVJfTUFTSyAgICAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGODAwKQ0KKw0KKy8qIFNESU8gUkVTUCBSZWdpc3RlcnMgQWRkcmVzcyAqLw0KKyNkZWZpbmUgU0RJT19SRVNQX0FERFIgICAgICAgICAgICgodWludDMyX3QpKFNESU9fQkFTRSArIDB4MTQpKQ0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBTRElPX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBTRElPIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19EZUluaXQodm9pZCkNCit7DQorICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1NESU8sIEVOQUJMRSk7DQorICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1NESU8sIERJU0FCTEUpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgU0RJTyBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIA0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIFNESU9fSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBTRElPX0luaXRTdHJ1Y3QgOiBwb2ludGVyIHRvIGEgU0RJT19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgDQorICAqICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFNESU8gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19Jbml0KFNESU9fSW5pdFR5cGVEZWYqIFNESU9fSW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19DTE9DS19FREdFKFNESU9fSW5pdFN0cnVjdC0+U0RJT19DbG9ja0VkZ2UpKTsNCisgIGFzc2VydF9wYXJhbShJU19TRElPX0NMT0NLX0JZUEFTUyhTRElPX0luaXRTdHJ1Y3QtPlNESU9fQ2xvY2tCeXBhc3MpKTsNCisgIGFzc2VydF9wYXJhbShJU19TRElPX0NMT0NLX1BPV0VSX1NBVkUoU0RJT19Jbml0U3RydWN0LT5TRElPX0Nsb2NrUG93ZXJTYXZlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19CVVNfV0lERShTRElPX0luaXRTdHJ1Y3QtPlNESU9fQnVzV2lkZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fSEFSRFdBUkVfRkxPV19DT05UUk9MKFNESU9fSW5pdFN0cnVjdC0+U0RJT19IYXJkd2FyZUZsb3dDb250cm9sKSk7IA0KKyAgIA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTRElPIENMS0NSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIA0KKyAgLyogR2V0IHRoZSBTRElPIENMS0NSIHZhbHVlICovDQorICB0bXByZWcgPSBTRElPLT5DTEtDUjsNCisgIA0KKyAgLyogQ2xlYXIgQ0xLRElWLCBQV1JTQVYsIEJZUEFTUywgV0lEQlVTLCBORUdFREdFLCBIV0ZDX0VOIGJpdHMgKi8NCisgIHRtcHJlZyAmPSBDTEtDUl9DTEVBUl9NQVNLOw0KKyAgDQorICAvKiBTZXQgQ0xLRElWIGJpdHMgYWNjb3JkaW5nIHRvIFNESU9fQ2xvY2tEaXYgdmFsdWUgKi8NCisgIC8qIFNldCBQV1JTQVYgYml0IGFjY29yZGluZyB0byBTRElPX0Nsb2NrUG93ZXJTYXZlIHZhbHVlICovDQorICAvKiBTZXQgQllQQVNTIGJpdCBhY2NvcmRpbmcgdG8gU0RJT19DbG9ja0J5cGFzcyB2YWx1ZSAqLw0KKyAgLyogU2V0IFdJREJVUyBiaXRzIGFjY29yZGluZyB0byBTRElPX0J1c1dpZGUgdmFsdWUgKi8NCisgIC8qIFNldCBORUdFREdFIGJpdHMgYWNjb3JkaW5nIHRvIFNESU9fQ2xvY2tFZGdlIHZhbHVlICovDQorICAvKiBTZXQgSFdGQ19FTiBiaXRzIGFjY29yZGluZyB0byBTRElPX0hhcmR3YXJlRmxvd0NvbnRyb2wgdmFsdWUgKi8NCisgIHRtcHJlZyB8PSAoU0RJT19Jbml0U3RydWN0LT5TRElPX0Nsb2NrRGl2ICB8IFNESU9fSW5pdFN0cnVjdC0+U0RJT19DbG9ja1Bvd2VyU2F2ZSB8DQorICAgICAgICAgICAgIFNESU9fSW5pdFN0cnVjdC0+U0RJT19DbG9ja0J5cGFzcyB8IFNESU9fSW5pdFN0cnVjdC0+U0RJT19CdXNXaWRlIHwNCisgICAgICAgICAgICAgU0RJT19Jbml0U3RydWN0LT5TRElPX0Nsb2NrRWRnZSB8IFNESU9fSW5pdFN0cnVjdC0+U0RJT19IYXJkd2FyZUZsb3dDb250cm9sKTsgDQorICANCisgIC8qIFdyaXRlIHRvIFNESU8gQ0xLQ1IgKi8NCisgIFNESU8tPkNMS0NSID0gdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFNESU9fSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBTRElPX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYW4gU0RJT19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggDQorICAqICAgICAgICAgd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19TdHJ1Y3RJbml0KFNESU9fSW5pdFR5cGVEZWYqIFNESU9fSW5pdFN0cnVjdCkNCit7DQorICAvKiBTRElPX0luaXRTdHJ1Y3QgbWVtYmVycyBkZWZhdWx0IHZhbHVlICovDQorICBTRElPX0luaXRTdHJ1Y3QtPlNESU9fQ2xvY2tEaXYgPSAweDAwOw0KKyAgU0RJT19Jbml0U3RydWN0LT5TRElPX0Nsb2NrRWRnZSA9IFNESU9fQ2xvY2tFZGdlX1Jpc2luZzsNCisgIFNESU9fSW5pdFN0cnVjdC0+U0RJT19DbG9ja0J5cGFzcyA9IFNESU9fQ2xvY2tCeXBhc3NfRGlzYWJsZTsNCisgIFNESU9fSW5pdFN0cnVjdC0+U0RJT19DbG9ja1Bvd2VyU2F2ZSA9IFNESU9fQ2xvY2tQb3dlclNhdmVfRGlzYWJsZTsNCisgIFNESU9fSW5pdFN0cnVjdC0+U0RJT19CdXNXaWRlID0gU0RJT19CdXNXaWRlXzFiOw0KKyAgU0RJT19Jbml0U3RydWN0LT5TRElPX0hhcmR3YXJlRmxvd0NvbnRyb2wgPSBTRElPX0hhcmR3YXJlRmxvd0NvbnRyb2xfRGlzYWJsZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgU0RJTyBDbG9jay4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBTRElPIENsb2NrLiANCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTRElPX0Nsb2NrQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgKihfX0lPIHVpbnQzMl90ICopIENMS0NSX0NMS0VOX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBwb3dlciBzdGF0dXMgb2YgdGhlIGNvbnRyb2xsZXIuDQorICAqIEBwYXJhbSAgU0RJT19Qb3dlclN0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFBvd2VyIHN0YXRlLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFNESU9fUG93ZXJTdGF0ZV9PRkY6IFNESU8gUG93ZXIgT0ZGDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX1Bvd2VyU3RhdGVfT046IFNESU8gUG93ZXIgT04NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19TZXRQb3dlclN0YXRlKHVpbnQzMl90IFNESU9fUG93ZXJTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fUE9XRVJfU1RBVEUoU0RJT19Qb3dlclN0YXRlKSk7DQorICANCisgIFNESU8tPlBPV0VSID0gU0RJT19Qb3dlclN0YXRlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBHZXRzIHRoZSBwb3dlciBzdGF0dXMgb2YgdGhlIGNvbnRyb2xsZXIuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIFBvd2VyIHN0YXR1cyBvZiB0aGUgY29udHJvbGxlci4gVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIA0KKyAgKiAgICAgICAgIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgLSAweDAwOiBQb3dlciBPRkYNCisgICogICAgICAgICAgICAtIDB4MDI6IFBvd2VyIFVQDQorICAqICAgICAgICAgICAgLSAweDAzOiBQb3dlciBPTiANCisgICovDQordWludDMyX3QgU0RJT19HZXRQb3dlclN0YXRlKHZvaWQpDQorew0KKyAgcmV0dXJuIChTRElPLT5QT1dFUiAmICh+UFdSX1BXUkNUUkxfTUFTSykpOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0dyb3VwMiBDb21tYW5kIHBhdGggc3RhdGUgbWFjaGluZSAoQ1BTTSkgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgQ29tbWFuZCBwYXRoIHN0YXRlIG1hY2hpbmUgKENQU00pIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgIENvbW1hbmQgcGF0aCBzdGF0ZSBtYWNoaW5lIChDUFNNKSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBwcm9ncmFtIGFuZCByZWFkIHRoZSBDb21tYW5kIHBhdGggDQorICBzdGF0ZSBtYWNoaW5lIChDUFNNKS4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFNESU8gQ29tbWFuZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCANCisgICogICAgICAgICBwYXJhbWV0ZXJzIGluIHRoZSBTRElPX0NtZEluaXRTdHJ1Y3QgYW5kIHNlbmQgdGhlIGNvbW1hbmQuDQorICAqIEBwYXJhbSAgU0RJT19DbWRJbml0U3RydWN0IDogcG9pbnRlciB0byBhIFNESU9fQ21kSW5pdFR5cGVEZWYgDQorICAqICAgICAgICAgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBTRElPIA0KKyAgKiAgICAgICAgIGNvbW1hbmQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNESU9fU2VuZENvbW1hbmQoU0RJT19DbWRJbml0VHlwZURlZiAqU0RJT19DbWRJbml0U3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19DTURfSU5ERVgoU0RJT19DbWRJbml0U3RydWN0LT5TRElPX0NtZEluZGV4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19SRVNQT05TRShTRElPX0NtZEluaXRTdHJ1Y3QtPlNESU9fUmVzcG9uc2UpKTsNCisgIGFzc2VydF9wYXJhbShJU19TRElPX1dBSVQoU0RJT19DbWRJbml0U3RydWN0LT5TRElPX1dhaXQpKTsNCisgIGFzc2VydF9wYXJhbShJU19TRElPX0NQU00oU0RJT19DbWRJbml0U3RydWN0LT5TRElPX0NQU00pKTsNCisgIA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTRElPIEFSRyBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBTZXQgdGhlIFNESU8gQXJndW1lbnQgdmFsdWUgKi8NCisgIFNESU8tPkFSRyA9IFNESU9fQ21kSW5pdFN0cnVjdC0+U0RJT19Bcmd1bWVudDsNCisgIA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTRElPIENNRCBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovICANCisgIC8qIEdldCB0aGUgU0RJTyBDTUQgdmFsdWUgKi8NCisgIHRtcHJlZyA9IFNESU8tPkNNRDsNCisgIC8qIENsZWFyIENNRElOREVYLCBXQUlUUkVTUCwgV0FJVElOVCwgV0FJVFBFTkQsIENQU01FTiBiaXRzICovDQorICB0bXByZWcgJj0gQ01EX0NMRUFSX01BU0s7DQorICAvKiBTZXQgQ01ESU5ERVggYml0cyBhY2NvcmRpbmcgdG8gU0RJT19DbWRJbmRleCB2YWx1ZSAqLw0KKyAgLyogU2V0IFdBSVRSRVNQIGJpdHMgYWNjb3JkaW5nIHRvIFNESU9fUmVzcG9uc2UgdmFsdWUgKi8NCisgIC8qIFNldCBXQUlUSU5UIGFuZCBXQUlUUEVORCBiaXRzIGFjY29yZGluZyB0byBTRElPX1dhaXQgdmFsdWUgKi8NCisgIC8qIFNldCBDUFNNRU4gYml0cyBhY2NvcmRpbmcgdG8gU0RJT19DUFNNIHZhbHVlICovDQorICB0bXByZWcgfD0gKHVpbnQzMl90KVNESU9fQ21kSW5pdFN0cnVjdC0+U0RJT19DbWRJbmRleCB8IFNESU9fQ21kSW5pdFN0cnVjdC0+U0RJT19SZXNwb25zZQ0KKyAgICAgICAgICAgfCBTRElPX0NtZEluaXRTdHJ1Y3QtPlNESU9fV2FpdCB8IFNESU9fQ21kSW5pdFN0cnVjdC0+U0RJT19DUFNNOw0KKyAgDQorICAvKiBXcml0ZSB0byBTRElPIENNRCAqLw0KKyAgU0RJTy0+Q01EID0gdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFNESU9fQ21kSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBTRElPX0NtZEluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYW4gU0RJT19DbWRJbml0VHlwZURlZiANCisgICogICAgICAgICBzdHJ1Y3R1cmUgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19DbWRTdHJ1Y3RJbml0KFNESU9fQ21kSW5pdFR5cGVEZWYqIFNESU9fQ21kSW5pdFN0cnVjdCkNCit7DQorICAvKiBTRElPX0NtZEluaXRTdHJ1Y3QgbWVtYmVycyBkZWZhdWx0IHZhbHVlICovDQorICBTRElPX0NtZEluaXRTdHJ1Y3QtPlNESU9fQXJndW1lbnQgPSAweDAwOw0KKyAgU0RJT19DbWRJbml0U3RydWN0LT5TRElPX0NtZEluZGV4ID0gMHgwMDsNCisgIFNESU9fQ21kSW5pdFN0cnVjdC0+U0RJT19SZXNwb25zZSA9IFNESU9fUmVzcG9uc2VfTm87DQorICBTRElPX0NtZEluaXRTdHJ1Y3QtPlNESU9fV2FpdCA9IFNESU9fV2FpdF9ObzsNCisgIFNESU9fQ21kSW5pdFN0cnVjdC0+U0RJT19DUFNNID0gU0RJT19DUFNNX0Rpc2FibGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgY29tbWFuZCBpbmRleCBvZiBsYXN0IGNvbW1hbmQgZm9yIHdoaWNoIHJlc3BvbnNlIHJlY2VpdmVkLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBSZXR1cm5zIHRoZSBjb21tYW5kIGluZGV4IG9mIHRoZSBsYXN0IGNvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQuDQorICAqLw0KK3VpbnQ4X3QgU0RJT19HZXRDb21tYW5kUmVzcG9uc2Uodm9pZCkNCit7DQorICByZXR1cm4gKHVpbnQ4X3QpKFNESU8tPlJFU1BDTUQpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gdGhlIGNhcmQgZm9yIHRoZSBsYXN0IGNvbW1hbmQuDQorICAqIEBwYXJhbSAgU0RJT19SRVNQOiBTcGVjaWZpZXMgdGhlIFNESU8gcmVzcG9uc2UgcmVnaXN0ZXIuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRVNQMTogUmVzcG9uc2UgUmVnaXN0ZXIgMQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRVNQMjogUmVzcG9uc2UgUmVnaXN0ZXIgMg0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRVNQMzogUmVzcG9uc2UgUmVnaXN0ZXIgMw0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SRVNQNDogUmVzcG9uc2UgUmVnaXN0ZXIgNA0KKyAgKiBAcmV0dmFsIFRoZSBDb3JyZXNwb25kaW5nIHJlc3BvbnNlIHJlZ2lzdGVyIHZhbHVlLg0KKyAgKi8NCit1aW50MzJfdCBTRElPX0dldFJlc3BvbnNlKHVpbnQzMl90IFNESU9fUkVTUCkNCit7DQorICBfX0lPIHVpbnQzMl90IHRtcCA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fUkVTUChTRElPX1JFU1ApKTsNCisNCisgIHRtcCA9IFNESU9fUkVTUF9BRERSICsgU0RJT19SRVNQOw0KKyAgDQorICByZXR1cm4gKCooX19JTyB1aW50MzJfdCAqKSB0bXApOyANCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19Hcm91cDMgRGF0YSBwYXRoIHN0YXRlIG1hY2hpbmUgKERQU00pIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIERhdGEgcGF0aCBzdGF0ZSBtYWNoaW5lIChEUFNNKSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgIERhdGEgcGF0aCBzdGF0ZSBtYWNoaW5lIChEUFNNKSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBwcm9ncmFtIGFuZCByZWFkIHRoZSBEYXRhIHBhdGggDQorICBzdGF0ZSBtYWNoaW5lIChEUFNNKS4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFNESU8gZGF0YSBwYXRoIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIA0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIFNESU9fRGF0YUluaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgU0RJT19EYXRhSW5pdFN0cnVjdCA6IHBvaW50ZXIgdG8gYSBTRElPX0RhdGFJbml0VHlwZURlZiBzdHJ1Y3R1cmUgDQorICAqICAgICAgICAgdGhhdCBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFNESU8gY29tbWFuZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19EYXRhQ29uZmlnKFNESU9fRGF0YUluaXRUeXBlRGVmKiBTRElPX0RhdGFJbml0U3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19EQVRBX0xFTkdUSChTRElPX0RhdGFJbml0U3RydWN0LT5TRElPX0RhdGFMZW5ndGgpKTsNCisgIGFzc2VydF9wYXJhbShJU19TRElPX0JMT0NLX1NJWkUoU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19EYXRhQmxvY2tTaXplKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19UUkFOU0ZFUl9ESVIoU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19UcmFuc2ZlckRpcikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fVFJBTlNGRVJfTU9ERShTRElPX0RhdGFJbml0U3RydWN0LT5TRElPX1RyYW5zZmVyTW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fRFBTTShTRElPX0RhdGFJbml0U3RydWN0LT5TRElPX0RQU00pKTsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0RJTyBEVElNRVIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogU2V0IHRoZSBTRElPIERhdGEgVGltZU91dCB2YWx1ZSAqLw0KKyAgU0RJTy0+RFRJTUVSID0gU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19EYXRhVGltZU91dDsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU0RJTyBETEVOIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogU2V0IHRoZSBTRElPIERhdGFMZW5ndGggdmFsdWUgKi8NCisgIFNESU8tPkRMRU4gPSBTRElPX0RhdGFJbml0U3RydWN0LT5TRElPX0RhdGFMZW5ndGg7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNESU8gRENUUkwgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIA0KKyAgLyogR2V0IHRoZSBTRElPIERDVFJMIHZhbHVlICovDQorICB0bXByZWcgPSBTRElPLT5EQ1RSTDsNCisgIC8qIENsZWFyIERFTiwgRFRNT0RFLCBEVERJUiBhbmQgREJDS1NJWkUgYml0cyAqLw0KKyAgdG1wcmVnICY9IERDVFJMX0NMRUFSX01BU0s7DQorICAvKiBTZXQgREVOIGJpdCBhY2NvcmRpbmcgdG8gU0RJT19EUFNNIHZhbHVlICovDQorICAvKiBTZXQgRFRNT0RFIGJpdCBhY2NvcmRpbmcgdG8gU0RJT19UcmFuc2Zlck1vZGUgdmFsdWUgKi8NCisgIC8qIFNldCBEVERJUiBiaXQgYWNjb3JkaW5nIHRvIFNESU9fVHJhbnNmZXJEaXIgdmFsdWUgKi8NCisgIC8qIFNldCBEQkNLU0laRSBiaXRzIGFjY29yZGluZyB0byBTRElPX0RhdGFCbG9ja1NpemUgdmFsdWUgKi8NCisgIHRtcHJlZyB8PSAodWludDMyX3QpU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19EYXRhQmxvY2tTaXplIHwgU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19UcmFuc2ZlckRpcg0KKyAgICAgICAgICAgfCBTRElPX0RhdGFJbml0U3RydWN0LT5TRElPX1RyYW5zZmVyTW9kZSB8IFNESU9fRGF0YUluaXRTdHJ1Y3QtPlNESU9fRFBTTTsNCisNCisgIC8qIFdyaXRlIHRvIFNESU8gRENUUkwgKi8NCisgIFNESU8tPkRDVFJMID0gdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFNESU9fRGF0YUluaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgU0RJT19EYXRhSW5pdFN0cnVjdDogcG9pbnRlciB0byBhbiBTRElPX0RhdGFJbml0VHlwZURlZiBzdHJ1Y3R1cmUgDQorICAqICAgICAgICAgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19EYXRhU3RydWN0SW5pdChTRElPX0RhdGFJbml0VHlwZURlZiogU0RJT19EYXRhSW5pdFN0cnVjdCkNCit7DQorICAvKiBTRElPX0RhdGFJbml0U3RydWN0IG1lbWJlcnMgZGVmYXVsdCB2YWx1ZSAqLw0KKyAgU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19EYXRhVGltZU91dCA9IDB4RkZGRkZGRkY7DQorICBTRElPX0RhdGFJbml0U3RydWN0LT5TRElPX0RhdGFMZW5ndGggPSAweDAwOw0KKyAgU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19EYXRhQmxvY2tTaXplID0gU0RJT19EYXRhQmxvY2tTaXplXzFiOw0KKyAgU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19UcmFuc2ZlckRpciA9IFNESU9fVHJhbnNmZXJEaXJfVG9DYXJkOw0KKyAgU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19UcmFuc2Zlck1vZGUgPSBTRElPX1RyYW5zZmVyTW9kZV9CbG9jazsgIA0KKyAgU0RJT19EYXRhSW5pdFN0cnVjdC0+U0RJT19EUFNNID0gU0RJT19EUFNNX0Rpc2FibGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgbnVtYmVyIG9mIHJlbWFpbmluZyBkYXRhIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOdW1iZXIgb2YgcmVtYWluaW5nIGRhdGEgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQNCisgICovDQordWludDMyX3QgU0RJT19HZXREYXRhQ291bnRlcih2b2lkKQ0KK3sgDQorICByZXR1cm4gU0RJTy0+RENPVU5UOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZWFkIG9uZSBkYXRhIHdvcmQgZnJvbSBSeCBGSUZPLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBEYXRhIHJlY2VpdmVkDQorICAqLw0KK3VpbnQzMl90IFNESU9fUmVhZERhdGEodm9pZCkNCit7IA0KKyAgcmV0dXJuIFNESU8tPkZJRk87DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFdyaXRlIG9uZSBkYXRhIHdvcmQgdG8gVHggRklGTy4NCisgICogQHBhcmFtICBEYXRhOiAzMi1iaXQgZGF0YSB3b3JkIHRvIHdyaXRlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTRElPX1dyaXRlRGF0YSh1aW50MzJfdCBEYXRhKQ0KK3sgDQorICBTRElPLT5GSUZPID0gRGF0YTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdvcmRzIGxlZnQgdG8gYmUgd3JpdHRlbiB0byBvciByZWFkIGZyb20gRklGTy4JDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIFJlbWFpbmluZyBudW1iZXIgb2Ygd29yZHMuDQorICAqLw0KK3VpbnQzMl90IFNESU9fR2V0RklGT0NvdW50KHZvaWQpDQoreyANCisgIHJldHVybiBTRElPLT5GSUZPQ05UOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0dyb3VwNCBTRElPIElPIENhcmRzIG1vZGUgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgU0RJTyBJTyBDYXJkcyBtb2RlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgU0RJTyBJTyBDYXJkcyBtb2RlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGUgZnVuY3Rpb25zIGFsbG93aW5nIHRvIHByb2dyYW0gYW5kIHJlYWQgdGhlIFNESU8gSU8gQ2FyZHMuDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFN0YXJ0cyB0aGUgU0QgSS9PIFJlYWQgV2FpdCBvcGVyYXRpb24uCQ0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFN0YXJ0IFNESU8gUmVhZCBXYWl0IG9wZXJhdGlvbi4gDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19TdGFydFNESU9SZWFkV2FpdChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICAqKF9fSU8gdWludDMyX3QgKikgRENUUkxfUldTVEFSVF9CQiA9ICh1aW50MzJfdCkgTmV3U3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFN0b3BzIHRoZSBTRCBJL08gUmVhZCBXYWl0IG9wZXJhdGlvbi4JDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgU3RvcCBTRElPIFJlYWQgV2FpdCBvcGVyYXRpb24uIA0KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNESU9fU3RvcFNESU9SZWFkV2FpdChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICAqKF9fSU8gdWludDMyX3QgKikgRENUUkxfUldTVE9QX0JCID0gKHVpbnQzMl90KSBOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyBvbmUgb2YgdGhlIHR3byBvcHRpb25zIG9mIGluc2VydGluZyByZWFkIHdhaXQgaW50ZXJ2YWwuDQorICAqIEBwYXJhbSAgU0RJT19SZWFkV2FpdE1vZGU6IFNEIEkvTyBSZWFkIFdhaXQgb3BlcmF0aW9uIG1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToNCisgICogICAgICAgICAgICBAYXJnIFNESU9fUmVhZFdhaXRNb2RlX0NMSzogUmVhZCBXYWl0IGNvbnRyb2wgYnkgc3RvcHBpbmcgU0RJT0NMSw0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19SZWFkV2FpdE1vZGVfREFUQTI6IFJlYWQgV2FpdCBjb250cm9sIHVzaW5nIFNESU9fREFUQTINCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19TZXRTRElPUmVhZFdhaXRNb2RlKHVpbnQzMl90IFNESU9fUmVhZFdhaXRNb2RlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19SRUFEV0FJVF9NT0RFKFNESU9fUmVhZFdhaXRNb2RlKSk7DQorICANCisgICooX19JTyB1aW50MzJfdCAqKSBEQ1RSTF9SV01PRF9CQiA9IFNESU9fUmVhZFdhaXRNb2RlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBTRCBJL08gTW9kZSBPcGVyYXRpb24uDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiBTRElPIHNwZWNpZmljIG9wZXJhdGlvbi4gDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19TZXRTRElPT3BlcmF0aW9uKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7IA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgICooX19JTyB1aW50MzJfdCAqKSBEQ1RSTF9TRElPRU5fQkIgPSAodWludDMyX3QpTmV3U3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFNEIEkvTyBNb2RlIHN1c3BlbmQgY29tbWFuZCBzZW5kaW5nLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFNEIEkvTyBNb2RlIHN1c3BlbmQgY29tbWFuZC4NCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTRElPX1NlbmRTRElPU3VzcGVuZENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICAqKF9fSU8gdWludDMyX3QgKikgQ01EX1NESU9TVVNQRU5EX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTRElPX0dyb3VwNSBDRS1BVEEgbW9kZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBDRS1BVEEgbW9kZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgIENFLUFUQSBtb2RlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGUgZnVuY3Rpb25zIGFsbG93aW5nIHRvIHByb2dyYW0gYW5kIHJlYWQgdGhlIENFLUFUQSBjYXJkLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBjb21tYW5kIGNvbXBsZXRpb24gc2lnbmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgY29tbWFuZCBjb21wbGV0aW9uIHNpZ25hbC4gDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19Db21tYW5kQ29tcGxldGlvbkNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICAqKF9fSU8gdWludDMyX3QgKikgQ01EX0VOQ01EQ09NUExfQkIgPSAodWludDMyX3QpTmV3U3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIENFLUFUQSBpbnRlcnJ1cHQuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiBDRS1BVEEgaW50ZXJydXB0LiANCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTRElPX0NFQVRBSVRDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgKihfX0lPIHVpbnQzMl90ICopIENNRF9OSUVOX0JCID0gKHVpbnQzMl90KSgofigodWludDMyX3QpTmV3U3RhdGUpKSAmICgodWludDMyX3QpMHgxKSk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNlbmRzIENFLUFUQSBjb21tYW5kIChDTUQ2MSkuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiBDRS1BVEEgY29tbWFuZC4gDQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19TZW5kQ0VBVEFDbWQoRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgKihfX0lPIHVpbnQzMl90ICopIENNRF9BVEFDTURfQkIgPSAodWludDMyX3QpTmV3U3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNESU9fR3JvdXA2IERNQSB0cmFuc2ZlcnMgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgIERNQSB0cmFuc2ZlcnMgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZSBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gcHJvZ3JhbSBTRElPIERNQSB0cmFuc2Zlci4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgU0RJTyBETUEgcmVxdWVzdC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBTRElPIERNQSByZXF1ZXN0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTRElPX0RNQUNtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgICooX19JTyB1aW50MzJfdCAqKSBEQ1RSTF9ETUFFTl9CQiA9ICh1aW50MzJfdClOZXdTdGF0ZTsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU0RJT19Hcm91cDcgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBTRElPIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgU0RJT19JVDogc3BlY2lmaWVzIHRoZSBTRElPIGludGVycnVwdCBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ1RJTUVPVVQ6IENvbW1hbmQgcmVzcG9uc2UgdGltZW91dCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRFRJTUVPVVQ6IERhdGEgdGltZW91dCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhVTkRFUlI6IFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gZXJyb3IgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYT1ZFUlI6ICBSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EU0VOVDogIENvbW1hbmQgc2VudCAobm8gcmVzcG9uc2UgcmVxdWlyZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU1RCSVRFUlI6IFN0YXJ0IGJpdCBub3QgZGV0ZWN0ZWQgb24gYWxsIGRhdGEgc2lnbmFscyBpbiB3aWRlIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzIG1vZGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RCQ0tFTkQ6ICBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURBQ1Q6ICAgQ29tbWFuZCB0cmFuc2ZlciBpbiBwcm9ncmVzcyBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYQUNUOiAgICBEYXRhIHJlY2VpdmUgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYRklGT0hFOiBUcmFuc21pdCBGSUZPIEhhbGYgRW1wdHkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYRklGT0hGOiBSZWNlaXZlIEZJRk8gSGFsZiBGdWxsIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWEZJRk9GOiAgVHJhbnNtaXQgRklGTyBmdWxsIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9GOiAgUmVjZWl2ZSBGSUZPIGZ1bGwgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYRklGT0U6ICBUcmFuc21pdCBGSUZPIGVtcHR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9FOiAgUmVjZWl2ZSBGSUZPIGVtcHR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWERBVkw6ICAgRGF0YSBhdmFpbGFibGUgaW4gdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NFQVRBRU5EOiBDRS1BVEEgY29tbWFuZCBjb21wbGV0aW9uIHNpZ25hbCByZWNlaXZlZCBmb3IgQ01ENjEgaW50ZXJydXB0DQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIFNESU8gaW50ZXJydXB0cy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lIA0KKyAgKi8NCit2b2lkIFNESU9fSVRDb25maWcodWludDMyX3QgU0RJT19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19JVChTRElPX0lUKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBTRElPIGludGVycnVwdHMgKi8NCisgICAgU0RJTy0+TUFTSyB8PSBTRElPX0lUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBTRElPIGludGVycnVwdHMgKi8NCisgICAgU0RJTy0+TUFTSyAmPSB+U0RJT19JVDsNCisgIH0gDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU0RJTyBmbGFnIGlzIHNldCBvciBub3QuDQorICAqIEBwYXJhbSAgU0RJT19GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NDUkNGQUlMOiBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ1RJTUVPVVQ6IENvbW1hbmQgcmVzcG9uc2UgdGltZW91dA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RUSU1FT1VUOiBEYXRhIHRpbWVvdXQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19UWFVOREVSUjogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBlcnJvcg0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1JYT1ZFUlI6ICBSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3INCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURSRU5EOiAgQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkNCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkNCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1NUQklURVJSOiBTdGFydCBiaXQgbm90IGRldGVjdGVkIG9uIGFsbCBkYXRhIHNpZ25hbHMgaW4gd2lkZSBidXMgbW9kZS4NCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19EQkNLRU5EOiAgRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNREFDVDogICBDb21tYW5kIHRyYW5zZmVyIGluIHByb2dyZXNzDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MNCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19SWEFDVDogICAgRGF0YSByZWNlaXZlIGluIHByb2dyZXNzDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfVFhGSUZPSEU6IFRyYW5zbWl0IEZJRk8gSGFsZiBFbXB0eQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1JYRklGT0hGOiBSZWNlaXZlIEZJRk8gSGFsZiBGdWxsDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfVFhGSUZPRjogIFRyYW5zbWl0IEZJRk8gZnVsbA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1JYRklGT0Y6ICBSZWNlaXZlIEZJRk8gZnVsbA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1RYRklGT0U6ICBUcmFuc21pdCBGSUZPIGVtcHR5DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfUlhGSUZPRTogIFJlY2VpdmUgRklGTyBlbXB0eQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1RYREFWTDogICBEYXRhIGF2YWlsYWJsZSBpbiB0cmFuc21pdCBGSUZPDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfUlhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHJlY2VpdmUgRklGTw0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1NESU9JVDogICBTRCBJL08gaW50ZXJydXB0IHJlY2VpdmVkDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ0VBVEFFTkQ6IENFLUFUQSBjb21tYW5kIGNvbXBsZXRpb24gc2lnbmFsIHJlY2VpdmVkIGZvciBDTUQ2MQ0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgU0RJT19GTEFHIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitGbGFnU3RhdHVzIFNESU9fR2V0RmxhZ1N0YXR1cyh1aW50MzJfdCBTRElPX0ZMQUcpDQoreyANCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19GTEFHKFNESU9fRkxBRykpOw0KKyAgDQorICBpZiAoKFNESU8tPlNUQSAmIFNESU9fRkxBRykgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBTRElPJ3MgcGVuZGluZyBmbGFncy4NCisgICogQHBhcmFtICBTRElPX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjbGVhci4gIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfRENSQ0ZBSUw6IERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkNCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19DVElNRU9VVDogQ29tbWFuZCByZXNwb25zZSB0aW1lb3V0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfRFRJTUVPVVQ6IERhdGEgdGltZW91dA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX1RYVU5ERVJSOiBUcmFuc21pdCBGSUZPIHVuZGVycnVuIGVycm9yDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvcg0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NNRFNFTlQ6ICBDb21tYW5kIHNlbnQgKG5vIHJlc3BvbnNlIHJlcXVpcmVkKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElEQ09VTlQsIGlzIHplcm8pDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfU1RCSVRFUlI6IFN0YXJ0IGJpdCBub3QgZGV0ZWN0ZWQgb24gYWxsIGRhdGEgc2lnbmFscyBpbiB3aWRlIGJ1cyBtb2RlDQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0ZMQUdfREJDS0VORDogIERhdGEgYmxvY2sgc2VudC9yZWNlaXZlZCAoQ1JDIGNoZWNrIHBhc3NlZCkNCisgICogICAgICAgICAgICBAYXJnIFNESU9fRkxBR19TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19GTEFHX0NFQVRBRU5EOiBDRS1BVEEgY29tbWFuZCBjb21wbGV0aW9uIHNpZ25hbCByZWNlaXZlZCBmb3IgQ01ENjENCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU0RJT19DbGVhckZsYWcodWludDMyX3QgU0RJT19GTEFHKQ0KK3sgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fQ0xFQVJfRkxBRyhTRElPX0ZMQUcpKTsNCisgICANCisgIFNESU8tPklDUiA9IFNESU9fRkxBRzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBTRElPIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFNESU9fSVQ6IHNwZWNpZmllcyB0aGUgU0RJTyBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0NSQ0ZBSUw6IENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQ1JDRkFJTDogRGF0YSBibG9jayBzZW50L3JlY2VpdmVkIChDUkMgY2hlY2sgZmFpbGVkKSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ1RJTUVPVVQ6IENvbW1hbmQgcmVzcG9uc2UgdGltZW91dCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfRFRJTUVPVVQ6IERhdGEgdGltZW91dCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhVTkRFUlI6IFRyYW5zbWl0IEZJRk8gdW5kZXJydW4gZXJyb3IgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYT1ZFUlI6ICBSZWNlaXZlZCBGSUZPIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NNRFJFTkQ6ICBDb21tYW5kIHJlc3BvbnNlIHJlY2VpdmVkIChDUkMgY2hlY2sgcGFzc2VkKSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EU0VOVDogIENvbW1hbmQgc2VudCAobm8gcmVzcG9uc2UgcmVxdWlyZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EQVRBRU5EOiAgRGF0YSBlbmQgKGRhdGEgY291bnRlciwgU0RJRENPVU5ULCBpcyB6ZXJvKSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU1RCSVRFUlI6IFN0YXJ0IGJpdCBub3QgZGV0ZWN0ZWQgb24gYWxsIGRhdGEgc2lnbmFscyBpbiB3aWRlIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzIG1vZGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RCQ0tFTkQ6ICBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURBQ1Q6ICAgQ29tbWFuZCB0cmFuc2ZlciBpbiBwcm9ncmVzcyBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfVFhBQ1Q6ICAgIERhdGEgdHJhbnNtaXQgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYQUNUOiAgICBEYXRhIHJlY2VpdmUgaW4gcHJvZ3Jlc3MgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYRklGT0hFOiBUcmFuc21pdCBGSUZPIEhhbGYgRW1wdHkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1JYRklGT0hGOiBSZWNlaXZlIEZJRk8gSGFsZiBGdWxsIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWEZJRk9GOiAgVHJhbnNtaXQgRklGTyBmdWxsIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9GOiAgUmVjZWl2ZSBGSUZPIGZ1bGwgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1RYRklGT0U6ICBUcmFuc21pdCBGSUZPIGVtcHR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9SWEZJRk9FOiAgUmVjZWl2ZSBGSUZPIGVtcHR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWERBVkw6ICAgRGF0YSBhdmFpbGFibGUgaW4gdHJhbnNtaXQgRklGTyBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhEQVZMOiAgIERhdGEgYXZhaWxhYmxlIGluIHJlY2VpdmUgRklGTyBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfU0RJT0lUOiAgIFNEIEkvTyBpbnRlcnJ1cHQgcmVjZWl2ZWQgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0NFQVRBRU5EOiBDRS1BVEEgY29tbWFuZCBjb21wbGV0aW9uIHNpZ25hbCByZWNlaXZlZCBmb3IgQ01ENjEgaW50ZXJydXB0DQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBTRElPX0lUIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBTRElPX0dldElUU3RhdHVzKHVpbnQzMl90IFNESU9fSVQpDQoreyANCisgIElUU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NESU9fR0VUX0lUKFNESU9fSVQpKTsNCisgIGlmICgoU0RJTy0+U1RBICYgU0RJT19JVCkgIT0gKHVpbnQzMl90KVJFU0VUKSAgDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICByZXR1cm4gYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIFNESU8ncyBpbnRlcnJ1cHQgcGVuZGluZyBiaXRzLg0KKyAgKiBAcGFyYW0gIFNESU9fSVQ6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DQ1JDRkFJTDogQ29tbWFuZCByZXNwb25zZSByZWNlaXZlZCAoQ1JDIGNoZWNrIGZhaWxlZCkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RDUkNGQUlMOiBEYXRhIGJsb2NrIHNlbnQvcmVjZWl2ZWQgKENSQyBjaGVjayBmYWlsZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DVElNRU9VVDogQ29tbWFuZCByZXNwb25zZSB0aW1lb3V0IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9EVElNRU9VVDogRGF0YSB0aW1lb3V0IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9UWFVOREVSUjogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBlcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfUlhPVkVSUjogIFJlY2VpdmVkIEZJRk8gb3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ01EUkVORDogIENvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKENSQyBjaGVjayBwYXNzZWQpIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9DTURTRU5UOiAgQ29tbWFuZCBzZW50IChubyByZXNwb25zZSByZXF1aXJlZCkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX0RBVEFFTkQ6ICBEYXRhIGVuZCAoZGF0YSBjb3VudGVyLCBTRElPX0RDT1VOVCwgaXMgemVybykgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBTRElPX0lUX1NUQklURVJSOiBTdGFydCBiaXQgbm90IGRldGVjdGVkIG9uIGFsbCBkYXRhIHNpZ25hbHMgaW4gd2lkZSANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cyBtb2RlIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgU0RJT19JVF9TRElPSVQ6ICAgU0QgSS9PIGludGVycnVwdCByZWNlaXZlZCBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFNESU9fSVRfQ0VBVEFFTkQ6IENFLUFUQSBjb21tYW5kIGNvbXBsZXRpb24gc2lnbmFsIHJlY2VpdmVkIGZvciBDTUQ2MQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTRElPX0NsZWFySVRQZW5kaW5nQml0KHVpbnQzMl90IFNESU9fSVQpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU0RJT19DTEVBUl9JVChTRElPX0lUKSk7DQorICAgDQorICBTRElPLT5JQ1IgPSBTRElPX0lUOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X3NwaS5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM0NzVlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9zcGkuYwpAQCAtMCwwICsxLDExODMgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF9zcGkuYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBTZXJpYWwgcGVyaXBoZXJhbCBpbnRlcmZhY2UgKFNQSSk6ICAgICAgICAgICANCisgICogICAgICAgICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zDQorICAqICAgICAgICAgICAtIEhhcmR3YXJlIENSQyBDYWxjdWxhdGlvbg0KKyAgKiAgICAgICAgICAgLSBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCANCisgICogICAgICAgICAgIA0KKyAgKiAgQHZlcmJhdGltDQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgMS4gRW5hYmxlIHBlcmlwaGVyYWwgY2xvY2sgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgDQorICAqICAgICAgICAgICAgIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfU1BJMSwgRU5BQkxFKSBmb3IgU1BJMQ0KKyAgKiAgICAgICAgICAgICBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKFJDQ19BUEIxUGVyaXBoX1NQSTIsIEVOQUJMRSkgZm9yIFNQSTINCisgICogICAgICAgICAgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9TUEkzLCBFTkFCTEUpIGZvciBTUEkzLg0KKyAgKg0KKyAgKiAgICAgICAgICAyLiBFbmFibGUgU0NLLCBNT1NJLCBNSVNPIGFuZCBOU1MgR1BJTyBjbG9ja3MgdXNpbmcgUkNDX0FIQjFQZXJpcGhDbG9ja0NtZCgpDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9uLg0KKyAgKiAgICAgICAgICAgICBJbiBJMlMgbW9kZSwgaWYgYW4gZXh0ZXJuYWwgY2xvY2sgc291cmNlIGlzIHVzZWQgdGhlbiB0aGUgSTJTIENLSU4gcGluIEdQSU8NCisgICogICAgICAgICAgICAgY2xvY2sgc2hvdWxkIGFsc28gYmUgZW5hYmxlZC4NCisgICoNCisgICogICAgICAgICAgMy4gUGVyaXBoZXJhbHMgYWx0ZXJuYXRlIGZ1bmN0aW9uOiANCisgICogICAgICAgICAgICAgICAgIC0gQ29ubmVjdCB0aGUgcGluIHRvIHRoZSBkZXNpcmVkIHBlcmlwaGVyYWxzJyBBbHRlcm5hdGUgDQorICAqICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uIChBRikgdXNpbmcgR1BJT19QaW5BRkNvbmZpZygpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZSB0aGUgZGVzaXJlZCBwaW4gaW4gYWx0ZXJuYXRlIGZ1bmN0aW9uIGJ5Og0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX0luaXRTdHJ1Y3QtPkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9BRg0KKyAgKiAgICAgICAgICAgICAgICAgLSBTZWxlY3QgdGhlIHR5cGUsIHB1bGwtdXAvcHVsbC1kb3duIGFuZCBvdXRwdXQgc3BlZWQgdmlhIA0KKyAgKiAgICAgICAgICAgICAgICAgICBHUElPX1B1UGQsIEdQSU9fT1R5cGUgYW5kIEdQSU9fU3BlZWQgbWVtYmVycw0KKyAgKiAgICAgICAgICAgICAgICAgLSBDYWxsIEdQSU9fSW5pdCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICBJbiBJMlMgbW9kZSwgaWYgYW4gZXh0ZXJuYWwgY2xvY2sgc291cmNlIGlzIHVzZWQgdGhlbiB0aGUgSTJTIENLSU4gcGluDQorICAqICAgICAgICAgICAgICBzaG91bGQgYmUgYWxzbyBjb25maWd1cmVkIGluIEFsdGVybmF0ZSBmdW5jdGlvbiBQdXNoLXB1bGwgcHVsbC11cCBtb2RlLiANCisgICogICAgICAgIA0KKyAgKiAgICAgICAgICA0LiBQcm9ncmFtIHRoZSBQb2xhcml0eSwgUGhhc2UsIEZpcnN0IERhdGEsIEJhdWQgUmF0ZSBQcmVzY2FsZXIsIFNsYXZlIA0KKyAgKiAgICAgICAgICAgICBNYW5hZ2VtZW50LCBQZXJpcGhlcmFsIE1vZGUgYW5kIENSQyBQb2x5bm9taWFsIHZhbHVlcyB1c2luZyB0aGUgU1BJX0luaXQoKQ0KKyAgKiAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgSW4gSTJTIG1vZGUsIHByb2dyYW0gdGhlIE1vZGUsIFN0YW5kYXJkLCBEYXRhIEZvcm1hdCwgTUNMSyBPdXRwdXQsIEF1ZGlvIA0KKyAgKiAgICAgICAgICAgICBmcmVxdWVuY3kgYW5kIFBvbGFyaXR5IHVzaW5nIEkyU19Jbml0KCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgIEZvciBJMlMgbW9kZSwgbWFrZSBzdXJlIHRoYXQgZWl0aGVyOg0KKyAgKiAgICAgICAgICAgICAgLSBJMlMgUExMIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZ1bmN0aW9ucyBSQ0NfSTJTQ0xLQ29uZmlnKFJDQ19JMlMyQ0xLU291cmNlX1BMTEkyUyksIA0KKyAgKiAgICAgICAgICAgICAgICBSQ0NfUExMSTJTQ21kKEVOQUJMRSkgYW5kIFJDQ19HZXRGbGFnU3RhdHVzKFJDQ19GTEFHX1BMTEkyU1JEWSkuDQorICAqICAgICAgICAgICAgICBvciANCisgICogICAgICAgICAgICAgIC0gRXh0ZXJuYWwgY2xvY2sgc291cmNlIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIA0KKyAgKiAgICAgICAgICAgICAgICBSQ0NfSTJTQ0xLQ29uZmlnKFJDQ19JMlMyQ0xLU291cmNlX0V4dCkgYW5kIGFmdGVyIHNldHRpbmcgY29ycmVjdGx5IHRoZSBkZWZpbmUgY29uc3RhbnQNCisgICogICAgICAgICAgICAgICAgSTJTX0VYVEVSTkFMX0NMT0NLX1ZBTCBpbiB0aGUgc3RtMzJmMnh4X2NvbmYuaCBmaWxlLiANCisgICoNCisgICogICAgICAgICAgNS4gRW5hYmxlIHRoZSBOVklDIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgdXNpbmcgdGhlIGZ1bmN0aW9uIA0KKyAgKiAgICAgICAgICAgICBTUElfSVRDb25maWcoKSBpZiB5b3UgbmVlZCB0byB1c2UgaW50ZXJydXB0IG1vZGUuIA0KKyAgKg0KKyAgKiAgICAgICAgICA2LiBXaGVuIHVzaW5nIHRoZSBETUEgbW9kZSANCisgICogICAgICAgICAgICAgICAgICAgLSBDb25maWd1cmUgdGhlIERNQSB1c2luZyBETUFfSW5pdCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgICAgIC0gQWN0aXZlIHRoZSBuZWVkZWQgY2hhbm5lbCBSZXF1ZXN0IHVzaW5nIFNQSV9JMlNfRE1BQ21kKCkgZnVuY3Rpb24NCisgICogDQorICAqICAgICAgICAgIDcuIEVuYWJsZSB0aGUgU1BJIHVzaW5nIHRoZSBTUElfQ21kKCkgZnVuY3Rpb24gb3IgZW5hYmxlIHRoZSBJMlMgdXNpbmcNCisgICogICAgICAgICAgICAgSTJTX0NtZCgpLg0KKyAgKiANCisgICogICAgICAgICAgOC4gRW5hYmxlIHRoZSBETUEgdXNpbmcgdGhlIERNQV9DbWQoKSBmdW5jdGlvbiB3aGVuIHVzaW5nIERNQSBtb2RlLiANCisgICoNCisgICogICAgICAgICAgOS4gT3B0aW9uYWxseSwgeW91IGNhbiBlbmFibGUvY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyB3aXRob3V0DQorICAqICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIChpLmUgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIGFnYWluIFNQSV9Jbml0KCkgZnVuY3Rpb24pOg0KKyAgKiAgICAgICAgICAgICAgLSBXaGVuIGJpZGlyZWN0aW9uYWwgbW9kZSAoU1BJX0RpcmVjdGlvbl8xTGluZV9SeCBvciBTUElfRGlyZWN0aW9uXzFMaW5lX1R4KQ0KKyAgKiAgICAgICAgICAgICAgICBpcyBwcm9ncmFtbWVkIGFzIERhdGEgZGlyZWN0aW9uIHBhcmFtZXRlciB1c2luZyB0aGUgU1BJX0luaXQoKSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgICBpdCBjYW4gYmUgcG9zc2libGUgdG8gc3dpdGNoIGJldHdlZW4gU1BJX0RpcmVjdGlvbl9UeCBvciBTUElfRGlyZWN0aW9uX1J4DQorICAqICAgICAgICAgICAgICAgIHVzaW5nIHRoZSBTUElfQmlEaXJlY3Rpb25hbExpbmVDb25maWcoKSBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgIC0gV2hlbiBTUElfTlNTX1NvZnQgaXMgc2VsZWN0ZWQgYXMgU2xhdmUgU2VsZWN0IE1hbmFnZW1lbnQgcGFyYW1ldGVyIA0KKyAgKiAgICAgICAgICAgICAgICB1c2luZyB0aGUgU1BJX0luaXQoKSBmdW5jdGlvbiBpdCBjYW4gYmUgcG9zc2libGUgdG8gbWFuYWdlIHRoZSANCisgICogICAgICAgICAgICAgICAgTlNTIGludGVybmFsIHNpZ25hbCB1c2luZyB0aGUgU1BJX05TU0ludGVybmFsU29mdHdhcmVDb25maWcoKSBmdW5jdGlvbi4NCisgICogICAgICAgICAgICAgIC0gUmVjb25maWd1cmUgdGhlIGRhdGEgc2l6ZSB1c2luZyB0aGUgU1BJX0RhdGFTaXplQ29uZmlnKCkgZnVuY3Rpb24gIA0KKyAgKiAgICAgICAgICAgICAgLSBFbmFibGUgb3IgZGlzYWJsZSB0aGUgU1Mgb3V0cHV0IHVzaW5nIHRoZSBTUElfU1NPdXRwdXRDbWQoKSBmdW5jdGlvbiAgDQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICAxMC4gVG8gdXNlIHRoZSBDUkMgSGFyZHdhcmUgY2FsY3VsYXRpb24gZmVhdHVyZSByZWZlciB0byB0aGUgUGVyaXBoZXJhbCANCisgICogICAgICAgICAgICAgIENSQyBoYXJkd2FyZSBDYWxjdWxhdGlvbiBzdWJzZWN0aW9uLg0KKyAgKiAgIA0KKyAgKg0KKyAgKiBAbm90ZSAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBvbmx5IHRoZSBJMlMgY2xvY2sgc2NoZW1lIGF2YWlsYWJsZSBpbiBTaWxpY29uDQorICAqICAgICAgICAgIFJldmlzaW9uQiBhbmQgUmV2aXNpb25ZLg0KKyAgKiAgICAgDQorICAqIEBub3RlICAgIEluIEkyUyBtb2RlOiBpZiBhbiBleHRlcm5hbCBjbG9jayBpcyB1c2VkIGFzIHNvdXJjZSBjbG9jayBmb3IgdGhlIEkyUywgIA0KKyAgKiAgICAgICAgICB0aGVuIHRoZSBkZWZpbmUgSTJTX0VYVEVSTkFMX0NMT0NLX1ZBTCBpbiBmaWxlIHN0bTMyZjJ4eF9jb25mLmggc2hvdWxkIA0KKyAgKiAgICAgICAgICBiZSBlbmFibGVkIGFuZCBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBzb3VyY2UgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikuDQorICAqIA0KKyAgKiBAbm90ZSAgICBJbiBTUEkgbW9kZTogVG8gdXNlIHRoZSBTUEkgVEkgbW9kZSwgY2FsbCB0aGUgZnVuY3Rpb24gU1BJX1RJTW9kZUNtZCgpIA0KKyAgKiAgICAgICAgICBqdXN0IGFmdGVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIFNQSV9Jbml0KCkuDQorICAqDQorICAqICBAZW5kdmVyYmF0aW0gIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9zcGkuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSSANCisgICogQGJyaWVmIFNQSSBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8gDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIFNQSSByZWdpc3RlcnMgTWFza3MgKi8NCisjZGVmaW5lIENSMV9DTEVBUl9NQVNLICAgICAgICAgICAgKCh1aW50MTZfdCkweDMwNDApDQorI2RlZmluZSBJMlNDRkdSX0NMRUFSX01BU0sgICAgICAgICgodWludDE2X3QpMHhGMDQwKQ0KKw0KKy8qIFJDQyBQTExzIG1hc2tzICovDQorI2RlZmluZSBQTExDRkdSX1BQTFJfTUFTSyAgICAgICAgICgodWludDMyX3QpMHg3MDAwMDAwMCkNCisjZGVmaW5lIFBMTENGR1JfUFBMTl9NQVNLICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA3RkMwKQ0KKw0KKyNkZWZpbmUgU1BJX0NSMl9GUkYgICAgICAgICAgICAgICAoKHVpbnQxNl90KTB4MDAxMCkNCisjZGVmaW5lIFNQSV9TUl9USUZSRkUgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAxMDApDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9Qcml2YXRlX0Z1bmN0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBpbml0aWFsaXplIHRoZSBTUEkgRGlyZWN0aW9uLA0KKyAgU1BJIE1vZGUsIFNQSSBEYXRhIFNpemUsIFNQSSBQb2xhcml0eSwgU1BJIFBoYXNlLCBTUEkgTlNTIE1hbmFnZW1lbnQsIFNQSSBCYXVkDQorICBSYXRlIFByZXNjYWxlciwgU1BJIEZpcnN0IEJpdCBhbmQgU1BJIENSQyBQb2x5bm9taWFsLg0KKyAgDQorICBUaGUgU1BJX0luaXQoKSBmdW5jdGlvbiBmb2xsb3dzIHRoZSBTUEkgY29uZmlndXJhdGlvbiBwcm9jZWR1cmVzIGZvciBNYXN0ZXIgbW9kZQ0KKyAgYW5kIFNsYXZlIG1vZGUgKGRldGFpbHMgZm9yIHRoZXNlIHByb2NlZHVyZXMgYXJlIGF2YWlsYWJsZSBpbiByZWZlcmVuY2UgbWFudWFsDQorICAoUk0wMDMzKSkuDQorICANCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRGVpbml0aWFsaXplIHRoZSBTUEl4IHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIFNQSXg6IFRvIHNlbGVjdCB0aGUgU1BJeC9JMlN4IHBlcmlwaGVyYWwsIHdoZXJlIHggY2FuIGJlOiAxLCAyIG9yIDMgDQorICAqICAgICAgICAgaW4gU1BJIG1vZGUgb3IgMiBvciAzIGluIEkyUyBtb2RlLiAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTUElfSTJTX0RlSW5pdChTUElfVHlwZURlZiogU1BJeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisNCisgIGlmIChTUEl4ID09IFNQSTEpDQorICB7DQorICAgIC8qIEVuYWJsZSBTUEkxIHJlc2V0IHN0YXRlICovDQorICAgIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjJQZXJpcGhfU1BJMSwgRU5BQkxFKTsNCisgICAgLyogUmVsZWFzZSBTUEkxIGZyb20gcmVzZXQgc3RhdGUgKi8NCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9TUEkxLCBESVNBQkxFKTsNCisgIH0NCisgIGVsc2UgaWYgKFNQSXggPT0gU1BJMikNCisgIHsNCisgICAgLyogRW5hYmxlIFNQSTIgcmVzZXQgc3RhdGUgKi8NCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9TUEkyLCBFTkFCTEUpOw0KKyAgICAvKiBSZWxlYXNlIFNQSTIgZnJvbSByZXNldCBzdGF0ZSAqLw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1NQSTIsIERJU0FCTEUpOw0KKyAgICB9DQorICBlbHNlDQorICB7DQorICAgIGlmIChTUEl4ID09IFNQSTMpDQorICAgIHsNCisgICAgICAvKiBFbmFibGUgU1BJMyByZXNldCBzdGF0ZSAqLw0KKyAgICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfU1BJMywgRU5BQkxFKTsNCisgICAgICAvKiBSZWxlYXNlIFNQSTMgZnJvbSByZXNldCBzdGF0ZSAqLw0KKyAgICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfU1BJMywgRElTQUJMRSk7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFNQSXggcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCANCisgICogICAgICAgICBwYXJhbWV0ZXJzIGluIHRoZSBTUElfSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBTUEl4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBTUElfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIFNQSV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdA0KKyAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFNQSSBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTUElfSW5pdChTUElfVHlwZURlZiogU1BJeCwgU1BJX0luaXRUeXBlRGVmKiBTUElfSW5pdFN0cnVjdCkNCit7DQorICB1aW50MTZfdCB0bXByZWcgPSAwOw0KKyAgDQorICAvKiBjaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIFNQSSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0RJUkVDVElPTl9NT0RFKFNQSV9Jbml0U3RydWN0LT5TUElfRGlyZWN0aW9uKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX01PREUoU1BJX0luaXRTdHJ1Y3QtPlNQSV9Nb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0RBVEFTSVpFKFNQSV9Jbml0U3RydWN0LT5TUElfRGF0YVNpemUpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfQ1BPTChTUElfSW5pdFN0cnVjdC0+U1BJX0NQT0wpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfQ1BIQShTUElfSW5pdFN0cnVjdC0+U1BJX0NQSEEpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfTlNTKFNQSV9Jbml0U3RydWN0LT5TUElfTlNTKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0JBVURSQVRFX1BSRVNDQUxFUihTUElfSW5pdFN0cnVjdC0+U1BJX0JhdWRSYXRlUHJlc2NhbGVyKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0ZJUlNUX0JJVChTUElfSW5pdFN0cnVjdC0+U1BJX0ZpcnN0Qml0KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0NSQ19QT0xZTk9NSUFMKFNQSV9Jbml0U3RydWN0LT5TUElfQ1JDUG9seW5vbWlhbCkpOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IENSMSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBHZXQgdGhlIFNQSXggQ1IxIHZhbHVlICovDQorICB0bXByZWcgPSBTUEl4LT5DUjE7DQorICAvKiBDbGVhciBCSURJTW9kZSwgQklESU9FLCBSeE9OTFksIFNTTSwgU1NJLCBMU0JGaXJzdCwgQlIsIE1TVFIsIENQT0wgYW5kIENQSEEgYml0cyAqLw0KKyAgdG1wcmVnICY9IENSMV9DTEVBUl9NQVNLOw0KKyAgLyogQ29uZmlndXJlIFNQSXg6IGRpcmVjdGlvbiwgTlNTIG1hbmFnZW1lbnQsIGZpcnN0IHRyYW5zbWl0dGVkIGJpdCwgQmF1ZFJhdGUgcHJlc2NhbGVyDQorICAgICBtYXN0ZXIvc2FsdmUgbW9kZSwgQ1BPTCBhbmQgQ1BIQSAqLw0KKyAgLyogU2V0IEJJREltb2RlLCBCSURJT0UgYW5kIFJ4T05MWSBiaXRzIGFjY29yZGluZyB0byBTUElfRGlyZWN0aW9uIHZhbHVlICovDQorICAvKiBTZXQgU1NNLCBTU0kgYW5kIE1TVFIgYml0cyBhY2NvcmRpbmcgdG8gU1BJX01vZGUgYW5kIFNQSV9OU1MgdmFsdWVzICovDQorICAvKiBTZXQgTFNCRmlyc3QgYml0IGFjY29yZGluZyB0byBTUElfRmlyc3RCaXQgdmFsdWUgKi8NCisgIC8qIFNldCBCUiBiaXRzIGFjY29yZGluZyB0byBTUElfQmF1ZFJhdGVQcmVzY2FsZXIgdmFsdWUgKi8NCisgIC8qIFNldCBDUE9MIGJpdCBhY2NvcmRpbmcgdG8gU1BJX0NQT0wgdmFsdWUgKi8NCisgIC8qIFNldCBDUEhBIGJpdCBhY2NvcmRpbmcgdG8gU1BJX0NQSEEgdmFsdWUgKi8NCisgIHRtcHJlZyB8PSAodWludDE2X3QpKCh1aW50MzJfdClTUElfSW5pdFN0cnVjdC0+U1BJX0RpcmVjdGlvbiB8IFNQSV9Jbml0U3RydWN0LT5TUElfTW9kZSB8DQorICAgICAgICAgICAgICAgICAgU1BJX0luaXRTdHJ1Y3QtPlNQSV9EYXRhU2l6ZSB8IFNQSV9Jbml0U3RydWN0LT5TUElfQ1BPTCB8ICANCisgICAgICAgICAgICAgICAgICBTUElfSW5pdFN0cnVjdC0+U1BJX0NQSEEgfCBTUElfSW5pdFN0cnVjdC0+U1BJX05TUyB8ICANCisgICAgICAgICAgICAgICAgICBTUElfSW5pdFN0cnVjdC0+U1BJX0JhdWRSYXRlUHJlc2NhbGVyIHwgU1BJX0luaXRTdHJ1Y3QtPlNQSV9GaXJzdEJpdCk7DQorICAvKiBXcml0ZSB0byBTUEl4IENSMSAqLw0KKyAgU1BJeC0+Q1IxID0gdG1wcmVnOw0KKw0KKyAgLyogQWN0aXZhdGUgdGhlIFNQSSBtb2RlIChSZXNldCBJMlNNT0QgYml0IGluIEkyU0NGR1IgcmVnaXN0ZXIpICovDQorICBTUEl4LT5JMlNDRkdSICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClTUElfSTJTQ0ZHUl9JMlNNT0QpOw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IENSQ1BPTFkgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBXcml0ZSB0byBTUEl4IENSQ1BPTFkgKi8NCisgIFNQSXgtPkNSQ1BSID0gU1BJX0luaXRTdHJ1Y3QtPlNQSV9DUkNQb2x5bm9taWFsOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgU1BJeCBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIA0KKyAgKiAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIEkyU19Jbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIFNQSXg6IHdoZXJlIHggY2FuIGJlICAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbCAoY29uZmlndXJlZCBpbiBJMlMgbW9kZSkuDQorICAqIEBwYXJhbSAgSTJTX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYW4gSTJTX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0DQorICAqICAgICAgICAgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgU1BJIHBlcmlwaGVyYWwNCisgICogICAgICAgICBjb25maWd1cmVkIGluIEkyUyBtb2RlLg0KKyAgKiAgICAgICAgICAgDQorICAqIEBub3RlICAgVGhlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG9wdGltYWwgcHJlc2NhbGVyIG5lZWRlZCB0byBvYnRhaW4gdGhlIG1vc3QgDQorICAqICAgICAgICAgYWNjdXJhdGUgYXVkaW8gZnJlcXVlbmN5IChkZXBlbmRpbmcgb24gdGhlIEkyUyBjbG9jayBzb3VyY2UsIHRoZSBQTEwgdmFsdWVzIA0KKyAgKiAgICAgICAgIGFuZCB0aGUgcHJvZHVjdCBjb25maWd1cmF0aW9uKS4gQnV0IGluIGNhc2UgdGhlIHByZXNjYWxlciB2YWx1ZSBpcyBncmVhdGVyIA0KKyAgKiAgICAgICAgIHRoYW4gNTExLCB0aGUgZGVmYXVsdCB2YWx1ZSAoMHgwMikgd2lsbCBiZSBjb25maWd1cmVkIGluc3RlYWQuICAgIA0KKyAgKiANCisgICogQG5vdGUgICBpZiBhbiBleHRlcm5hbCBjbG9jayBpcyB1c2VkIGFzIHNvdXJjZSBjbG9jayBmb3IgdGhlIEkyUywgdGhlbiB0aGUgZGVmaW5lDQorICAqICAgICAgICAgSTJTX0VYVEVSTkFMX0NMT0NLX1ZBTCBpbiBmaWxlIHN0bTMyZjJ4eF9jb25mLmggc2hvdWxkIGJlIGVuYWJsZWQgYW5kIHNldA0KKyAgKiAgICAgICAgIHRvIHRoZSB2YWx1ZSBvZiB0aGUgdGhlIHNvdXJjZSBjbG9jayBmcmVxdWVuY3kgKGluIEh6KS4NCisgICogIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBJMlNfSW5pdChTUElfVHlwZURlZiogU1BJeCwgSTJTX0luaXRUeXBlRGVmKiBJMlNfSW5pdFN0cnVjdCkNCit7DQorICB1aW50MTZfdCB0bXByZWcgPSAwLCBpMnNkaXYgPSAyLCBpMnNvZGQgPSAwLCBwYWNrZXRsZW5ndGggPSAxOw0KKyAgdWludDMyX3QgdG1wID0gMCwgaTJzY2xrID0gMDsNCisjaWZuZGVmIEkyU19FWFRFUk5BTF9DTE9DS19WQUwNCisgIHVpbnQzMl90IHBsbG0gPSAwLCBwbGxuID0gMCwgcGxsciA9IDA7DQorI2VuZGlmIC8qIEkyU19FWFRFUk5BTF9DTE9DS19WQUwgKi8NCisgIA0KKyAgLyogQ2hlY2sgdGhlIEkyUyBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJXzIzX1BFUklQSChTUEl4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJTX01PREUoSTJTX0luaXRTdHJ1Y3QtPkkyU19Nb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJTX1NUQU5EQVJEKEkyU19Jbml0U3RydWN0LT5JMlNfU3RhbmRhcmQpKTsNCisgIGFzc2VydF9wYXJhbShJU19JMlNfREFUQV9GT1JNQVQoSTJTX0luaXRTdHJ1Y3QtPkkyU19EYXRhRm9ybWF0KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJTX01DTEtfT1VUUFVUKEkyU19Jbml0U3RydWN0LT5JMlNfTUNMS091dHB1dCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0kyU19BVURJT19GUkVRKEkyU19Jbml0U3RydWN0LT5JMlNfQXVkaW9GcmVxKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfSTJTX0NQT0woSTJTX0luaXRTdHJ1Y3QtPkkyU19DUE9MKSk7ICANCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQSXggSTJTQ0ZHUiAmIEkyU1BSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgLyogQ2xlYXIgSTJTTU9ELCBJMlNFLCBJMlNDRkcsIFBDTVNZTkMsIEkyU1NURCwgQ0tQT0wsIERBVExFTiBhbmQgQ0hMRU4gYml0cyAqLw0KKyAgU1BJeC0+STJTQ0ZHUiAmPSBJMlNDRkdSX0NMRUFSX01BU0s7IA0KKyAgU1BJeC0+STJTUFIgPSAweDAwMDI7DQorICANCisgIC8qIEdldCB0aGUgSTJTQ0ZHUiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wcmVnID0gU1BJeC0+STJTQ0ZHUjsNCisgIA0KKyAgLyogSWYgdGhlIGRlZmF1bHQgdmFsdWUgaGFzIHRvIGJlIHdyaXR0ZW4sIHJlaW5pdGlhbGl6ZSBpMnNkaXYgYW5kIGkyc29kZCovDQorICBpZihJMlNfSW5pdFN0cnVjdC0+STJTX0F1ZGlvRnJlcSA9PSBJMlNfQXVkaW9GcmVxX0RlZmF1bHQpDQorICB7DQorICAgIGkyc29kZCA9ICh1aW50MTZfdCkwOw0KKyAgICBpMnNkaXYgPSAodWludDE2X3QpMjsgICANCisgIH0NCisgIC8qIElmIHRoZSByZXF1ZXN0ZWQgYXVkaW8gZnJlcXVlbmN5IGlzIG5vdCB0aGUgZGVmYXVsdCwgY29tcHV0ZSB0aGUgcHJlc2NhbGVyICovDQorICBlbHNlDQorICB7DQorICAgIC8qIENoZWNrIHRoZSBmcmFtZSBsZW5ndGggKEZvciB0aGUgUHJlc2NhbGVyIGNvbXB1dGluZykgKioqKioqKioqKioqKioqKioqKi8NCisgICAgaWYoSTJTX0luaXRTdHJ1Y3QtPkkyU19EYXRhRm9ybWF0ID09IEkyU19EYXRhRm9ybWF0XzE2YikNCisgICAgew0KKyAgICAgIC8qIFBhY2tldCBsZW5ndGggaXMgMTYgYml0cyAqLw0KKyAgICAgIHBhY2tldGxlbmd0aCA9IDE7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgLyogUGFja2V0IGxlbmd0aCBpcyAzMiBiaXRzICovDQorICAgICAgcGFja2V0bGVuZ3RoID0gMjsNCisgICAgfQ0KKw0KKyAgICAvKiBHZXQgSTJTIHNvdXJjZSBDbG9jayBmcmVxdWVuY3kgKG9ubHkgaW4gU2lsaWNvbiBSZXZpc2lvbkIgYW5kIFJldmlzaW9uWSkgKi8NCisgICAgICANCisgICAgLyogSWYgYW4gZXh0ZXJuYWwgSTJTIGNsb2NrIGhhcyB0byBiZSB1c2VkLCB0aGlzIGRlZmluZSBzaG91bGQgYmUgc2V0ICANCisgICAgICAgaW4gdGhlIHByb2plY3QgY29uZmlndXJhdGlvbiBvciBpbiB0aGUgc3RtMzJmMnh4X2NvbmYuaCBmaWxlICovDQorICAjaWZkZWYgSTJTX0VYVEVSTkFMX0NMT0NLX1ZBTCAgICAgDQorICAgIC8qIFNldCBleHRlcm5hbCBjbG9jayBhcyBJMlMgY2xvY2sgc291cmNlICovDQorICAgIGlmICgoUkNDLT5DRkdSICYgUkNDX0NGR1JfSTJTU1JDKSA9PSAwKQ0KKyAgICB7DQorICAgICAgUkNDLT5DRkdSIHw9ICh1aW50MzJfdClSQ0NfQ0ZHUl9JMlNTUkM7DQorICAgIH0NCisgICAgDQorICAgIC8qIFNldCB0aGUgSTJTIGNsb2NrIHRvIHRoZSBleHRlcm5hbCBjbG9jayAgdmFsdWUgKi8NCisgICAgaTJzY2xrID0gSTJTX0VYVEVSTkFMX0NMT0NLX1ZBTDsNCisNCisgICNlbHNlIC8qIFRoZXJlIGlzIG5vIGRlZmluZSBmb3IgRXh0ZXJuYWwgSTJTIGNsb2NrIHNvdXJjZSAqLw0KKyAgICAvKiBTZXQgUExMSTJTIGFzIEkyUyBjbG9jayBzb3VyY2UgKi8NCisgICAgaWYgKChSQ0MtPkNGR1IgJiBSQ0NfQ0ZHUl9JMlNTUkMpICE9IDApDQorICAgIHsNCisgICAgICBSQ0MtPkNGR1IgJj0gfih1aW50MzJfdClSQ0NfQ0ZHUl9JMlNTUkM7DQorICAgIH0gICAgDQorICAgIA0KKyAgICAvKiBHZXQgdGhlIFBMTEkyU04gdmFsdWUgKi8NCisgICAgcGxsbiA9ICh1aW50MzJfdCkoKChSQ0MtPlBMTEkyU0NGR1IgJiBSQ0NfUExMSTJTQ0ZHUl9QTExJMlNOKSA+PiA2KSAmIFwNCisgICAgICAgICAgICAgICAgICAgICAgKFJDQ19QTExJMlNDRkdSX1BMTEkyU04gPj4gNikpOw0KKyAgICANCisgICAgLyogR2V0IHRoZSBQTExJMlNSIHZhbHVlICovDQorICAgIHBsbHIgPSAodWludDMyX3QpKCgoUkNDLT5QTExJMlNDRkdSICYgUkNDX1BMTEkyU0NGR1JfUExMSTJTUikgPj4gMjgpICYgXA0KKyAgICAgICAgICAgICAgICAgICAgICAoUkNDX1BMTEkyU0NGR1JfUExMSTJTUiA+PiAyOCkpOw0KKyAgICANCisgICAgLyogR2V0IHRoZSBQTExNIHZhbHVlICovDQorICAgIHBsbG0gPSAodWludDMyX3QpKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTE0pOyAgICAgIA0KKyAgICANCisgICAgLyogR2V0IHRoZSBJMlMgc291cmNlIGNsb2NrIHZhbHVlICovDQorICAgIGkyc2NsayA9ICh1aW50MzJfdCkoKChIU0VfVkFMVUUgLyBwbGxtKSAqIHBsbG4pIC8gcGxscik7DQorICAjZW5kaWYgLyogSTJTX0VYVEVSTkFMX0NMT0NLX1ZBTCAqLw0KKyAgICANCisgICAgLyogQ29tcHV0ZSB0aGUgUmVhbCBkaXZpZGVyIGRlcGVuZGluZyBvbiB0aGUgTUNMSyBvdXRwdXQgc3RhdGUsIHdpdGggYSBmbG9hdGluZyBwb2ludCAqLw0KKyAgICBpZihJMlNfSW5pdFN0cnVjdC0+STJTX01DTEtPdXRwdXQgPT0gSTJTX01DTEtPdXRwdXRfRW5hYmxlKQ0KKyAgICB7DQorICAgICAgLyogTUNMSyBvdXRwdXQgaXMgZW5hYmxlZCAqLw0KKyAgICAgIHRtcCA9ICh1aW50MTZfdCkoKCgoKGkyc2NsayAvIDI1NikgKiAxMCkgLyBJMlNfSW5pdFN0cnVjdC0+STJTX0F1ZGlvRnJlcSkpICsgNSk7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgLyogTUNMSyBvdXRwdXQgaXMgZGlzYWJsZWQgKi8NCisgICAgICB0bXAgPSAodWludDE2X3QpKCgoKChpMnNjbGsgLyAoMzIgKiBwYWNrZXRsZW5ndGgpKSAqMTAgKSAvIEkyU19Jbml0U3RydWN0LT5JMlNfQXVkaW9GcmVxKSkgKyA1KTsNCisgICAgfQ0KKyAgICANCisgICAgLyogUmVtb3ZlIHRoZSBmbGF0dGluZyBwb2ludCAqLw0KKyAgICB0bXAgPSB0bXAgLyAxMDsgIA0KKyAgICAgIA0KKyAgICAvKiBDaGVjayB0aGUgcGFyaXR5IG9mIHRoZSBkaXZpZGVyICovDQorICAgIGkyc29kZCA9ICh1aW50MTZfdCkodG1wICYgKHVpbnQxNl90KTB4MDAwMSk7DQorICAgDQorICAgIC8qIENvbXB1dGUgdGhlIGkyc2RpdiBwcmVzY2FsZXIgKi8NCisgICAgaTJzZGl2ID0gKHVpbnQxNl90KSgodG1wIC0gaTJzb2RkKSAvIDIpOw0KKyAgIA0KKyAgICAvKiBHZXQgdGhlIE1hc2sgZm9yIHRoZSBPZGQgYml0IChTUElfSTJTUFJbOF0pIHJlZ2lzdGVyICovDQorICAgIGkyc29kZCA9ICh1aW50MTZfdCkgKGkyc29kZCA8PCA4KTsNCisgIH0NCisNCisgIC8qIFRlc3QgaWYgdGhlIGRpdmlkZXIgaXMgMSBvciAwIG9yIGdyZWF0ZXIgdGhhbiAweEZGICovDQorICBpZiAoKGkyc2RpdiA8IDIpIHx8IChpMnNkaXYgPiAweEZGKSkNCisgIHsNCisgICAgLyogU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyAqLw0KKyAgICBpMnNkaXYgPSAyOw0KKyAgICBpMnNvZGQgPSAwOw0KKyAgfQ0KKw0KKyAgLyogV3JpdGUgdG8gU1BJeCBJMlNQUiByZWdpc3RlciB0aGUgY29tcHV0ZWQgdmFsdWUgKi8NCisgIFNQSXgtPkkyU1BSID0gKHVpbnQxNl90KSgodWludDE2X3QpaTJzZGl2IHwgKHVpbnQxNl90KShpMnNvZGQgfCAodWludDE2X3QpSTJTX0luaXRTdHJ1Y3QtPkkyU19NQ0xLT3V0cHV0KSk7DQorIA0KKyAgLyogQ29uZmlndXJlIHRoZSBJMlMgd2l0aCB0aGUgU1BJX0luaXRTdHJ1Y3QgdmFsdWVzICovDQorICB0bXByZWcgfD0gKHVpbnQxNl90KSgodWludDE2X3QpU1BJX0kyU0NGR1JfSTJTTU9EIHwgKHVpbnQxNl90KShJMlNfSW5pdFN0cnVjdC0+STJTX01vZGUgfCBcDQorICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KShJMlNfSW5pdFN0cnVjdC0+STJTX1N0YW5kYXJkIHwgKHVpbnQxNl90KShJMlNfSW5pdFN0cnVjdC0+STJTX0RhdGFGb3JtYXQgfCBcDQorICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KUkyU19Jbml0U3RydWN0LT5JMlNfQ1BPTCkpKSk7DQorIA0KKyAgLyogV3JpdGUgdG8gU1BJeCBJMlNDRkdSICovICANCisgIFNQSXgtPkkyU0NGR1IgPSB0bXByZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggU1BJX0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgU1BJX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBTUElfSW5pdFR5cGVEZWYgc3RydWN0dXJlIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9TdHJ1Y3RJbml0KFNQSV9Jbml0VHlwZURlZiogU1BJX0luaXRTdHJ1Y3QpDQorew0KKy8qLS0tLS0tLS0tLS0tLS0tIFJlc2V0IFNQSSBpbml0IHN0cnVjdHVyZSBwYXJhbWV0ZXJzIHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBJbml0aWFsaXplIHRoZSBTUElfRGlyZWN0aW9uIG1lbWJlciAqLw0KKyAgU1BJX0luaXRTdHJ1Y3QtPlNQSV9EaXJlY3Rpb24gPSBTUElfRGlyZWN0aW9uXzJMaW5lc19GdWxsRHVwbGV4Ow0KKyAgLyogaW5pdGlhbGl6ZSB0aGUgU1BJX01vZGUgbWVtYmVyICovDQorICBTUElfSW5pdFN0cnVjdC0+U1BJX01vZGUgPSBTUElfTW9kZV9TbGF2ZTsNCisgIC8qIGluaXRpYWxpemUgdGhlIFNQSV9EYXRhU2l6ZSBtZW1iZXIgKi8NCisgIFNQSV9Jbml0U3RydWN0LT5TUElfRGF0YVNpemUgPSBTUElfRGF0YVNpemVfOGI7DQorICAvKiBJbml0aWFsaXplIHRoZSBTUElfQ1BPTCBtZW1iZXIgKi8NCisgIFNQSV9Jbml0U3RydWN0LT5TUElfQ1BPTCA9IFNQSV9DUE9MX0xvdzsNCisgIC8qIEluaXRpYWxpemUgdGhlIFNQSV9DUEhBIG1lbWJlciAqLw0KKyAgU1BJX0luaXRTdHJ1Y3QtPlNQSV9DUEhBID0gU1BJX0NQSEFfMUVkZ2U7DQorICAvKiBJbml0aWFsaXplIHRoZSBTUElfTlNTIG1lbWJlciAqLw0KKyAgU1BJX0luaXRTdHJ1Y3QtPlNQSV9OU1MgPSBTUElfTlNTX0hhcmQ7DQorICAvKiBJbml0aWFsaXplIHRoZSBTUElfQmF1ZFJhdGVQcmVzY2FsZXIgbWVtYmVyICovDQorICBTUElfSW5pdFN0cnVjdC0+U1BJX0JhdWRSYXRlUHJlc2NhbGVyID0gU1BJX0JhdWRSYXRlUHJlc2NhbGVyXzI7DQorICAvKiBJbml0aWFsaXplIHRoZSBTUElfRmlyc3RCaXQgbWVtYmVyICovDQorICBTUElfSW5pdFN0cnVjdC0+U1BJX0ZpcnN0Qml0ID0gU1BJX0ZpcnN0Qml0X01TQjsNCisgIC8qIEluaXRpYWxpemUgdGhlIFNQSV9DUkNQb2x5bm9taWFsIG1lbWJlciAqLw0KKyAgU1BJX0luaXRTdHJ1Y3QtPlNQSV9DUkNQb2x5bm9taWFsID0gNzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRmlsbHMgZWFjaCBJMlNfSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBJMlNfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIEkyU19Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgSTJTX1N0cnVjdEluaXQoSTJTX0luaXRUeXBlRGVmKiBJMlNfSW5pdFN0cnVjdCkNCit7DQorLyotLS0tLS0tLS0tLS0tLS0gUmVzZXQgSTJTIGluaXQgc3RydWN0dXJlIHBhcmFtZXRlcnMgdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIC8qIEluaXRpYWxpemUgdGhlIEkyU19Nb2RlIG1lbWJlciAqLw0KKyAgSTJTX0luaXRTdHJ1Y3QtPkkyU19Nb2RlID0gSTJTX01vZGVfU2xhdmVUeDsNCisgIA0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgSTJTX1N0YW5kYXJkIG1lbWJlciAqLw0KKyAgSTJTX0luaXRTdHJ1Y3QtPkkyU19TdGFuZGFyZCA9IEkyU19TdGFuZGFyZF9QaGlsbGlwczsNCisgIA0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgSTJTX0RhdGFGb3JtYXQgbWVtYmVyICovDQorICBJMlNfSW5pdFN0cnVjdC0+STJTX0RhdGFGb3JtYXQgPSBJMlNfRGF0YUZvcm1hdF8xNmI7DQorICANCisgIC8qIEluaXRpYWxpemUgdGhlIEkyU19NQ0xLT3V0cHV0IG1lbWJlciAqLw0KKyAgSTJTX0luaXRTdHJ1Y3QtPkkyU19NQ0xLT3V0cHV0ID0gSTJTX01DTEtPdXRwdXRfRGlzYWJsZTsNCisgIA0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgSTJTX0F1ZGlvRnJlcSBtZW1iZXIgKi8NCisgIEkyU19Jbml0U3RydWN0LT5JMlNfQXVkaW9GcmVxID0gSTJTX0F1ZGlvRnJlcV9EZWZhdWx0Ow0KKyAgDQorICAvKiBJbml0aWFsaXplIHRoZSBJMlNfQ1BPTCBtZW1iZXIgKi8NCisgIEkyU19Jbml0U3RydWN0LT5JMlNfQ1BPTCA9IEkyU19DUE9MX0xvdzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIFNQSSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFNQSXg6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIFNQSSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFNQSXggcGVyaXBoZXJhbC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9DbWQoU1BJX1R5cGVEZWYqIFNQSXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBTUEkgcGVyaXBoZXJhbCAqLw0KKyAgICBTUEl4LT5DUjEgfD0gU1BJX0NSMV9TUEU7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIFNQSSBwZXJpcGhlcmFsICovDQorICAgIFNQSXgtPkNSMSAmPSAodWludDE2X3QpfigodWludDE2X3QpU1BJX0NSMV9TUEUpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgU1BJIHBlcmlwaGVyYWwgKGluIEkyUyBtb2RlKS4NCisgICogQHBhcmFtICBTUEl4OiB3aGVyZSB4IGNhbiBiZSAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBTUEl4IHBlcmlwaGVyYWwuIA0KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIEkyU19DbWQoU1BJX1R5cGVEZWYqIFNQSXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV8yM19QRVJJUEgoU1BJeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgU1BJIHBlcmlwaGVyYWwgKGluIEkyUyBtb2RlKSAqLw0KKyAgICBTUEl4LT5JMlNDRkdSIHw9IFNQSV9JMlNDRkdSX0kyU0U7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIFNQSSBwZXJpcGhlcmFsIGluIEkyUyBtb2RlICovDQorICAgIFNQSXgtPkkyU0NGR1IgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KVNQSV9JMlNDRkdSX0kyU0UpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBkYXRhIHNpemUgZm9yIHRoZSBzZWxlY3RlZCBTUEkuDQorICAqIEBwYXJhbSAgU1BJeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgU1BJIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgU1BJX0RhdGFTaXplOiBzcGVjaWZpZXMgdGhlIFNQSSBkYXRhIHNpemUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBTUElfRGF0YVNpemVfMTZiOiBTZXQgZGF0YSBmcmFtZSBmb3JtYXQgdG8gMTZiaXQNCisgICogICAgICAgICAgICBAYXJnIFNQSV9EYXRhU2l6ZV84YjogU2V0IGRhdGEgZnJhbWUgZm9ybWF0IHRvIDhiaXQNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU1BJX0RhdGFTaXplQ29uZmlnKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50MTZfdCBTUElfRGF0YVNpemUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19TUElfQUxMX1BFUklQSChTUEl4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0RBVEFTSVpFKFNQSV9EYXRhU2l6ZSkpOw0KKyAgLyogQ2xlYXIgREZGIGJpdCAqLw0KKyAgU1BJeC0+Q1IxICY9ICh1aW50MTZfdCl+U1BJX0RhdGFTaXplXzE2YjsNCisgIC8qIFNldCBuZXcgREZGIGJpdCB2YWx1ZSAqLw0KKyAgU1BJeC0+Q1IxIHw9IFNQSV9EYXRhU2l6ZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gaW4gYmlkaXJlY3Rpb25hbCBtb2RlIGZvciB0aGUgc3BlY2lmaWVkIFNQSS4NCisgICogQHBhcmFtICBTUEl4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBTUElfRGlyZWN0aW9uOiBzcGVjaWZpZXMgdGhlIGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGluIGJpZGlyZWN0aW9uYWwgbW9kZS4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBTUElfRGlyZWN0aW9uX1R4OiBTZWxlY3RzIFR4IHRyYW5zbWlzc2lvbiBkaXJlY3Rpb24NCisgICogICAgICAgICAgICBAYXJnIFNQSV9EaXJlY3Rpb25fUng6IFNlbGVjdHMgUnggcmVjZWl2ZSBkaXJlY3Rpb24NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU1BJX0JpRGlyZWN0aW9uYWxMaW5lQ29uZmlnKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50MTZfdCBTUElfRGlyZWN0aW9uKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9ESVJFQ1RJT04oU1BJX0RpcmVjdGlvbikpOw0KKyAgaWYgKFNQSV9EaXJlY3Rpb24gPT0gU1BJX0RpcmVjdGlvbl9UeCkNCisgIHsNCisgICAgLyogU2V0IHRoZSBUeCBvbmx5IG1vZGUgKi8NCisgICAgU1BJeC0+Q1IxIHw9IFNQSV9EaXJlY3Rpb25fVHg7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFNldCB0aGUgUnggb25seSBtb2RlICovDQorICAgIFNQSXgtPkNSMSAmPSBTUElfRGlyZWN0aW9uX1J4Ow0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIGludGVybmFsbHkgYnkgc29mdHdhcmUgdGhlIE5TUyBwaW4gZm9yIHRoZSBzZWxlY3RlZCBTUEkuDQorICAqIEBwYXJhbSAgU1BJeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgU1BJIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgU1BJX05TU0ludGVybmFsU29mdDogc3BlY2lmaWVzIHRoZSBTUEkgTlNTIGludGVybmFsIHN0YXRlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX05TU0ludGVybmFsU29mdF9TZXQ6IFNldCBOU1MgcGluIGludGVybmFsbHkNCisgICogICAgICAgICAgICBAYXJnIFNQSV9OU1NJbnRlcm5hbFNvZnRfUmVzZXQ6IFJlc2V0IE5TUyBwaW4gaW50ZXJuYWxseQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTUElfTlNTSW50ZXJuYWxTb2Z0d2FyZUNvbmZpZyhTUElfVHlwZURlZiogU1BJeCwgdWludDE2X3QgU1BJX05TU0ludGVybmFsU29mdCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfTlNTX0lOVEVSTkFMKFNQSV9OU1NJbnRlcm5hbFNvZnQpKTsNCisgIGlmIChTUElfTlNTSW50ZXJuYWxTb2Z0ICE9IFNQSV9OU1NJbnRlcm5hbFNvZnRfUmVzZXQpDQorICB7DQorICAgIC8qIFNldCBOU1MgcGluIGludGVybmFsbHkgYnkgc29mdHdhcmUgKi8NCisgICAgU1BJeC0+Q1IxIHw9IFNQSV9OU1NJbnRlcm5hbFNvZnRfU2V0Ow0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBSZXNldCBOU1MgcGluIGludGVybmFsbHkgYnkgc29mdHdhcmUgKi8NCisgICAgU1BJeC0+Q1IxICY9IFNQSV9OU1NJbnRlcm5hbFNvZnRfUmVzZXQ7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFNTIG91dHB1dCBmb3IgdGhlIHNlbGVjdGVkIFNQSS4NCisgICogQHBhcmFtICBTUEl4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBTUEl4IFNTIG91dHB1dC4gDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9TU091dHB1dENtZChTUElfVHlwZURlZiogU1BJeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIFNQSSBTUyBvdXRwdXQgKi8NCisgICAgU1BJeC0+Q1IyIHw9ICh1aW50MTZfdClTUElfQ1IyX1NTT0U7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIFNQSSBTUyBvdXRwdXQgKi8NCisgICAgU1BJeC0+Q1IyICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClTUElfQ1IyX1NTT0UpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBTUEl4L0kyU3ggRE1BIGludGVyZmFjZS4NCisgICogICANCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgb25seSBhZnRlciB0aGUgU1BJX0luaXQoKSBmdW5jdGlvbiBoYXMgDQorICAqICAgICAgICAgYmVlbiBjYWxsZWQuIA0KKyAgKiBAbm90ZSAgIFdoZW4gVEkgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGNvbnRyb2wgYml0cyBTU00sIFNTSSwgQ1BPTCBhbmQgQ1BIQSANCisgICogICAgICAgICBhcmUgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBhbmQgYXJlIGNvbmZpZ3VyZWQgYnkgaGFyZHdhcmUNCisgICogICAgICAgICByZXNwZWN0aXZlbHkgdG8gdGhlIFRJIG1vZGUgcmVxdWlyZW1lbnRzLiAgDQorICAqIA0KKyAgKiBAcGFyYW0gIFNQSXg6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyANCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBTUEkgVEkgY29tbXVuaWNhdGlvbiBtb2RlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTUElfVElNb2RlQ21kKFNQSV9UeXBlRGVmKiBTUEl4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19TUElfQUxMX1BFUklQSChTUEl4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgVEkgbW9kZSBmb3IgdGhlIHNlbGVjdGVkIFNQSSBwZXJpcGhlcmFsICovDQorICAgIFNQSXgtPkNSMiB8PSBTUElfQ1IyX0ZSRjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgVEkgbW9kZSBmb3IgdGhlIHNlbGVjdGVkIFNQSSBwZXJpcGhlcmFsICovDQorICAgIFNQSXgtPkNSMiAmPSAodWludDE2X3QpflNQSV9DUjJfRlJGOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBTUElfR3JvdXAyIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBTUEkgZGF0YSB0cmFuc2ZlcnMNCisgIA0KKyAgSW4gcmVjZXB0aW9uLCBkYXRhIGFyZSByZWNlaXZlZCBhbmQgdGhlbiBzdG9yZWQgaW50byBhbiBpbnRlcm5hbCBSeCBidWZmZXIgd2hpbGUgDQorICBJbiB0cmFuc21pc3Npb24sIGRhdGEgYXJlIGZpcnN0IHN0b3JlZCBpbnRvIGFuIGludGVybmFsIFR4IGJ1ZmZlciBiZWZvcmUgYmVpbmcgDQorICB0cmFuc21pdHRlZC4NCisNCisgIFRoZSByZWFkIGFjY2VzcyBvZiB0aGUgU1BJX0RSIHJlZ2lzdGVyIGNhbiBiZSBkb25lIHVzaW5nIHRoZSBTUElfSTJTX1JlY2VpdmVEYXRhKCkNCisgIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBSeCBidWZmZXJlZCB2YWx1ZS4gV2hlcmVhcyBhIHdyaXRlIGFjY2VzcyB0byB0aGUgU1BJX0RSIA0KKyAgY2FuIGJlIGRvbmUgdXNpbmcgU1BJX0kyU19TZW5kRGF0YSgpIGZ1bmN0aW9uIGFuZCBzdG9yZXMgdGhlIHdyaXR0ZW4gZGF0YSBpbnRvIA0KKyAgVHggYnVmZmVyLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudCByZWNlaXZlZCBkYXRhIGJ5IHRoZSBTUEl4L0kyU3ggcGVyaXBoZXJhbC4gDQorICAqIEBwYXJhbSAgU1BJeDogVG8gc2VsZWN0IHRoZSBTUEl4L0kyU3ggcGVyaXBoZXJhbCwgd2hlcmUgeCBjYW4gYmU6IDEsIDIgb3IgMyANCisgICogICAgICAgICBpbiBTUEkgbW9kZSBvciAyIG9yIDMgaW4gSTJTIG1vZGUuIA0KKyAgKiBAcmV0dmFsIFRoZSB2YWx1ZSBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4NCisgICovDQordWludDE2X3QgU1BJX0kyU19SZWNlaXZlRGF0YShTUElfVHlwZURlZiogU1BJeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIA0KKyAgLyogUmV0dXJuIHRoZSBkYXRhIGluIHRoZSBEUiByZWdpc3RlciAqLw0KKyAgcmV0dXJuIFNQSXgtPkRSOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBUcmFuc21pdHMgYSBEYXRhIHRocm91Z2ggdGhlIFNQSXgvSTJTeCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFNQSXg6IFRvIHNlbGVjdCB0aGUgU1BJeC9JMlN4IHBlcmlwaGVyYWwsIHdoZXJlIHggY2FuIGJlOiAxLCAyIG9yIDMgDQorICAqICAgICAgICAgaW4gU1BJIG1vZGUgb3IgMiBvciAzIGluIEkyUyBtb2RlLiAgICAgDQorICAqIEBwYXJhbSAgRGF0YTogRGF0YSB0byBiZSB0cmFuc21pdHRlZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU1BJX0kyU19TZW5kRGF0YShTUElfVHlwZURlZiogU1BJeCwgdWludDE2X3QgRGF0YSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIA0KKyAgLyogV3JpdGUgaW4gdGhlIERSIHJlZ2lzdGVyIHRoZSBkYXRhIHRvIGJlIHNlbnQgKi8NCisgIFNQSXgtPkRSID0gRGF0YTsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1BJX0dyb3VwMyBIYXJkd2FyZSBDUkMgQ2FsY3VsYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIEhhcmR3YXJlIENSQyBDYWxjdWxhdGlvbiBmdW5jdGlvbnMNCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgIEhhcmR3YXJlIENSQyBDYWxjdWxhdGlvbiBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIG1hbmFnZSB0aGUgU1BJIENSQyBoYXJkd2FyZSANCisgIGNhbGN1bGF0aW9uDQorDQorICBTUEkgY29tbXVuaWNhdGlvbiB1c2luZyBDUkMgaXMgcG9zc2libGUgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHByb2NlZHVyZToNCisgICAgIDEuIFByb2dyYW0gdGhlIERhdGEgZGlyZWN0aW9uLCBQb2xhcml0eSwgUGhhc2UsIEZpcnN0IERhdGEsIEJhdWQgUmF0ZSBQcmVzY2FsZXIsIA0KKyAgICAgICAgU2xhdmUgTWFuYWdlbWVudCwgUGVyaXBoZXJhbCBNb2RlIGFuZCBDUkMgUG9seW5vbWlhbCB2YWx1ZXMgdXNpbmcgdGhlIFNQSV9Jbml0KCkNCisgICAgICAgIGZ1bmN0aW9uLg0KKyAgICAgMi4gRW5hYmxlIHRoZSBDUkMgY2FsY3VsYXRpb24gdXNpbmcgdGhlIFNQSV9DYWxjdWxhdGVDUkMoKSBmdW5jdGlvbi4NCisgICAgIDMuIEVuYWJsZSB0aGUgU1BJIHVzaW5nIHRoZSBTUElfQ21kKCkgZnVuY3Rpb24NCisgICAgIDQuIEJlZm9yZSB3cml0aW5nIHRoZSBsYXN0IGRhdGEgdG8gdGhlIFRYIGJ1ZmZlciwgc2V0IHRoZSBDUkNOZXh0IGJpdCB1c2luZyB0aGUgDQorICAgICAgU1BJX1RyYW5zbWl0Q1JDKCkgZnVuY3Rpb24gdG8gaW5kaWNhdGUgdGhhdCBhZnRlciB0cmFuc21pc3Npb24gb2YgdGhlIGxhc3QgDQorICAgICAgZGF0YSwgdGhlIENSQyBzaG91bGQgYmUgdHJhbnNtaXR0ZWQuDQorICAgICA1LiBBZnRlciB0cmFuc21pdHRpbmcgdGhlIGxhc3QgZGF0YSwgdGhlIFNQSSB0cmFuc21pdHMgdGhlIENSQy4gVGhlIFNQSV9DUjFfQ1JDTkVYVA0KKyAgICAgICAgYml0IGlzIHJlc2V0LiBUaGUgQ1JDIGlzIGFsc28gcmVjZWl2ZWQgYW5kIGNvbXBhcmVkIGFnYWluc3QgdGhlIFNQSV9SWENSQ1IgDQorICAgICAgICB2YWx1ZS4gDQorICAgICAgICBJZiB0aGUgdmFsdWUgZG9lcyBub3QgbWF0Y2gsIHRoZSBTUElfRkxBR19DUkNFUlIgZmxhZyBpcyBzZXQgYW5kIGFuIGludGVycnVwdA0KKyAgICAgICAgY2FuIGJlIGdlbmVyYXRlZCB3aGVuIHRoZSBTUElfSTJTX0lUX0VSUiBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4NCisNCitAbm90ZSBJdCBpcyBhZHZpc2VkIG5vdCB0byByZWFkIHRoZSBjYWxjdWxhdGVkIENSQyB2YWx1ZXMgZHVyaW5nIHRoZSBjb21tdW5pY2F0aW9uLg0KKw0KK0Bub3RlIFdoZW4gdGhlIFNQSSBpcyBpbiBzbGF2ZSBtb2RlLCBiZSBjYXJlZnVsIHRvIGVuYWJsZSBDUkMgY2FsY3VsYXRpb24gb25seSANCisgICAgICB3aGVuIHRoZSBjbG9jayBpcyBzdGFibGUsIHRoYXQgaXMsIHdoZW4gdGhlIGNsb2NrIGlzIGluIHRoZSBzdGVhZHkgc3RhdGUuIA0KKyAgICAgIElmIG5vdCwgYSB3cm9uZyBDUkMgY2FsY3VsYXRpb24gbWF5IGJlIGRvbmUuIEluIGZhY3QsIHRoZSBDUkMgaXMgc2Vuc2l0aXZlIA0KKyAgICAgIHRvIHRoZSBTQ0sgc2xhdmUgaW5wdXQgY2xvY2sgYXMgc29vbiBhcyBDUkNFTiBpcyBzZXQsIGFuZCB0aGlzLCB3aGF0ZXZlciANCisgICAgICB0aGUgdmFsdWUgb2YgdGhlIFNQRSBiaXQuDQorDQorQG5vdGUgV2l0aCBoaWdoIGJpdHJhdGUgZnJlcXVlbmNpZXMsIGJlIGNhcmVmdWwgd2hlbiB0cmFuc21pdHRpbmcgdGhlIENSQy4NCisgICAgICBBcyB0aGUgbnVtYmVyIG9mIHVzZWQgQ1BVIGN5Y2xlcyBoYXMgdG8gYmUgYXMgbG93IGFzIHBvc3NpYmxlIGluIHRoZSBDUkMgDQorICAgICAgdHJhbnNmZXIgcGhhc2UsIGl0IGlzIGZvcmJpZGRlbiB0byBjYWxsIHNvZnR3YXJlIGZ1bmN0aW9ucyBpbiB0aGUgQ1JDIA0KKyAgICAgIHRyYW5zbWlzc2lvbiBzZXF1ZW5jZSB0byBhdm9pZCBlcnJvcnMgaW4gdGhlIGxhc3QgZGF0YSBhbmQgQ1JDIHJlY2VwdGlvbi4gDQorICAgICAgSW4gZmFjdCwgQ1JDTkVYVCBiaXQgaGFzIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gDQorICAgICAgb2YgdGhlIGxhc3QgZGF0YS4NCisNCitAbm90ZSBGb3IgaGlnaCBiaXQgcmF0ZSBmcmVxdWVuY2llcywgaXQgaXMgYWR2aXNlZCB0byB1c2UgdGhlIERNQSBtb2RlIHRvIGF2b2lkIHRoZQ0KKyAgICAgIGRlZ3JhZGF0aW9uIG9mIHRoZSBTUEkgc3BlZWQgcGVyZm9ybWFuY2UgZHVlIHRvIENQVSBhY2Nlc3NlcyBpbXBhY3RpbmcgdGhlIA0KKyAgICAgIFNQSSBiYW5kd2lkdGguDQorDQorQG5vdGUgV2hlbiB0aGUgU1RNMzJGMnh4IGlzIGNvbmZpZ3VyZWQgYXMgc2xhdmUgYW5kIHRoZSBOU1MgaGFyZHdhcmUgbW9kZSBpcyANCisgICAgICB1c2VkLCB0aGUgTlNTIHBpbiBuZWVkcyB0byBiZSBrZXB0IGxvdyBiZXR3ZWVuIHRoZSBkYXRhIHBoYXNlIGFuZCB0aGUgQ1JDIA0KKyAgICAgIHBoYXNlLg0KKw0KK0Bub3RlIFdoZW4gdGhlIFNQSSBpcyBjb25maWd1cmVkIGluIHNsYXZlIG1vZGUgd2l0aCB0aGUgQ1JDIGZlYXR1cmUgZW5hYmxlZCwgQ1JDDQorICAgICAgY2FsY3VsYXRpb24gdGFrZXMgcGxhY2UgZXZlbiBpZiBhIGhpZ2ggbGV2ZWwgaXMgYXBwbGllZCBvbiB0aGUgTlNTIHBpbi4gDQorICAgICAgVGhpcyBtYXkgaGFwcGVuIGZvciBleGFtcGxlIGluIGNhc2Ugb2YgYSBtdWx0aS1zbGF2ZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgDQorICAgICAgY29tbXVuaWNhdGlvbiBtYXN0ZXIgYWRkcmVzc2VzIHNsYXZlcyBhbHRlcm5hdGVseS4NCisNCitAbm90ZSBCZXR3ZWVuIGEgc2xhdmUgZGUtc2VsZWN0aW9uIChoaWdoIGxldmVsIG9uIE5TUykgYW5kIGEgbmV3IHNsYXZlIHNlbGVjdGlvbiANCisgICAgICAobG93IGxldmVsIG9uIE5TUyksIHRoZSBDUkMgdmFsdWUgc2hvdWxkIGJlIGNsZWFyZWQgb24gYm90aCBtYXN0ZXIgYW5kIHNsYXZlDQorICAgICAgc2lkZXMgaW4gb3JkZXIgdG8gcmVzeW5jaHJvbml6ZSB0aGUgbWFzdGVyIGFuZCBzbGF2ZSBmb3IgdGhlaXIgcmVzcGVjdGl2ZSANCisgICAgICBDUkMgY2FsY3VsYXRpb24uDQorDQorQG5vdGUgVG8gY2xlYXIgdGhlIENSQywgZm9sbG93IHRoZSBwcm9jZWR1cmUgYmVsb3c6DQorICAgICAgICAxLiBEaXNhYmxlIFNQSSB1c2luZyB0aGUgU1BJX0NtZCgpIGZ1bmN0aW9uDQorICAgICAgICAyLiBEaXNhYmxlIHRoZSBDUkMgY2FsY3VsYXRpb24gdXNpbmcgdGhlIFNQSV9DYWxjdWxhdGVDUkMoKSBmdW5jdGlvbi4NCisgICAgICAgIDMuIEVuYWJsZSB0aGUgQ1JDIGNhbGN1bGF0aW9uIHVzaW5nIHRoZSBTUElfQ2FsY3VsYXRlQ1JDKCkgZnVuY3Rpb24uDQorICAgICAgICA0LiBFbmFibGUgU1BJIHVzaW5nIHRoZSBTUElfQ21kKCkgZnVuY3Rpb24uDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIENSQyB2YWx1ZSBjYWxjdWxhdGlvbiBvZiB0aGUgdHJhbnNmZXJyZWQgYnl0ZXMuDQorICAqIEBwYXJhbSAgU1BJeDogd2hlcmUgeCBjYW4gYmUgMSwgMiBvciAzIHRvIHNlbGVjdCB0aGUgU1BJIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgU1BJeCBDUkMgdmFsdWUgY2FsY3VsYXRpb24uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9DYWxjdWxhdGVDUkMoU1BJX1R5cGVEZWYqIFNQSXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBzZWxlY3RlZCBTUEkgQ1JDIGNhbGN1bGF0aW9uICovDQorICAgIFNQSXgtPkNSMSB8PSBTUElfQ1IxX0NSQ0VOOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBTUEkgQ1JDIGNhbGN1bGF0aW9uICovDQorICAgIFNQSXgtPkNSMSAmPSAodWludDE2X3QpfigodWludDE2X3QpU1BJX0NSMV9DUkNFTik7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFRyYW5zbWl0IHRoZSBTUEl4IENSQyB2YWx1ZS4NCisgICogQHBhcmFtICBTUEl4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU1BJX1RyYW5zbWl0Q1JDKFNQSV9UeXBlRGVmKiBTUEl4KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgDQorICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIFNQSSBDUkMgdHJhbnNtaXNzaW9uICovDQorICBTUEl4LT5DUjEgfD0gU1BJX0NSMV9DUkNORVhUOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBSZXR1cm5zIHRoZSB0cmFuc21pdCBvciB0aGUgcmVjZWl2ZSBDUkMgcmVnaXN0ZXIgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgU1BJLg0KKyAgKiBAcGFyYW0gIFNQSXg6IHdoZXJlIHggY2FuIGJlIDEsIDIgb3IgMyB0byBzZWxlY3QgdGhlIFNQSSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFNQSV9DUkM6IHNwZWNpZmllcyB0aGUgQ1JDIHJlZ2lzdGVyIHRvIGJlIHJlYWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBTUElfQ1JDX1R4OiBTZWxlY3RzIFR4IENSQyByZWdpc3Rlcg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0NSQ19SeDogU2VsZWN0cyBSeCBDUkMgcmVnaXN0ZXINCisgICogQHJldHZhbCBUaGUgc2VsZWN0ZWQgQ1JDIHJlZ2lzdGVyIHZhbHVlLi4NCisgICovDQordWludDE2X3QgU1BJX0dldENSQyhTUElfVHlwZURlZiogU1BJeCwgdWludDhfdCBTUElfQ1JDKQ0KK3sNCisgIHVpbnQxNl90IGNyY3JlZyA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9BTExfUEVSSVBIKFNQSXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfQ1JDKFNQSV9DUkMpKTsNCisgIGlmIChTUElfQ1JDICE9IFNQSV9DUkNfUngpDQorICB7DQorICAgIC8qIEdldCB0aGUgVHggQ1JDIHJlZ2lzdGVyICovDQorICAgIGNyY3JlZyA9IFNQSXgtPlRYQ1JDUjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogR2V0IHRoZSBSeCBDUkMgcmVnaXN0ZXIgKi8NCisgICAgY3JjcmVnID0gU1BJeC0+UlhDUkNSOw0KKyAgfQ0KKyAgLyogUmV0dXJuIHRoZSBzZWxlY3RlZCBDUkMgcmVnaXN0ZXIgKi8NCisgIHJldHVybiBjcmNyZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFJldHVybnMgdGhlIENSQyBQb2x5bm9taWFsIHJlZ2lzdGVyIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIFNQSS4NCisgICogQHBhcmFtICBTUEl4OiB3aGVyZSB4IGNhbiBiZSAxLCAyIG9yIDMgdG8gc2VsZWN0IHRoZSBTUEkgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBUaGUgQ1JDIFBvbHlub21pYWwgcmVnaXN0ZXIgdmFsdWUuDQorICAqLw0KK3VpbnQxNl90IFNQSV9HZXRDUkNQb2x5bm9taWFsKFNQSV9UeXBlRGVmKiBTUEl4KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgDQorICAvKiBSZXR1cm4gdGhlIENSQyBwb2x5bm9taWFsIHJlZ2lzdGVyICovDQorICByZXR1cm4gU1BJeC0+Q1JDUFI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9Hcm91cDQgRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgU1BJeC9JMlN4IERNQSBpbnRlcmZhY2UuDQorICAqIEBwYXJhbSAgU1BJeDogVG8gc2VsZWN0IHRoZSBTUEl4L0kyU3ggcGVyaXBoZXJhbCwgd2hlcmUgeCBjYW4gYmU6IDEsIDIgb3IgMyANCisgICogICAgICAgICBpbiBTUEkgbW9kZSBvciAyIG9yIDMgaW4gSTJTIG1vZGUuIA0KKyAgKiBAcGFyYW0gIFNQSV9JMlNfRE1BUmVxOiBzcGVjaWZpZXMgdGhlIFNQSSBETUEgdHJhbnNmZXIgcmVxdWVzdCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFNQSV9JMlNfRE1BUmVxX1R4OiBUeCBidWZmZXIgRE1BIHRyYW5zZmVyIHJlcXVlc3QNCisgICogICAgICAgICAgICBAYXJnIFNQSV9JMlNfRE1BUmVxX1J4OiBSeCBidWZmZXIgRE1BIHRyYW5zZmVyIHJlcXVlc3QNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBTUEkgRE1BIHRyYW5zZmVyIHJlcXVlc3QuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9JMlNfRE1BQ21kKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50MTZfdCBTUElfSTJTX0RNQVJlcSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfSTJTX0RNQVJFUShTUElfSTJTX0RNQVJlcSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgU1BJIERNQSByZXF1ZXN0cyAqLw0KKyAgICBTUEl4LT5DUjIgfD0gU1BJX0kyU19ETUFSZXE7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIFNQSSBETUEgcmVxdWVzdHMgKi8NCisgICAgU1BJeC0+Q1IyICY9ICh1aW50MTZfdCl+U1BJX0kyU19ETUFSZXE7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFNQSV9Hcm91cDUgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBTUEkgSW50ZXJydXB0cyANCisgIHNvdXJjZXMgYW5kIGNoZWNrIG9yIGNsZWFyIHRoZSBmbGFncyBvciBwZW5kaW5nIGJpdHMgc3RhdHVzLg0KKyAgVGhlIHVzZXIgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIG1vZGUgd2lsbCBiZSB1c2VkIGluIGhpcyBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgDQorICB0aGUgY29tbXVuaWNhdGlvbjogUG9sbGluZyBtb2RlLCBJbnRlcnJ1cHQgbW9kZSBvciBETUEgbW9kZS4gDQorICAgIA0KKyAgUG9sbGluZyBNb2RlDQorICA9PT09PT09PT09PT09DQorICBJbiBQb2xsaW5nIE1vZGUsIHRoZSBTUEkvSTJTIGNvbW11bmljYXRpb24gY2FuIGJlIG1hbmFnZWQgYnkgOSBmbGFnczoNCisgICAgIDEuIFNQSV9JMlNfRkxBR19UWEUgOiB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIHRoZSB0cmFuc21pdCBidWZmZXIgcmVnaXN0ZXINCisgICAgIDIuIFNQSV9JMlNfRkxBR19SWE5FIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgcmVnaXN0ZXINCisgICAgIDMuIFNQSV9JMlNfRkxBR19CU1kgOiB0byBpbmRpY2F0ZSB0aGUgc3RhdGUgb2YgdGhlIGNvbW11bmljYXRpb24gbGF5ZXIgb2YgdGhlIFNQSS4NCisgICAgIDQuIFNQSV9GTEFHX0NSQ0VSUiA6IHRvIGluZGljYXRlIGlmIGEgQ1JDIENhbGN1bGF0aW9uIGVycm9yIG9jY3VyICAgICAgICAgICAgICANCisgICAgIDUuIFNQSV9GTEFHX01PREYgOiB0byBpbmRpY2F0ZSBpZiBhIE1vZGUgRmF1bHQgZXJyb3Igb2NjdXINCisgICAgIDYuIFNQSV9JMlNfRkxBR19PVlIgOiB0byBpbmRpY2F0ZSBpZiBhbiBPdmVycnVuIGVycm9yIG9jY3VyDQorICAgICA3LiBJMlNfRkxBR19USUZSRkU6IHRvIGluZGljYXRlIGEgRnJhbWUgRm9ybWF0IGVycm9yIG9jY3Vycy4NCisgICAgIDguIEkyU19GTEFHX1VEUjogdG8gaW5kaWNhdGUgYW4gVW5kZXJydW4gZXJyb3Igb2NjdXJzLg0KKyAgICAgOS4gSTJTX0ZMQUdfQ0hTSURFOiB0byBpbmRpY2F0ZSBDaGFubmVsIFNpZGUuDQorDQorQG5vdGUgRG8gbm90IHVzZSB0aGUgQlNZIGZsYWcgdG8gaGFuZGxlIGVhY2ggZGF0YSB0cmFuc21pc3Npb24gb3IgcmVjZXB0aW9uLiAgSXQgaXMNCisgICAgICBiZXR0ZXIgdG8gdXNlIHRoZSBUWEUgYW5kIFJYTkUgZmxhZ3MgaW5zdGVhZC4NCisNCisgIEluIHRoaXMgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgIC0gRmxhZ1N0YXR1cyBTUElfSTJTX0dldEZsYWdTdGF0dXMoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9JMlNfRkxBRyk7DQorICAgICAtIHZvaWQgU1BJX0kyU19DbGVhckZsYWcoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9JMlNfRkxBRyk7DQorDQorICBJbnRlcnJ1cHQgTW9kZQ0KKyAgPT09PT09PT09PT09PT09DQorICBJbiBJbnRlcnJ1cHQgTW9kZSwgdGhlIFNQSSBjb21tdW5pY2F0aW9uIGNhbiBiZSBtYW5hZ2VkIGJ5IDMgaW50ZXJydXB0IHNvdXJjZXMNCisgIGFuZCA3IHBlbmRpbmcgYml0czogDQorICBQZW5kaW5nIEJpdHM6DQorICAtLS0tLS0tLS0tLS0tIA0KKyAgICAgMS4gU1BJX0kyU19JVF9UWEUgOiB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIHRoZSB0cmFuc21pdCBidWZmZXIgcmVnaXN0ZXINCisgICAgIDIuIFNQSV9JMlNfSVRfUlhORSA6IHRvIGluZGljYXRlIHRoZSBzdGF0dXMgb2YgdGhlIHJlY2VpdmUgYnVmZmVyIHJlZ2lzdGVyDQorICAgICAzLiBTUElfSVRfQ1JDRVJSIDogdG8gaW5kaWNhdGUgaWYgYSBDUkMgQ2FsY3VsYXRpb24gZXJyb3Igb2NjdXIgKGF2YWlsYWJsZSBpbiBTUEkgbW9kZSBvbmx5KSAgICAgICAgICAgIA0KKyAgICAgNC4gU1BJX0lUX01PREYgOiB0byBpbmRpY2F0ZSBpZiBhIE1vZGUgRmF1bHQgZXJyb3Igb2NjdXIgKGF2YWlsYWJsZSBpbiBTUEkgbW9kZSBvbmx5KQ0KKyAgICAgNS4gU1BJX0kyU19JVF9PVlIgOiB0byBpbmRpY2F0ZSBpZiBhbiBPdmVycnVuIGVycm9yIG9jY3VyDQorICAgICA2LiBJMlNfSVRfVURSIDogdG8gaW5kaWNhdGUgYW4gVW5kZXJydW4gRXJyb3Igb2NjdXJzIChhdmFpbGFibGUgaW4gSTJTIG1vZGUgb25seSkuDQorICAgICA3LiBJMlNfRkxBR19USUZSRkUgOiB0byBpbmRpY2F0ZSBhIEZyYW1lIEZvcm1hdCBlcnJvciBvY2N1cnMgKGF2YWlsYWJsZSBpbiBUSSBtb2RlIG9ubHkpLg0KKw0KKyAgSW50ZXJydXB0IFNvdXJjZToNCisgIC0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAxLiBTUElfSTJTX0lUX1RYRTogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgVHggYnVmZmVyIGVtcHR5IA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC4gIA0KKyAgICAgMi4gU1BJX0kyU19JVF9SWE5FIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgUnggYnVmZmVyIG5vdCANCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5IGludGVycnVwdC4NCisgICAgIDMuIFNQSV9JMlNfSVRfRVJSIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgZXJyb3JzIGludGVycnVwdC4NCisNCisgIEluIHRoaXMgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgIC0gdm9pZCBTUElfSTJTX0lUQ29uZmlnKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50OF90IFNQSV9JMlNfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorICAgICAtIElUU3RhdHVzIFNQSV9JMlNfR2V0SVRTdGF0dXMoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQ4X3QgU1BJX0kyU19JVCk7DQorICAgICAtIHZvaWQgU1BJX0kyU19DbGVhcklUUGVuZGluZ0JpdChTUElfVHlwZURlZiogU1BJeCwgdWludDhfdCBTUElfSTJTX0lUKTsNCisNCisgIERNQSBNb2RlDQorICA9PT09PT09PQ0KKyAgSW4gRE1BIE1vZGUsIHRoZSBTUEkgY29tbXVuaWNhdGlvbiBjYW4gYmUgbWFuYWdlZCBieSAyIERNQSBDaGFubmVsIHJlcXVlc3RzOg0KKyAgICAgMS4gU1BJX0kyU19ETUFSZXFfVHg6IHNwZWNpZmllcyB0aGUgVHggYnVmZmVyIERNQSB0cmFuc2ZlciByZXF1ZXN0DQorICAgICAyLiBTUElfSTJTX0RNQVJlcV9SeDogc3BlY2lmaWVzIHRoZSBSeCBidWZmZXIgRE1BIHRyYW5zZmVyIHJlcXVlc3QNCisNCisgIEluIHRoaXMgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOg0KKyAgICAtIHZvaWQgU1BJX0kyU19ETUFDbWQoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9JMlNfRE1BUmVxLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpOw0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBzcGVjaWZpZWQgU1BJL0kyUyBpbnRlcnJ1cHRzLg0KKyAgKiBAcGFyYW0gIFNQSXg6IFRvIHNlbGVjdCB0aGUgU1BJeC9JMlN4IHBlcmlwaGVyYWwsIHdoZXJlIHggY2FuIGJlOiAxLCAyIG9yIDMgDQorICAqICAgICAgICAgaW4gU1BJIG1vZGUgb3IgMiBvciAzIGluIEkyUyBtb2RlLiAgDQorICAqIEBwYXJhbSAgU1BJX0kyU19JVDogc3BlY2lmaWVzIHRoZSBTUEkgaW50ZXJydXB0IHNvdXJjZSB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFNQSV9JMlNfSVRfVFhFOiBUeCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IG1hc2sNCisgICogICAgICAgICAgICBAYXJnIFNQSV9JMlNfSVRfUlhORTogUnggYnVmZmVyIG5vdCBlbXB0eSBpbnRlcnJ1cHQgbWFzaw0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0kyU19JVF9FUlI6IEVycm9yIGludGVycnVwdCBtYXNrDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIFNQSSBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9JMlNfSVRDb25maWcoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQ4X3QgU1BJX0kyU19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIHVpbnQxNl90IGl0cG9zID0gMCwgaXRtYXNrID0gMCA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19TUElfSTJTX0NPTkZJR19JVChTUElfSTJTX0lUKSk7DQorDQorICAvKiBHZXQgdGhlIFNQSSBJVCBpbmRleCAqLw0KKyAgaXRwb3MgPSBTUElfSTJTX0lUID4+IDQ7DQorDQorICAvKiBTZXQgdGhlIElUIG1hc2sgKi8NCisgIGl0bWFzayA9ICh1aW50MTZfdCkxIDw8ICh1aW50MTZfdClpdHBvczsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIHNlbGVjdGVkIFNQSSBpbnRlcnJ1cHQgKi8NCisgICAgU1BJeC0+Q1IyIHw9IGl0bWFzazsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgU1BJIGludGVycnVwdCAqLw0KKyAgICBTUEl4LT5DUjIgJj0gKHVpbnQxNl90KX5pdG1hc2s7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU1BJeC9JMlN4IGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBTUEl4OiBUbyBzZWxlY3QgdGhlIFNQSXgvSTJTeCBwZXJpcGhlcmFsLCB3aGVyZSB4IGNhbiBiZTogMSwgMiBvciAzIA0KKyAgKiAgICAgICAgIGluIFNQSSBtb2RlIG9yIDIgb3IgMyBpbiBJMlMgbW9kZS4gDQorICAqIEBwYXJhbSAgU1BJX0kyU19GTEFHOiBzcGVjaWZpZXMgdGhlIFNQSSBmbGFnIHRvIGNoZWNrLiANCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFNQSV9JMlNfRkxBR19UWEU6IFRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0kyU19GTEFHX1JYTkU6IFJlY2VpdmUgYnVmZmVyIG5vdCBlbXB0eSBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0kyU19GTEFHX0JTWTogQnVzeSBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0kyU19GTEFHX09WUjogT3ZlcnJ1biBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0ZMQUdfTU9ERjogTW9kZSBGYXVsdCBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0ZMQUdfQ1JDRVJSOiBDUkMgRXJyb3IgZmxhZy4NCisgICogICAgICAgICAgICBAYXJnIFNQSV9JMlNfRkxBR19USUZSRkU6IEZvcm1hdCBFcnJvci4NCisgICogICAgICAgICAgICBAYXJnIEkyU19GTEFHX1VEUjogVW5kZXJydW4gRXJyb3IgZmxhZy4NCisgICogICAgICAgICAgICBAYXJnIEkyU19GTEFHX0NIU0lERTogQ2hhbm5lbCBTaWRlIGZsYWcuICANCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFNQSV9JMlNfRkxBRyAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorRmxhZ1N0YXR1cyBTUElfSTJTX0dldEZsYWdTdGF0dXMoU1BJX1R5cGVEZWYqIFNQSXgsIHVpbnQxNl90IFNQSV9JMlNfRkxBRykNCit7DQorICBGbGFnU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19TUElfQUxMX1BFUklQSChTUEl4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0kyU19HRVRfRkxBRyhTUElfSTJTX0ZMQUcpKTsNCisgIA0KKyAgLyogQ2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIFNQSSBmbGFnICovDQorICBpZiAoKFNQSXgtPlNSICYgU1BJX0kyU19GTEFHKSAhPSAodWludDE2X3QpUkVTRVQpDQorICB7DQorICAgIC8qIFNQSV9JMlNfRkxBRyBpcyBzZXQgKi8NCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBTUElfSTJTX0ZMQUcgaXMgcmVzZXQgKi8NCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICAvKiBSZXR1cm4gdGhlIFNQSV9JMlNfRkxBRyBzdGF0dXMgKi8NCisgIHJldHVybiAgYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgdGhlIFNQSXggQ1JDIEVycm9yIChDUkNFUlIpIGZsYWcuDQorICAqIEBwYXJhbSAgU1BJeDogVG8gc2VsZWN0IHRoZSBTUEl4L0kyU3ggcGVyaXBoZXJhbCwgd2hlcmUgeCBjYW4gYmU6IDEsIDIgb3IgMyANCisgICogICAgICAgICBpbiBTUEkgbW9kZSBvciAyIG9yIDMgaW4gSTJTIG1vZGUuIA0KKyAgKiBAcGFyYW0gIFNQSV9JMlNfRkxBRzogc3BlY2lmaWVzIHRoZSBTUEkgZmxhZyB0byBjbGVhci4gDQorICAqICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIG9ubHkgQ1JDRVJSIGZsYWcuDQorICAqICAgICAgICAgICAgQGFyZyBTUElfRkxBR19DUkNFUlI6IENSQyBFcnJvciBmbGFnLiAgDQorICAqICANCisgICogQG5vdGUgICBPVlIgKE92ZXJSdW4gZXJyb3IpIGZsYWcgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSBzZXF1ZW5jZTogYSByZWFkIA0KKyAgKiAgICAgICAgICBvcGVyYXRpb24gdG8gU1BJX0RSIHJlZ2lzdGVyIChTUElfSTJTX1JlY2VpdmVEYXRhKCkpIGZvbGxvd2VkIGJ5IGEgcmVhZCANCisgICogICAgICAgICAgb3BlcmF0aW9uIHRvIFNQSV9TUiByZWdpc3RlciAoU1BJX0kyU19HZXRGbGFnU3RhdHVzKCkpLg0KKyAgKiBAbm90ZSAgIFVEUiAoVW5kZXJSdW4gZXJyb3IpIGZsYWcgaXMgY2xlYXJlZCBieSBhIHJlYWQgb3BlcmF0aW9uIHRvIA0KKyAgKiAgICAgICAgICBTUElfU1IgcmVnaXN0ZXIgKFNQSV9JMlNfR2V0RmxhZ1N0YXR1cygpKS4gICANCisgICogQG5vdGUgICBNT0RGIChNb2RlIEZhdWx0KSBmbGFnIGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgc2VxdWVuY2U6IGEgcmVhZC93cml0ZSANCisgICogICAgICAgICAgb3BlcmF0aW9uIHRvIFNQSV9TUiByZWdpc3RlciAoU1BJX0kyU19HZXRGbGFnU3RhdHVzKCkpIGZvbGxvd2VkIGJ5IGEgDQorICAqICAgICAgICAgIHdyaXRlIG9wZXJhdGlvbiB0byBTUElfQ1IxIHJlZ2lzdGVyIChTUElfQ21kKCkgdG8gZW5hYmxlIHRoZSBTUEkpLg0KKyAgKiAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNQSV9JMlNfQ2xlYXJGbGFnKFNQSV9UeXBlRGVmKiBTUEl4LCB1aW50MTZfdCBTUElfSTJTX0ZMQUcpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19TUElfQUxMX1BFUklQSChTUEl4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0kyU19DTEVBUl9GTEFHKFNQSV9JMlNfRkxBRykpOw0KKyAgICANCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBTUEkgQ1JDIEVycm9yIChDUkNFUlIpIGZsYWcgKi8NCisgIFNQSXgtPlNSID0gKHVpbnQxNl90KX5TUElfSTJTX0ZMQUc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgU1BJeC9JMlN4IGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFNQSXg6IFRvIHNlbGVjdCB0aGUgU1BJeC9JMlN4IHBlcmlwaGVyYWwsIHdoZXJlIHggY2FuIGJlOiAxLCAyIG9yIDMgDQorICAqICAgICAgICAgaW4gU1BJIG1vZGUgb3IgMiBvciAzIGluIEkyUyBtb2RlLiAgIA0KKyAgKiBAcGFyYW0gIFNQSV9JMlNfSVQ6IHNwZWNpZmllcyB0aGUgU1BJIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2suIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1BJX0kyU19JVF9UWEU6IFRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBTUElfSTJTX0lUX1JYTkU6IFJlY2VpdmUgYnVmZmVyIG5vdCBlbXB0eSBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBTUElfSTJTX0lUX09WUjogT3ZlcnJ1biBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBTUElfSVRfTU9ERjogTW9kZSBGYXVsdCBpbnRlcnJ1cHQuDQorICAqICAgICAgICAgICAgQGFyZyBTUElfSVRfQ1JDRVJSOiBDUkMgRXJyb3IgaW50ZXJydXB0Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX1VEUjogVW5kZXJydW4gaW50ZXJydXB0LiAgDQorICAqICAgICAgICAgICAgQGFyZyBTUElfSTJTX0lUX1RJRlJGRTogRm9ybWF0IEVycm9yIGludGVycnVwdC4gIA0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgU1BJX0kyU19JVCAoU0VUIG9yIFJFU0VUKS4NCisgICovDQorSVRTdGF0dXMgU1BJX0kyU19HZXRJVFN0YXR1cyhTUElfVHlwZURlZiogU1BJeCwgdWludDhfdCBTUElfSTJTX0lUKQ0KK3sNCisgIElUU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgdWludDE2X3QgaXRwb3MgPSAwLCBpdG1hc2sgPSAwLCBlbmFibGVzdGF0dXMgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19TUElfQUxMX1BFUklQSChTUEl4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0kyU19HRVRfSVQoU1BJX0kyU19JVCkpOw0KKw0KKyAgLyogR2V0IHRoZSBTUElfSTJTX0lUIGluZGV4ICovDQorICBpdHBvcyA9IDB4MDEgPDwgKFNQSV9JMlNfSVQgJiAweDBGKTsNCisNCisgIC8qIEdldCB0aGUgU1BJX0kyU19JVCBJVCBtYXNrICovDQorICBpdG1hc2sgPSBTUElfSTJTX0lUID4+IDQ7DQorDQorICAvKiBTZXQgdGhlIElUIG1hc2sgKi8NCisgIGl0bWFzayA9IDB4MDEgPDwgaXRtYXNrOw0KKw0KKyAgLyogR2V0IHRoZSBTUElfSTJTX0lUIGVuYWJsZSBiaXQgc3RhdHVzICovDQorICBlbmFibGVzdGF0dXMgPSAoU1BJeC0+Q1IyICYgaXRtYXNrKSA7DQorDQorICAvKiBDaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgU1BJIGludGVycnVwdCAqLw0KKyAgaWYgKCgoU1BJeC0+U1IgJiBpdHBvcykgIT0gKHVpbnQxNl90KVJFU0VUKSAmJiBlbmFibGVzdGF0dXMpDQorICB7DQorICAgIC8qIFNQSV9JMlNfSVQgaXMgc2V0ICovDQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogU1BJX0kyU19JVCBpcyByZXNldCAqLw0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIC8qIFJldHVybiB0aGUgU1BJX0kyU19JVCBzdGF0dXMgKi8NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgU1BJeCBDUkMgRXJyb3IgKENSQ0VSUikgaW50ZXJydXB0IHBlbmRpbmcgYml0Lg0KKyAgKiBAcGFyYW0gIFNQSXg6IFRvIHNlbGVjdCB0aGUgU1BJeC9JMlN4IHBlcmlwaGVyYWwsIHdoZXJlIHggY2FuIGJlOiAxLCAyIG9yIDMgDQorICAqICAgICAgICAgaW4gU1BJIG1vZGUgb3IgMiBvciAzIGluIEkyUyBtb2RlLiAgDQorICAqIEBwYXJhbSAgU1BJX0kyU19JVDogc3BlY2lmaWVzIHRoZSBTUEkgaW50ZXJydXB0IHBlbmRpbmcgYml0IHRvIGNsZWFyLg0KKyAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gY2xlYXJzIG9ubHkgQ1JDRVJSIGludGVycnVwdCBwZW5kaW5nIGJpdC4gICANCisgICogICAgICAgICAgICBAYXJnIFNQSV9JVF9DUkNFUlI6IENSQyBFcnJvciBpbnRlcnJ1cHQuDQorICAqICAgDQorICAqIEBub3RlICAgT1ZSIChPdmVyUnVuIEVycm9yKSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgaXMgY2xlYXJlZCBieSBzb2Z0d2FyZSANCisgICogICAgICAgICAgc2VxdWVuY2U6IGEgcmVhZCBvcGVyYXRpb24gdG8gU1BJX0RSIHJlZ2lzdGVyIChTUElfSTJTX1JlY2VpdmVEYXRhKCkpIA0KKyAgKiAgICAgICAgICBmb2xsb3dlZCBieSBhIHJlYWQgb3BlcmF0aW9uIHRvIFNQSV9TUiByZWdpc3RlciAoU1BJX0kyU19HZXRJVFN0YXR1cygpKS4NCisgICogQG5vdGUgICBVRFIgKFVuZGVyUnVuIEVycm9yKSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgaXMgY2xlYXJlZCBieSBhIHJlYWQgDQorICAqICAgICAgICAgIG9wZXJhdGlvbiB0byBTUElfU1IgcmVnaXN0ZXIgKFNQSV9JMlNfR2V0SVRTdGF0dXMoKSkuICAgDQorICAqIEBub3RlICAgTU9ERiAoTW9kZSBGYXVsdCkgaW50ZXJydXB0IHBlbmRpbmcgYml0IGlzIGNsZWFyZWQgYnkgc29mdHdhcmUgc2VxdWVuY2U6DQorICAqICAgICAgICAgIGEgcmVhZC93cml0ZSBvcGVyYXRpb24gdG8gU1BJX1NSIHJlZ2lzdGVyIChTUElfSTJTX0dldElUU3RhdHVzKCkpIA0KKyAgKiAgICAgICAgICBmb2xsb3dlZCBieSBhIHdyaXRlIG9wZXJhdGlvbiB0byBTUElfQ1IxIHJlZ2lzdGVyIChTUElfQ21kKCkgdG8gZW5hYmxlIA0KKyAgKiAgICAgICAgICB0aGUgU1BJKS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU1BJX0kyU19DbGVhcklUUGVuZGluZ0JpdChTUElfVHlwZURlZiogU1BJeCwgdWludDhfdCBTUElfSTJTX0lUKQ0KK3sNCisgIHVpbnQxNl90IGl0cG9zID0gMDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfU1BJX0FMTF9QRVJJUEgoU1BJeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NQSV9JMlNfQ0xFQVJfSVQoU1BJX0kyU19JVCkpOw0KKw0KKyAgLyogR2V0IHRoZSBTUElfSTJTIElUIGluZGV4ICovDQorICBpdHBvcyA9IDB4MDEgPDwgKFNQSV9JMlNfSVQgJiAweDBGKTsNCisNCisgIC8qIENsZWFyIHRoZSBzZWxlY3RlZCBTUEkgQ1JDIEVycm9yIChDUkNFUlIpIGludGVycnVwdCBwZW5kaW5nIGJpdCAqLw0KKyAgU1BJeC0+U1IgPSAodWludDE2X3Qpfml0cG9zOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLyANCisNCisvKioNCisgICogQH0NCisgICovIA0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8gDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X3N5c2NmZy5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9zeXNjZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M5ZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF9zeXNjZmcuYwpAQCAtMCwwICsxLDIxMCBAQAorLyoqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGZpbGUgICAgc3RtMzJmMnh4X3N5c2NmZy5jDQorICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtDQorICAqIEB2ZXJzaW9uIFYxLjEuMg0KKyAgKiBAZGF0ZSAgICAwNS1NYXJjaC0yMDEyIA0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgU1lTQ0ZHIHBlcmlwaGVyYWwuDQorICAqDQorICAqICBAdmVyYmF0aW0NCisgICogIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3I6DQorICAqICAgICAgICAgIA0KKyAgKiAgICAgICAgICAxLiBSZW1hcHBpbmcgdGhlIG1lbW9yeSBhY2Nlc3NpYmxlIGluIHRoZSBjb2RlIGFyZWEgdXNpbmcgU1lTQ0ZHX01lbW9yeVJlbWFwQ29uZmlnKCkNCisgICogICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICAyLiBNYW5hZ2UgdGhlIEVYVEkgbGluZXMgY29ubmVjdGlvbiB0byB0aGUgR1BJT3MgdXNpbmcgU1lTQ0ZHX0VYVElMaW5lQ29uZmlnKCkNCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgMy4gU2VsZWN0IHRoZSBFVEhFUk5FVCBtZWRpYSBpbnRlcmZhY2UgKFJNSUkvUklJKSB1c2luZyBTWVNDRkdfRVRIX01lZGlhSW50ZXJmYWNlQ29uZmlnKCkNCisgICoNCisgICogIEBub3RlICBTWVNDRkcgQVBCIGNsb2NrIG11c3QgYmUgZW5hYmxlZCB0byBnZXQgd3JpdGUgYWNjZXNzIHRvIFNZU0NGRyByZWdpc3RlcnMsDQorICAqICAgICAgICAgdXNpbmcgUkNDX0FQQjJQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMlBlcmlwaF9TWVNDRkcsIEVOQUJMRSk7DQorICAqICAgICAgICAgICAgICAgICANCisgICogIEBlbmR2ZXJiYXRpbQ0KKyAgKiAgICAgIA0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X3N5c2NmZy5oIg0KKyNpbmNsdWRlICJzdG0zMmYyeHhfcmNjLmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgU1lTQ0ZHIA0KKyAgKiBAYnJpZWYgU1lTQ0ZHIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLyANCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogLS0tLS0tLS0tLS0tIFJDQyByZWdpc3RlcnMgYml0IGFkZHJlc3MgaW4gdGhlIGFsaWFzIHJlZ2lvbiAtLS0tLS0tLS0tLSAqLw0KKyNkZWZpbmUgU1lTQ0ZHX09GRlNFVCAgICAgICAgICAgICAoU1lTQ0ZHX0JBU0UgLSBQRVJJUEhfQkFTRSkNCisvKiAtLS0gIFBNQyBSZWdpc3RlciAtLS0qLyANCisvKiBBbGlhcyB3b3JkIGFkZHJlc3Mgb2YgTUlJX1JNSUlfU0VMIGJpdCAqLyANCisjZGVmaW5lIFBNQ19PRkZTRVQgICAgICAgICAgICAgICAgKFNZU0NGR19PRkZTRVQgKyAweDA0KSANCisjZGVmaW5lIE1JSV9STUlJX1NFTF9CaXROdW1iZXIgICAgKCh1aW50OF90KTB4MTcpIA0KKyNkZWZpbmUgUE1DX01JSV9STUlJX1NFTF9CQiAgICAgICAoUEVSSVBIX0JCX0JBU0UgKyAoUE1DX09GRlNFVCAqIDMyKSArIChNSUlfUk1JSV9TRUxfQml0TnVtYmVyICogNCkpIA0KKw0KKy8qIC0tLSAgQ01QQ1IgUmVnaXN0ZXIgLS0tKi8gDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIENNUF9QRCBiaXQgKi8gDQorI2RlZmluZSBDTVBDUl9PRkZTRVQgICAgICAgICAgICAgIChTWVNDRkdfT0ZGU0VUICsgMHgyMCkgDQorI2RlZmluZSBDTVBfUERfQml0TnVtYmVyICAgICAgICAgICgodWludDhfdCkweDAwKSANCisjZGVmaW5lIENNUENSX0NNUF9QRF9CQiAgICAgICAgICAgKFBFUklQSF9CQl9CQVNFICsgKENNUENSX09GRlNFVCAqIDMyKSArIChDTVBfUERfQml0TnVtYmVyICogNCkpIA0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBTWVNDRkdfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovIA0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIERlaW5pdGlhbGl6ZXMgdGhlIEFsdGVybmF0ZSBGdW5jdGlvbnMgKHJlbWFwIGFuZCBFWFRJIGNvbmZpZ3VyYXRpb24pDQorICAqICAgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgU1lTQ0ZHX0RlSW5pdCh2b2lkKQ0KK3sNCisgICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1NZU0NGRywgRU5BQkxFKTsNCisgICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1NZU0NGRywgRElTQUJMRSk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoYW5nZXMgdGhlIG1hcHBpbmcgb2YgdGhlIHNwZWNpZmllZCBwaW4uDQorICAqIEBwYXJhbSAgU1lTQ0ZHX01lbW9yeTogc2VsZWN0cyB0aGUgbWVtb3J5IHJlbWFwcGluZy4NCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgU1lTQ0ZHX01lbW9yeVJlbWFwX0ZsYXNoOiAgICAgICBNYWluIEZsYXNoIG1lbW9yeSBtYXBwZWQgYXQgMHgwMDAwMDAwMCAgDQorICAqICAgICAgICAgICAgQGFyZyBTWVNDRkdfTWVtb3J5UmVtYXBfU3lzdGVtRmxhc2g6IFN5c3RlbSBGbGFzaCBtZW1vcnkgbWFwcGVkIGF0IDB4MDAwMDAwMDANCisgICogICAgICAgICAgICBAYXJnIFNZU0NGR19NZW1vcnlSZW1hcF9GU01DOiAgICAgICAgRlNNQyAoQmFuazEgKE5PUi9QU1JBTSAxIGFuZCAyKSBtYXBwZWQgYXQgMHgwMDAwMDAwMA0KKyAgKiAgICAgICAgICAgIEBhcmcgU1lTQ0ZHX01lbW9yeVJlbWFwX1NSQU06ICAgICAgICBFbWJlZGRlZCBTUkFNICgxMTJrQikgbWFwcGVkIGF0IDB4MDAwMDAwMDANCisgICogIA0KKyAgKiBAbm90ZSAgIEluIHJlbWFwIG1vZGUsIHRoZSBGU01DIGFkZHJlc3NpbmcgaXMgZml4ZWQgdG8gdGhlIHJlbWFwIGFkZHJlc3MgYXJlYSBvbmx5DQorICAqICAgICAgICAoQmFuazEgTk9SL1BTUkFNIDEgYW5kIE5PUi9QU1JBTSAyKSBhbmQgRlNNQyBjb250cm9sIHJlZ2lzdGVycyBhcmUgbm90DQorICAqICAgICAgICAgYWNjZXNzaWJsZS4gVGhlIEZTTUMgcmVtYXAgZnVuY3Rpb24gbXVzdCBiZSBkaXNhYmxlZCB0byBhbGxvd3MgYWRkcmVzc2luZw0KKyAgKiAgICAgICAgIG90aGVyIG1lbW9yeSBkZXZpY2VzIHRocm91Z2ggdGhlIEZTTUMgYW5kL29yIHRvIGFjY2VzcyBGU01DIGNvbnRyb2wNCisgICogICAgICAgICByZWdpc3RlcnMuIA0KKyAgKiAgICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNZU0NGR19NZW1vcnlSZW1hcENvbmZpZyh1aW50OF90IFNZU0NGR19NZW1vcnlSZW1hcCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1NZU0NGR19NRU1PUllfUkVNQVBfQ09ORklORyhTWVNDRkdfTWVtb3J5UmVtYXApKTsNCisNCisgIFNZU0NGRy0+TUVNUk1QID0gU1lTQ0ZHX01lbW9yeVJlbWFwOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZWxlY3RzIHRoZSBHUElPIHBpbiB1c2VkIGFzIEVYVEkgTGluZS4NCisgICogQHBhcmFtICBFWFRJX1BvcnRTb3VyY2VHUElPeCA6IHNlbGVjdHMgdGhlIEdQSU8gcG9ydCB0byBiZSB1c2VkIGFzIHNvdXJjZSBmb3INCisgICogICAgICAgICAgRVhUSSBsaW5lcyB3aGVyZSB4IGNhbiBiZSAoQS4uSSkuDQorICAqIEBwYXJhbSAgRVhUSV9QaW5Tb3VyY2V4OiBzcGVjaWZpZXMgdGhlIEVYVEkgbGluZSB0byBiZSBjb25maWd1cmVkLg0KKyAgKiAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIEVYVElfUGluU291cmNleCB3aGVyZSB4IGNhbiBiZSAoMC4uMTUsIGV4Y2VwdA0KKyAgKiAgICAgICAgICAgZm9yIEVYVElfUG9ydFNvdXJjZUdQSU9JIHggY2FuIGJlICgwLi4xMSkuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFNZU0NGR19FWFRJTGluZUNvbmZpZyh1aW50OF90IEVYVElfUG9ydFNvdXJjZUdQSU94LCB1aW50OF90IEVYVElfUGluU291cmNleCkNCit7DQorICB1aW50MzJfdCB0bXAgPSAweDAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19FWFRJX1BPUlRfU09VUkNFKEVYVElfUG9ydFNvdXJjZUdQSU94KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRVhUSV9QSU5fU09VUkNFKEVYVElfUGluU291cmNleCkpOw0KKw0KKyAgdG1wID0gKCh1aW50MzJfdCkweDBGKSA8PCAoMHgwNCAqIChFWFRJX1BpblNvdXJjZXggJiAodWludDhfdCkweDAzKSk7DQorICBTWVNDRkctPkVYVElDUltFWFRJX1BpblNvdXJjZXggPj4gMHgwMl0gJj0gfnRtcDsNCisgIFNZU0NGRy0+RVhUSUNSW0VYVElfUGluU291cmNleCA+PiAweDAyXSB8PSAoKCh1aW50MzJfdClFWFRJX1BvcnRTb3VyY2VHUElPeCkgPDwgKDB4MDQgKiAoRVhUSV9QaW5Tb3VyY2V4ICYgKHVpbnQ4X3QpMHgwMykpKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgRVRIRVJORVQgbWVkaWEgaW50ZXJmYWNlIA0KKyAgKiBAcGFyYW0gIFNZU0NGR19FVEhfTWVkaWFJbnRlcmZhY2U6IHNwZWNpZmllcyB0aGUgTWVkaWEgSW50ZXJmYWNlIG1vZGUuIA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiANCisgICogICAgICAgICAgICBAYXJnIFNZU0NGR19FVEhfTWVkaWFJbnRlcmZhY2VfTUlJOiBNSUkgbW9kZSBzZWxlY3RlZA0KKyAgKiAgICAgICAgICAgIEBhcmcgU1lTQ0ZHX0VUSF9NZWRpYUludGVyZmFjZV9STUlJOiBSTUlJIG1vZGUgc2VsZWN0ZWQgDQorICAqIEByZXR2YWwgTm9uZSANCisgICovDQordm9pZCBTWVNDRkdfRVRIX01lZGlhSW50ZXJmYWNlQ29uZmlnKHVpbnQzMl90IFNZU0NGR19FVEhfTWVkaWFJbnRlcmZhY2UpIA0KK3sgDQorICBhc3NlcnRfcGFyYW0oSVNfU1lTQ0ZHX0VUSF9NRURJQV9JTlRFUkZBQ0UoU1lTQ0ZHX0VUSF9NZWRpYUludGVyZmFjZSkpOyANCisgIC8qIENvbmZpZ3VyZSBNSUlfUk1JSSBzZWxlY3Rpb24gYml0ICovIA0KKyAgKihfX0lPIHVpbnQzMl90ICopIFBNQ19NSUlfUk1JSV9TRUxfQkIgPSBTWVNDRkdfRVRIX01lZGlhSW50ZXJmYWNlOyANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgSS9PIENvbXBlbnNhdGlvbiBDZWxsLg0KKyAgKiBAbm90ZSAgIFRoZSBJL08gY29tcGVuc2F0aW9uIGNlbGwgY2FuIGJlIHVzZWQgb25seSB3aGVuIHRoZSBkZXZpY2Ugc3VwcGx5DQorICAqICAgICAgICAgdm9sdGFnZSByYW5nZXMgZnJvbSAyLjQgdG8gMy42IFYuICANCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBJL08gQ29tcGVuc2F0aW9uIENlbGwuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBFTkFCTEU6IEkvTyBjb21wZW5zYXRpb24gY2VsbCBlbmFibGVkICANCisgICogICAgICAgICAgICBAYXJnIERJU0FCTEU6IEkvTyBjb21wZW5zYXRpb24gY2VsbCBwb3dlci1kb3duIG1vZGUgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTWVNDRkdfQ29tcGVuc2F0aW9uQ2VsbENtZChGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICAqKF9fSU8gdWludDMyX3QgKikgQ01QQ1JfQ01QX1BEX0JCID0gKHVpbnQzMl90KU5ld1N0YXRlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgSS9PIENvbXBlbnNhdGlvbiBDZWxsIHJlYWR5IGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiB0aGUgSS9PIENvbXBlbnNhdGlvbiBDZWxsIHJlYWR5IGZsYWcgKFNFVCBvciBSRVNFVCkNCisgICovDQorRmxhZ1N0YXR1cyBTWVNDRkdfR2V0Q29tcGVuc2F0aW9uQ2VsbFN0YXR1cyh2b2lkKQ0KK3sNCisgIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQorICAgIA0KKyAgaWYgKChTWVNDRkctPkNNUENSICYgU1lTQ0ZHX0NNUENSX1JFQURZICkgIT0gKHVpbnQzMl90KVJFU0VUKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8gICANCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X3RpbS5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF90aW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY2ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF90aW0uYwpAQCAtMCwwICsxLDMzNTggQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF90aW0uYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBUSU0gcGVyaXBoZXJhbDoNCisgICogICAgICAgICAgICAtIFRpbWVCYXNlIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgICAtIE91dHB1dCBDb21wYXJlIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgICAtIElucHV0IENhcHR1cmUgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgIC0gQWR2YW5jZWQtY29udHJvbCB0aW1lcnMgKFRJTTEgYW5kIFRJTTgpIHNwZWNpZmljIGZlYXR1cmVzICANCisgICogICAgICAgICAgICAtIEludGVycnVwdHMsIERNQSBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgIC0gQ2xvY2tzIG1hbmFnZW1lbnQNCisgICogICAgICAgICAgICAtIFN5bmNocm9uaXphdGlvbiBtYW5hZ2VtZW50DQorICAqICAgICAgICAgICAgLSBTcGVjaWZpYyBpbnRlcmZhY2UgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgIC0gU3BlY2lmaWMgcmVtYXBwaW5nIG1hbmFnZW1lbnQgICAgICANCisgICogICAgICAgICAgICAgIA0KKyAgKiAgQHZlcmJhdGltDQorICAqICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBkcml2ZXINCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBmdW5jdGlvbnMgdG8gY29uZmlndXJlIGFuZCBwcm9ncmFtIHRoZSBUSU0gDQorICAqICAgICAgICAgIG9mIGFsbCBTVE0zMkYyeHggZGV2aWNlcy4NCisgICogICAgICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBzcGxpdCBpbiA5IGdyb3VwczogDQorICAqICAgDQorICAqICAgICAgICAgIDEuIFRJTSBUaW1lQmFzZSBtYW5hZ2VtZW50OiB0aGlzIGdyb3VwIGluY2x1ZGVzIGFsbCBuZWVkZWQgZnVuY3Rpb25zIA0KKyAgKiAgICAgICAgICAgICB0byBjb25maWd1cmUgdGhlIFRNIFRpbWViYXNlIHVuaXQ6DQorICAqICAgICAgICAgICAgICAgICAgIC0gU2V0L0dldCBQcmVzY2FsZXINCisgICogICAgICAgICAgICAgICAgICAgLSBTZXQvR2V0IEF1dG9yZWxvYWQgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENvdW50ZXIgbW9kZXMgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNldCBDbG9jayBkaXZpc2lvbiAgDQorICAqICAgICAgICAgICAgICAgICAgIC0gU2VsZWN0IHRoZSBPbmUgUHVsc2UgbW9kZQ0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFVwZGF0ZSBSZXF1ZXN0IENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgICAgICAgICAgLSBVcGRhdGUgRGlzYWJsZSBDb25maWd1cmF0aW9uDQorICAqICAgICAgICAgICAgICAgICAgIC0gQXV0by1QcmVsb2FkIENvbmZpZ3VyYXRpb24gDQorICAqICAgICAgICAgICAgICAgICAgIC0gRW5hYmxlL0Rpc2FibGUgdGhlIGNvdW50ZXIgICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDIuIFRJTSBPdXRwdXQgQ29tcGFyZSBtYW5hZ2VtZW50OiB0aGlzIGdyb3VwIGluY2x1ZGVzIGFsbCBuZWVkZWQgDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9ucyB0byBjb25maWd1cmUgdGhlIENhcHR1cmUvQ29tcGFyZSB1bml0IHVzZWQgaW4gT3V0cHV0IA0KKyAgKiAgICAgICAgICAgICBjb21wYXJlIG1vZGU6IA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZSBlYWNoIGNoYW5uZWwsIGluZGVwZW5kZW50bHksIGluIE91dHB1dCBDb21wYXJlIG1vZGUNCisgICogICAgICAgICAgICAgICAgICAgLSBTZWxlY3QgdGhlIG91dHB1dCBjb21wYXJlIG1vZGVzDQorICAqICAgICAgICAgICAgICAgICAgIC0gU2VsZWN0IHRoZSBQb2xhcml0aWVzIG9mIGVhY2ggY2hhbm5lbA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNldC9HZXQgdGhlIENhcHR1cmUvQ29tcGFyZSByZWdpc3RlciB2YWx1ZXMNCisgICogICAgICAgICAgICAgICAgICAgLSBTZWxlY3QgdGhlIE91dHB1dCBDb21wYXJlIEZhc3QgbW9kZSANCisgICogICAgICAgICAgICAgICAgICAgLSBTZWxlY3QgdGhlIE91dHB1dCBDb21wYXJlIEZvcmNlZCBtb2RlICANCisgICogICAgICAgICAgICAgICAgICAgLSBPdXRwdXQgQ29tcGFyZS1QcmVsb2FkIENvbmZpZ3VyYXRpb24gDQorICAqICAgICAgICAgICAgICAgICAgIC0gQ2xlYXIgT3V0cHV0IENvbXBhcmUgUmVmZXJlbmNlDQorICAqICAgICAgICAgICAgICAgICAgIC0gU2VsZWN0IHRoZSBPQ1JFRiBDbGVhciBzaWduYWwNCisgICogICAgICAgICAgICAgICAgICAgLSBFbmFibGUvRGlzYWJsZSB0aGUgQ2FwdHVyZS9Db21wYXJlIENoYW5uZWxzICAgIA0KKyAgKiAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgMy4gVElNIElucHV0IENhcHR1cmUgbWFuYWdlbWVudDogdGhpcyBncm91cCBpbmNsdWRlcyBhbGwgbmVlZGVkIA0KKyAgKiAgICAgICAgICAgICBmdW5jdGlvbnMgdG8gY29uZmlndXJlIHRoZSBDYXB0dXJlL0NvbXBhcmUgdW5pdCB1c2VkIGluIA0KKyAgKiAgICAgICAgICAgICBJbnB1dCBDYXB0dXJlIG1vZGU6DQorICAqICAgICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIGVhY2ggY2hhbm5lbCBpbiBpbnB1dCBjYXB0dXJlIG1vZGUNCisgICogICAgICAgICAgICAgICAgICAgLSBDb25maWd1cmUgQ2hhbm5lbDEvMiBpbiBQV00gSW5wdXQgbW9kZQ0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNldCB0aGUgSW5wdXQgQ2FwdHVyZSBQcmVzY2FsZXINCisgICogICAgICAgICAgICAgICAgICAgLSBHZXQgdGhlIENhcHR1cmUvQ29tcGFyZSB2YWx1ZXMgICAgICANCisgICogICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDQuIEFkdmFuY2VkLWNvbnRyb2wgdGltZXJzIChUSU0xIGFuZCBUSU04KSBzcGVjaWZpYyBmZWF0dXJlcw0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENvbmZpZ3VyZXMgdGhlIEJyZWFrIGlucHV0LCBkZWFkIHRpbWUsIExvY2sgbGV2ZWwsIHRoZSBPU1NJLA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgT1NTUiBTdGF0ZSBhbmQgdGhlIEFPRShhdXRvbWF0aWMgb3V0cHV0IGVuYWJsZSkNCisgICogICAgICAgICAgICAgICAgICAgLSBFbmFibGUvRGlzYWJsZSB0aGUgVElNIHBlcmlwaGVyYWwgTWFpbiBPdXRwdXRzDQorICAqICAgICAgICAgICAgICAgICAgIC0gU2VsZWN0IHRoZSBDb21tdXRhdGlvbiBldmVudA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNldC9SZXNldCB0aGUgQ2FwdHVyZSBDb21wYXJlIFByZWxvYWQgQ29udHJvbCBiaXQNCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgNS4gVElNIGludGVycnVwdHMsIERNQSBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIEVuYWJsZS9EaXNhYmxlIGludGVycnVwdCBzb3VyY2VzDQorICAqICAgICAgICAgICAgICAgICAgIC0gR2V0IGZsYWdzIHN0YXR1cw0KKyAgKiAgICAgICAgICAgICAgICAgICAtIENsZWFyIGZsYWdzLyBQZW5kaW5nIGJpdHMNCisgICogICAgICAgICAgICAgICAgICAgLSBFbmFibGUvRGlzYWJsZSBETUEgcmVxdWVzdHMgDQorICAqICAgICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIERNQSBidXJzdCBtb2RlDQorICAqICAgICAgICAgICAgICAgICAgIC0gU2VsZWN0IENhcHR1cmVDb21wYXJlIERNQSByZXF1ZXN0ICANCisgICogICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA2LiBUSU0gY2xvY2tzIG1hbmFnZW1lbnQ6IHRoaXMgZ3JvdXAgaW5jbHVkZXMgYWxsIG5lZWRlZCBmdW5jdGlvbnMgDQorICAqICAgICAgICAgICAgIHRvIGNvbmZpZ3VyZSB0aGUgY2xvY2sgY29udHJvbGxlciB1bml0Og0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNlbGVjdCBpbnRlcm5hbC9FeHRlcm5hbCBjbG9jaw0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNlbGVjdCB0aGUgZXh0ZXJuYWwgY2xvY2sgbW9kZTogRVRSKE1vZGUxL01vZGUyKSwgVEl4IG9yIElUUngNCisgICogICAgICAgICANCisgICogICAgICAgICAgNy4gVElNIHN5bmNocm9uaXphdGlvbiBtYW5hZ2VtZW50OiB0aGlzIGdyb3VwIGluY2x1ZGVzIGFsbCBuZWVkZWQgDQorICAqICAgICAgICAgICAgIGZ1bmN0aW9ucyB0byBjb25maWd1cmUgdGhlIFN5bmNocm9uaXphdGlvbiB1bml0Og0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNlbGVjdCBJbnB1dCBUcmlnZ2VyICANCisgICogICAgICAgICAgICAgICAgICAgLSBTZWxlY3QgT3V0cHV0IFRyaWdnZXIgIA0KKyAgKiAgICAgICAgICAgICAgICAgICAtIFNlbGVjdCBNYXN0ZXIgU2xhdmUgTW9kZSANCisgICogICAgICAgICAgICAgICAgICAgLSBFVFIgQ29uZmlndXJhdGlvbiB3aGVuIHVzZWQgYXMgZXh0ZXJuYWwgdHJpZ2dlciAgIA0KKyAgKiAgICAgDQorICAqICAgICAgICAgIDguIFRJTSBzcGVjaWZpYyBpbnRlcmZhY2UgbWFuYWdlbWVudCwgdGhpcyBncm91cCBpbmNsdWRlcyBhbGwgDQorICAqICAgICAgICAgICAgIG5lZWRlZCBmdW5jdGlvbnMgdG8gdXNlIHRoZSBzcGVjaWZpYyBUSU0gaW50ZXJmYWNlOg0KKyAgKiAgICAgICAgICAgICAgICAgICAtIEVuY29kZXIgSW50ZXJmYWNlIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgICAgICAgICAgLSBTZWxlY3QgSGFsbCBTZW5zb3IgICANCisgICogICAgICAgICANCisgICogICAgICAgICAgOS4gVElNIHNwZWNpZmljIHJlbWFwcGluZyBtYW5hZ2VtZW50IGluY2x1ZGVzIHRoZSBSZW1hcHBpbmcgDQorICAqICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb2Ygc3BlY2lmaWMgdGltZXJzICAgICAgICAgICAgICAgDQorICAqICAgDQorICAqICBAZW5kdmVyYmF0aW0NCisgICogICAgDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICogQGF0dGVudGlvbg0KKyAgKg0KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUIDIwMTIgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCisgICoNCisgICogTGljZW5zZWQgdW5kZXIgTUNELVNUIExpYmVydHkgU1cgTGljZW5zZSBBZ3JlZW1lbnQgVjIsICh0aGUgIkxpY2Vuc2UiKTsNCisgICogWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6DQorICAqDQorICAqICAgICAgICBodHRwOi8vd3d3LnN0LmNvbS9zb2Z0d2FyZV9saWNlbnNlX2FncmVlbWVudF9saWJlcnR5X3YyDQorICAqDQorICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgDQorICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICoNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKi8NCisNCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlICJzdG0zMmYyeHhfdGltLmgiDQorI2luY2x1ZGUgInN0bTMyZjJ4eF9yY2MuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXINCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBUSU0gDQorICAqIEBicmllZiBUSU0gZHJpdmVyIG1vZHVsZXMNCisgICogQHsNCisgICovDQorDQorLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVElNIHJlZ2lzdGVycyBiaXQgbWFzayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCisjZGVmaW5lIFNNQ1JfRVRSX01BU0sgICAgICAoKHVpbnQxNl90KTB4MDBGRikgDQorI2RlZmluZSBDQ01SX09GRlNFVCAgICAgICAgKCh1aW50MTZfdCkweDAwMTgpDQorI2RlZmluZSBDQ0VSX0NDRV9TRVQgICAgICAgKCh1aW50MTZfdCkweDAwMDEpICANCisjZGVmaW5lCUNDRVJfQ0NORV9TRVQgICAgICAoKHVpbnQxNl90KTB4MDAwNCkgDQorI2RlZmluZSBDQ01SX09DMTNNX01BU0sgICAgKCh1aW50MTZfdCkweEZGOEYpDQorI2RlZmluZSBDQ01SX09DMjRNX01BU0sgICAgKCh1aW50MTZfdCkweDhGRkYpIA0KKw0KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KK3N0YXRpYyB2b2lkIFRJMV9Db25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MTZfdCBUSU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNGaWx0ZXIpOw0KK3N0YXRpYyB2b2lkIFRJMl9Db25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MTZfdCBUSU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNGaWx0ZXIpOw0KK3N0YXRpYyB2b2lkIFRJM19Db25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MTZfdCBUSU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNGaWx0ZXIpOw0KK3N0YXRpYyB2b2lkIFRJNF9Db25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MTZfdCBUSU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNGaWx0ZXIpOw0KKw0KKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyoqIEBkZWZncm91cCBUSU1fUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBUSU1fR3JvdXAxIFRpbWVCYXNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgIFRpbWVCYXNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgIFRpbWVCYXNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgDQorICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICANCisgICAgICAgICAgICAgIFRJTSBEcml2ZXI6IGhvdyB0byB1c2UgaXQgaW4gVGltaW5nKFRpbWUgYmFzZSkgTW9kZQ0KKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgICAgICBUbyB1c2UgdGhlIFRpbWVyIGluIFRpbWluZyhUaW1lIGJhc2UpIG1vZGUsIHRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIG1hbmRhdG9yeToNCisgICAgICAgDQorICAgICAgIDEuIEVuYWJsZSBUSU0gY2xvY2sgdXNpbmcgUkNDX0FQQnhQZXJpcGhDbG9ja0NtZChSQ0NfQVBCeFBlcmlwaF9USU14LCBFTkFCTEUpIGZ1bmN0aW9uDQorICAgICAgICAgICAgICAgICAgICANCisgICAgICAgMi4gRmlsbCB0aGUgVElNX1RpbWVCYXNlSW5pdFN0cnVjdCB3aXRoIHRoZSBkZXNpcmVkIHBhcmFtZXRlcnMuDQorICAgICAgIA0KKyAgICAgICAzLiBDYWxsIFRJTV9UaW1lQmFzZUluaXQoVElNeCwgJlRJTV9UaW1lQmFzZUluaXRTdHJ1Y3QpIHRvIGNvbmZpZ3VyZSB0aGUgVGltZSBCYXNlIHVuaXQNCisgICAgICAgICAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uDQorICAgICAgICAgIA0KKyAgICAgICA0LiBFbmFibGUgdGhlIE5WSUMgaWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHVwZGF0ZSBpbnRlcnJ1cHQuIA0KKyAgICAgICAgICANCisgICAgICAgNS4gRW5hYmxlIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCB1c2luZyB0aGUgZnVuY3Rpb24gVElNX0lUQ29uZmlnKFRJTXgsIFRJTV9JVF9VcGRhdGUpIA0KKyAgICAgICANCisgICAgICAgNi4gQ2FsbCB0aGUgVElNX0NtZChFTkFCTEUpIGZ1bmN0aW9uIHRvIGVuYWJsZSB0aGUgVElNIGNvdW50ZXIuDQorICAgICAgICAgICAgIA0KKyAgICAgICBOb3RlMTogQWxsIG90aGVyIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBzZXBhcmF0ZWx5IHRvIG1vZGlmeSwgaWYgbmVlZGVkLA0KKyAgICAgICAgICBhIHNwZWNpZmljIGZlYXR1cmUgb2YgdGhlIFRpbWVyLiANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBUSU14IHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorDQorICAqLw0KK3ZvaWQgVElNX0RlSW5pdChUSU1fVHlwZURlZiogVElNeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BTExfUEVSSVBIKFRJTXgpKTsgDQorIA0KKyAgaWYgKFRJTXggPT0gVElNMSkNCisgIHsNCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU0xLCBFTkFCTEUpOw0KKyAgICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1RJTTEsIERJU0FCTEUpOyAgDQorICB9IA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU0yKSANCisgIHsgICAgIA0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1RJTTIsIEVOQUJMRSk7DQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVElNMiwgRElTQUJMRSk7DQorICB9ICANCisgIGVsc2UgaWYgKFRJTXggPT0gVElNMykNCisgIHsgDQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVElNMywgRU5BQkxFKTsNCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU0zLCBESVNBQkxFKTsNCisgIH0gIA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU00KQ0KKyAgeyANCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU00LCBFTkFCTEUpOw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1RJTTQsIERJU0FCTEUpOw0KKyAgfSAgDQorICBlbHNlIGlmIChUSU14ID09IFRJTTUpDQorICB7ICAgICAgDQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVElNNSwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU01LCBESVNBQkxFKTsNCisgIH0gIA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU02KSAgDQorICB7ICAgIA0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1RJTTYsIEVOQUJMRSk7DQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVElNNiwgRElTQUJMRSk7DQorICB9ICANCisgIGVsc2UgaWYgKFRJTXggPT0gVElNNykNCisgIHsgICAgICANCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU03LCBFTkFCTEUpOw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1RJTTcsIERJU0FCTEUpOw0KKyAgfSAgDQorICBlbHNlIGlmIChUSU14ID09IFRJTTgpDQorICB7ICAgICAgDQorICAgIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjJQZXJpcGhfVElNOCwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU04LCBESVNBQkxFKTsgIA0KKyAgfSAgDQorICBlbHNlIGlmIChUSU14ID09IFRJTTkpDQorICB7ICAgICAgDQorICAgIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjJQZXJpcGhfVElNOSwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU05LCBESVNBQkxFKTsgIA0KKyAgIH0gIA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMCkNCisgIHsgICAgICANCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU0xMCwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU0xMCwgRElTQUJMRSk7ICANCisgIH0gIA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMSkgDQorICB7ICAgICANCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU0xMSwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjJQZXJpcGhSZXNldENtZChSQ0NfQVBCMlBlcmlwaF9USU0xMSwgRElTQUJMRSk7ICANCisgIH0gIA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMikNCisgIHsgICAgICANCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU0xMiwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU0xMiwgRElTQUJMRSk7ICANCisgIH0gIA0KKyAgZWxzZSBpZiAoVElNeCA9PSBUSU0xMykgDQorICB7ICAgICAgIA0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1RJTTEzLCBFTkFCTEUpOw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1RJTTEzLCBESVNBQkxFKTsgIA0KKyAgfSAgDQorICBlbHNlDQorICB7IA0KKyAgICBpZiAoVElNeCA9PSBUSU0xNCkgDQorICAgIHsgICAgIA0KKyAgICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVElNMTQsIEVOQUJMRSk7DQorICAgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9USU0xNCwgRElTQUJMRSk7IA0KKyAgICB9ICAgDQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBUSU14IFRpbWUgQmFzZSBVbml0IHBlcmlwaGVyYWwgYWNjb3JkaW5nIHRvIA0KKyAgKiAgICAgICAgIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycyBpbiB0aGUgVElNX1RpbWVCYXNlSW5pdFN0cnVjdC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSB0byAxNCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9UaW1lQmFzZUluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBUSU1fVGltZUJhc2VJbml0VHlwZURlZiBzdHJ1Y3R1cmUNCisgICogICAgICAgICB0aGF0IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fVGltZUJhc2VJbml0KFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fVGltZUJhc2VJbml0VHlwZURlZiogVElNX1RpbWVCYXNlSW5pdFN0cnVjdCkNCit7DQorICB1aW50MTZfdCB0bXBjcjEgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoVElNX1RpbWVCYXNlSW5pdFN0cnVjdC0+VElNX0NvdW50ZXJNb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0NLRF9ESVYoVElNX1RpbWVCYXNlSW5pdFN0cnVjdC0+VElNX0Nsb2NrRGl2aXNpb24pKTsNCisNCisgIHRtcGNyMSA9IFRJTXgtPkNSMTsgIA0KKw0KKyAgaWYoKFRJTXggPT0gVElNMSkgfHwgKFRJTXggPT0gVElNOCl8fA0KKyAgICAgKFRJTXggPT0gVElNMikgfHwgKFRJTXggPT0gVElNMyl8fA0KKyAgICAgKFRJTXggPT0gVElNNCkgfHwgKFRJTXggPT0gVElNNSkpIA0KKyAgew0KKyAgICAvKiBTZWxlY3QgdGhlIENvdW50ZXIgTW9kZSAqLw0KKyAgICB0bXBjcjEgJj0gKHVpbnQxNl90KSh+KFRJTV9DUjFfRElSIHwgVElNX0NSMV9DTVMpKTsNCisgICAgdG1wY3IxIHw9ICh1aW50MzJfdClUSU1fVGltZUJhc2VJbml0U3RydWN0LT5USU1fQ291bnRlck1vZGU7DQorICB9DQorIA0KKyAgaWYoKFRJTXggIT0gVElNNikgJiYgKFRJTXggIT0gVElNNykpDQorICB7DQorICAgIC8qIFNldCB0aGUgY2xvY2sgZGl2aXNpb24gKi8NCisgICAgdG1wY3IxICY9ICAodWludDE2X3QpKH5USU1fQ1IxX0NLRCk7DQorICAgIHRtcGNyMSB8PSAodWludDMyX3QpVElNX1RpbWVCYXNlSW5pdFN0cnVjdC0+VElNX0Nsb2NrRGl2aXNpb247DQorICB9DQorDQorICBUSU14LT5DUjEgPSB0bXBjcjE7DQorDQorICAvKiBTZXQgdGhlIEF1dG9yZWxvYWQgdmFsdWUgKi8NCisgIFRJTXgtPkFSUiA9IFRJTV9UaW1lQmFzZUluaXRTdHJ1Y3QtPlRJTV9QZXJpb2QgOw0KKyANCisgIC8qIFNldCB0aGUgUHJlc2NhbGVyIHZhbHVlICovDQorICBUSU14LT5QU0MgPSBUSU1fVGltZUJhc2VJbml0U3RydWN0LT5USU1fUHJlc2NhbGVyOw0KKyAgICANCisgIGlmICgoVElNeCA9PSBUSU0xKSB8fCAoVElNeCA9PSBUSU04KSkgIA0KKyAgew0KKyAgICAvKiBTZXQgdGhlIFJlcGV0aXRpb24gQ291bnRlciB2YWx1ZSAqLw0KKyAgICBUSU14LT5SQ1IgPSBUSU1fVGltZUJhc2VJbml0U3RydWN0LT5USU1fUmVwZXRpdGlvbkNvdW50ZXI7DQorICB9DQorDQorICAvKiBHZW5lcmF0ZSBhbiB1cGRhdGUgZXZlbnQgdG8gcmVsb2FkIHRoZSBQcmVzY2FsZXIgDQorICAgICBhbmQgdGhlIHJlcGV0aXRpb24gY291bnRlcihvbmx5IGZvciBUSU0xIGFuZCBUSU04KSB2YWx1ZSBpbW1lZGlhdGx5ICovDQorICBUSU14LT5FR1IgPSBUSU1fUFNDUmVsb2FkTW9kZV9JbW1lZGlhdGU7ICAgICAgICAgIA0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFRJTV9UaW1lQmFzZUluaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgVElNX1RpbWVCYXNlSW5pdFN0cnVjdCA6IHBvaW50ZXIgdG8gYSBUSU1fVGltZUJhc2VJbml0VHlwZURlZg0KKyAgKiAgICAgICAgIHN0cnVjdHVyZSB3aGljaCB3aWxsIGJlIGluaXRpYWxpemVkLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fVGltZUJhc2VTdHJ1Y3RJbml0KFRJTV9UaW1lQmFzZUluaXRUeXBlRGVmKiBUSU1fVGltZUJhc2VJbml0U3RydWN0KQ0KK3sNCisgIC8qIFNldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovDQorICBUSU1fVGltZUJhc2VJbml0U3RydWN0LT5USU1fUGVyaW9kID0gMHhGRkZGRkZGRjsNCisgIFRJTV9UaW1lQmFzZUluaXRTdHJ1Y3QtPlRJTV9QcmVzY2FsZXIgPSAweDAwMDA7DQorICBUSU1fVGltZUJhc2VJbml0U3RydWN0LT5USU1fQ2xvY2tEaXZpc2lvbiA9IFRJTV9DS0RfRElWMTsNCisgIFRJTV9UaW1lQmFzZUluaXRTdHJ1Y3QtPlRJTV9Db3VudGVyTW9kZSA9IFRJTV9Db3VudGVyTW9kZV9VcDsNCisgIFRJTV9UaW1lQmFzZUluaXRTdHJ1Y3QtPlRJTV9SZXBldGl0aW9uQ291bnRlciA9IDB4MDAwMDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgVElNeCBQcmVzY2FsZXIuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBQcmVzY2FsZXI6IHNwZWNpZmllcyB0aGUgUHJlc2NhbGVyIFJlZ2lzdGVyIHZhbHVlDQorICAqIEBwYXJhbSAgVElNX1BTQ1JlbG9hZE1vZGU6IHNwZWNpZmllcyB0aGUgVElNIFByZXNjYWxlciBSZWxvYWQgbW9kZQ0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1BTQ1JlbG9hZE1vZGVfVXBkYXRlOiBUaGUgUHJlc2NhbGVyIGlzIGxvYWRlZCBhdCB0aGUgdXBkYXRlIGV2ZW50Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1BTQ1JlbG9hZE1vZGVfSW1tZWRpYXRlOiBUaGUgUHJlc2NhbGVyIGlzIGxvYWRlZCBpbW1lZGlhdGx5Lg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fUHJlc2NhbGVyQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBQcmVzY2FsZXIsIHVpbnQxNl90IFRJTV9QU0NSZWxvYWRNb2RlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0FMTF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QUkVTQ0FMRVJfUkVMT0FEKFRJTV9QU0NSZWxvYWRNb2RlKSk7DQorICAvKiBTZXQgdGhlIFByZXNjYWxlciB2YWx1ZSAqLw0KKyAgVElNeC0+UFNDID0gUHJlc2NhbGVyOw0KKyAgLyogU2V0IG9yIHJlc2V0IHRoZSBVRyBCaXQgKi8NCisgIFRJTXgtPkVHUiA9IFRJTV9QU0NSZWxvYWRNb2RlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTcGVjaWZpZXMgdGhlIFRJTXggQ291bnRlciBNb2RlIHRvIGJlIHVzZWQuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9Db3VudGVyTW9kZTogc3BlY2lmaWVzIHRoZSBDb3VudGVyIE1vZGUgdG8gYmUgdXNlZA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NvdW50ZXJNb2RlX1VwOiBUSU0gVXAgQ291bnRpbmcgTW9kZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NvdW50ZXJNb2RlX0Rvd246IFRJTSBEb3duIENvdW50aW5nIE1vZGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9Db3VudGVyTW9kZV9DZW50ZXJBbGlnbmVkMTogVElNIENlbnRlciBBbGlnbmVkIE1vZGUxDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ291bnRlck1vZGVfQ2VudGVyQWxpZ25lZDI6IFRJTSBDZW50ZXIgQWxpZ25lZCBNb2RlMg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NvdW50ZXJNb2RlX0NlbnRlckFsaWduZWQzOiBUSU0gQ2VudGVyIEFsaWduZWQgTW9kZTMNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX0NvdW50ZXJNb2RlQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fQ291bnRlck1vZGUpDQorew0KKyAgdWludDE2X3QgdG1wY3IxID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShUSU1fQ291bnRlck1vZGUpKTsNCisNCisgIHRtcGNyMSA9IFRJTXgtPkNSMTsNCisNCisgIC8qIFJlc2V0IHRoZSBDTVMgYW5kIERJUiBCaXRzICovDQorICB0bXBjcjEgJj0gKHVpbnQxNl90KX4oVElNX0NSMV9ESVIgfCBUSU1fQ1IxX0NNUyk7DQorDQorICAvKiBTZXQgdGhlIENvdW50ZXIgTW9kZSAqLw0KKyAgdG1wY3IxIHw9IFRJTV9Db3VudGVyTW9kZTsNCisNCisgIC8qIFdyaXRlIHRvIFRJTXggQ1IxIHJlZ2lzdGVyICovDQorICBUSU14LT5DUjEgPSB0bXBjcjE7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFRJTXggQ291bnRlciBSZWdpc3RlciB2YWx1ZQ0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBDb3VudGVyOiBzcGVjaWZpZXMgdGhlIENvdW50ZXIgcmVnaXN0ZXIgbmV3IHZhbHVlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fU2V0Q291bnRlcihUSU1fVHlwZURlZiogVElNeCwgdWludDMyX3QgQ291bnRlcikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorDQorICAvKiBTZXQgdGhlIENvdW50ZXIgUmVnaXN0ZXIgdmFsdWUgKi8NCisgIFRJTXgtPkNOVCA9IENvdW50ZXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFRJTXggQXV0b3JlbG9hZCBSZWdpc3RlciB2YWx1ZQ0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBBdXRvcmVsb2FkOiBzcGVjaWZpZXMgdGhlIEF1dG9yZWxvYWQgcmVnaXN0ZXIgbmV3IHZhbHVlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fU2V0QXV0b3JlbG9hZChUSU1fVHlwZURlZiogVElNeCwgdWludDMyX3QgQXV0b3JlbG9hZCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BTExfUEVSSVBIKFRJTXgpKTsNCisgIA0KKyAgLyogU2V0IHRoZSBBdXRvcmVsb2FkIFJlZ2lzdGVyIHZhbHVlICovDQorICBUSU14LT5BUlIgPSBBdXRvcmVsb2FkOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBHZXRzIHRoZSBUSU14IENvdW50ZXIgdmFsdWUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIENvdW50ZXIgUmVnaXN0ZXIgdmFsdWUNCisgICovDQordWludDMyX3QgVElNX0dldENvdW50ZXIoVElNX1R5cGVEZWYqIFRJTXgpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorDQorICAvKiBHZXQgdGhlIENvdW50ZXIgUmVnaXN0ZXIgdmFsdWUgKi8NCisgIHJldHVybiBUSU14LT5DTlQ7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEdldHMgdGhlIFRJTXggUHJlc2NhbGVyIHZhbHVlLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBQcmVzY2FsZXIgUmVnaXN0ZXIgdmFsdWUuDQorICAqLw0KK3VpbnQxNl90IFRJTV9HZXRQcmVzY2FsZXIoVElNX1R5cGVEZWYqIFRJTXgpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorDQorICAvKiBHZXQgdGhlIFByZXNjYWxlciBSZWdpc3RlciB2YWx1ZSAqLw0KKyAgcmV0dXJuIFRJTXgtPlBTQzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBEaXNhYmxlcyB0aGUgVElNeCBVcGRhdGUgZXZlbnQuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFRJTXggVURJUyBiaXQNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1VwZGF0ZURpc2FibGVDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BTExfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogU2V0IHRoZSBVcGRhdGUgRGlzYWJsZSBCaXQgKi8NCisgICAgVElNeC0+Q1IxIHw9IFRJTV9DUjFfVURJUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogUmVzZXQgdGhlIFVwZGF0ZSBEaXNhYmxlIEJpdCAqLw0KKyAgICBUSU14LT5DUjEgJj0gKHVpbnQxNl90KX5USU1fQ1IxX1VESVM7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIFRJTXggVXBkYXRlIFJlcXVlc3QgSW50ZXJydXB0IHNvdXJjZS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX1VwZGF0ZVNvdXJjZTogc3BlY2lmaWVzIHRoZSBVcGRhdGUgc291cmNlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1VwZGF0ZVNvdXJjZV9HbG9iYWw6IFNvdXJjZSBvZiB1cGRhdGUgaXMgdGhlIGNvdW50ZXINCisgICogICAgICAgICAgICAgICAgIG92ZXJmbG93L3VuZGVyZmxvdyBvciB0aGUgc2V0dGluZyBvZiBVRyBiaXQsIG9yIGFuIHVwZGF0ZQ0KKyAgKiAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiB0aHJvdWdoIHRoZSBzbGF2ZSBtb2RlIGNvbnRyb2xsZXIuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVXBkYXRlU291cmNlX1JlZ3VsYXI6IFNvdXJjZSBvZiB1cGRhdGUgaXMgY291bnRlciBvdmVyZmxvdy91bmRlcmZsb3cuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9VcGRhdGVSZXF1ZXN0Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fVXBkYXRlU291cmNlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0FMTF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9VUERBVEVfU09VUkNFKFRJTV9VcGRhdGVTb3VyY2UpKTsNCisNCisgIGlmIChUSU1fVXBkYXRlU291cmNlICE9IFRJTV9VcGRhdGVTb3VyY2VfR2xvYmFsKQ0KKyAgew0KKyAgICAvKiBTZXQgdGhlIFVSUyBCaXQgKi8NCisgICAgVElNeC0+Q1IxIHw9IFRJTV9DUjFfVVJTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBSZXNldCB0aGUgVVJTIEJpdCAqLw0KKyAgICBUSU14LT5DUjEgJj0gKHVpbnQxNl90KX5USU1fQ1IxX1VSUzsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyBUSU14IHBlcmlwaGVyYWwgUHJlbG9hZCByZWdpc3RlciBvbiBBUlIuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFRJTXggcGVyaXBoZXJhbCBQcmVsb2FkIHJlZ2lzdGVyDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9BUlJQcmVsb2FkQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIFNldCB0aGUgQVJSIFByZWxvYWQgQml0ICovDQorICAgIFRJTXgtPkNSMSB8PSBUSU1fQ1IxX0FSUEU7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFJlc2V0IHRoZSBBUlIgUHJlbG9hZCBCaXQgKi8NCisgICAgVElNeC0+Q1IxICY9ICh1aW50MTZfdCl+VElNX0NSMV9BUlBFOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZWxlY3RzIHRoZSBUSU14J3MgT25lIFB1bHNlIE1vZGUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PUE1vZGU6IHNwZWNpZmllcyB0aGUgT1BNIE1vZGUgdG8gYmUgdXNlZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PUE1vZGVfU2luZ2xlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT1BNb2RlX1JlcGV0aXRpdmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NlbGVjdE9uZVB1bHNlTW9kZShUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09QTW9kZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BTExfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT1BNX01PREUoVElNX09QTW9kZSkpOw0KKw0KKyAgLyogUmVzZXQgdGhlIE9QTSBCaXQgKi8NCisgIFRJTXgtPkNSMSAmPSAodWludDE2X3QpflRJTV9DUjFfT1BNOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBPUE0gTW9kZSAqLw0KKyAgVElNeC0+Q1IxIHw9IFRJTV9PUE1vZGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFRJTXggQ2xvY2sgRGl2aXNpb24gdmFsdWUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCBleGNlcHQgNiBhbmQgNywgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fQ0tEOiBzcGVjaWZpZXMgdGhlIGNsb2NrIGRpdmlzaW9uIHZhbHVlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWU6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0tEX0RJVjE6IFREVFMgPSBUY2tfdGltDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0tEX0RJVjI6IFREVFMgPSAyKlRja190aW0NCisgICogICAgICAgICAgICBAYXJnIFRJTV9DS0RfRElWNDogVERUUyA9IDQqVGNrX3RpbQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fU2V0Q2xvY2tEaXZpc2lvbihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0NLRCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMV9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DS0RfRElWKFRJTV9DS0QpKTsNCisNCisgIC8qIFJlc2V0IHRoZSBDS0QgQml0cyAqLw0KKyAgVElNeC0+Q1IxICY9ICh1aW50MTZfdCkoflRJTV9DUjFfQ0tEKTsNCisNCisgIC8qIFNldCB0aGUgQ0tEIHZhbHVlICovDQorICBUSU14LT5DUjEgfD0gVElNX0NLRDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU14IHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgVElNeCBwZXJpcGhlcmFsLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ21kKFRJTV9UeXBlRGVmKiBUSU14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgVElNIENvdW50ZXIgKi8NCisgICAgVElNeC0+Q1IxIHw9IFRJTV9DUjFfQ0VOOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBUSU0gQ291bnRlciAqLw0KKyAgICBUSU14LT5DUjEgJj0gKHVpbnQxNl90KX5USU1fQ1IxX0NFTjsNCisgIH0NCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0dyb3VwMiBPdXRwdXQgQ29tcGFyZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICAgT3V0cHV0IENvbXBhcmUgbWFuYWdlbWVudCBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBDb21wYXJlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgIA0KKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgDQorICAgICAgICAgICAgICBUSU0gRHJpdmVyOiBob3cgdG8gdXNlIGl0IGluIE91dHB1dCBDb21wYXJlIE1vZGUNCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICAgICAgVG8gdXNlIHRoZSBUaW1lciBpbiBPdXRwdXQgQ29tcGFyZSBtb2RlLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSBtYW5kYXRvcnk6DQorICAgICAgIA0KKyAgICAgICAxLiBFbmFibGUgVElNIGNsb2NrIHVzaW5nIFJDQ19BUEJ4UGVyaXBoQ2xvY2tDbWQoUkNDX0FQQnhQZXJpcGhfVElNeCwgRU5BQkxFKSBmdW5jdGlvbg0KKyAgICAgICANCisgICAgICAgMi4gQ29uZmlndXJlIHRoZSBUSU0gcGlucyBieSBjb25maWd1cmluZyB0aGUgY29ycmVzcG9uZGluZyBHUElPIHBpbnMNCisgICAgICAgDQorICAgICAgIDIuIENvbmZpZ3VyZSB0aGUgVGltZSBiYXNlIHVuaXQgYXMgZGVzY3JpYmVkIGluIHRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMgZHJpdmVyLCANCisgICAgICAgICAgaWYgbmVlZGVkLCBlbHNlIHRoZSBUaW1lciB3aWxsIHJ1biB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb246DQorICAgICAgICAgIC0gQXV0b3JlbG9hZCB2YWx1ZSA9IDB4RkZGRg0KKyAgICAgICAgICAtIFByZXNjYWxlciB2YWx1ZSA9IDB4MDAwMA0KKyAgICAgICAgICAtIENvdW50ZXIgbW9kZSA9IFVwIGNvdW50aW5nDQorICAgICAgICAgIC0gQ2xvY2sgRGl2aXNpb24gPSBUSU1fQ0tEX0RJVjENCisgICAgICAgICAgDQorICAgICAgIDMuIEZpbGwgdGhlIFRJTV9PQ0luaXRTdHJ1Y3Qgd2l0aCB0aGUgZGVzaXJlZCBwYXJhbWV0ZXJzIGluY2x1ZGluZzoNCisgICAgICAgICAgLSBUaGUgVElNIE91dHB1dCBDb21wYXJlIG1vZGU6IFRJTV9PQ01vZGUNCisgICAgICAgICAgLSBUSU0gT3V0cHV0IFN0YXRlOiBUSU1fT3V0cHV0U3RhdGUNCisgICAgICAgICAgLSBUSU0gUHVsc2UgdmFsdWU6IFRJTV9QdWxzZQ0KKyAgICAgICAgICAtIFRJTSBPdXRwdXQgQ29tcGFyZSBQb2xhcml0eSA6IFRJTV9PQ1BvbGFyaXR5DQorICAgICAgIA0KKyAgICAgICA0LiBDYWxsIFRJTV9PQ3hJbml0KFRJTXgsICZUSU1fT0NJbml0U3RydWN0KSB0byBjb25maWd1cmUgdGhlIGRlc2lyZWQgY2hhbm5lbCB3aXRoIHRoZSANCisgICAgICAgICAgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uDQorICAgICAgIA0KKyAgICAgICA1LiBDYWxsIHRoZSBUSU1fQ21kKEVOQUJMRSkgZnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBUSU0gY291bnRlci4NCisgICAgICAgDQorICAgICAgIE5vdGUxOiBBbGwgb3RoZXIgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgdG8gbW9kaWZ5LCBpZiBuZWVkZWQsDQorICAgICAgICAgICAgICBhIHNwZWNpZmljIGZlYXR1cmUgb2YgdGhlIFRpbWVyLiANCisgICAgICAgICAgDQorICAgICAgIE5vdGUyOiBJbiBjYXNlIG9mIFBXTSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIG1hbmRhdG9yeToNCisgICAgICAgICAgICAgIFRJTV9PQ3hQcmVsb2FkQ29uZmlnKFRJTXgsIFRJTV9PQ1ByZWxvYWRfRU5BQkxFKTsgDQorICAgICAgICAgICAgICANCisgICAgICAgTm90ZTM6IElmIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCBvciBETUEgcmVxdWVzdCBhcmUgbmVlZGVkLCB0aGUgdXNlciBzaG91bGQ6DQorICAgICAgICAgICAgICAgIDEuIEVuYWJsZSB0aGUgTlZJQyAob3IgdGhlIERNQSkgdG8gdXNlIHRoZSBUSU0gaW50ZXJydXB0cyAob3IgRE1BIHJlcXVlc3RzKS4gDQorICAgICAgICAgICAgICAgIDIuIEVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgKG9yIERNQSByZXF1ZXN0KSB1c2luZyB0aGUgZnVuY3Rpb24gDQorICAgICAgICAgICAgICAgICAgIFRJTV9JVENvbmZpZyhUSU14LCBUSU1fSVRfQ0N4KSAob3IgVElNX0RNQV9DbWQoVElNeCwgVElNX0RNQV9DQ3gpKSAgIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgVElNeCBDaGFubmVsMSBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGluDQorICAqICAgICAgICAgdGhlIFRJTV9PQ0luaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCBleGNlcHQgNiBhbmQgNywgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fT0NJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgVElNX09DSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMNCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBUSU0gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DMUluaXQoVElNX1R5cGVEZWYqIFRJTXgsIFRJTV9PQ0luaXRUeXBlRGVmKiBUSU1fT0NJbml0U3RydWN0KQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXJ4ID0gMCwgdG1wY2NlciA9IDAsIHRtcGNyMiA9IDA7DQorICAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMV9QRVJJUEgoVElNeCkpOyANCisgIGFzc2VydF9wYXJhbShJU19USU1fT0NfTU9ERShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NNb2RlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09VVFBVVF9TVEFURShUSU1fT0NJbml0U3RydWN0LT5USU1fT3V0cHV0U3RhdGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT0NfUE9MQVJJVFkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DUG9sYXJpdHkpKTsgICANCisNCisgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMTogUmVzZXQgdGhlIENDMUUgQml0ICovDQorICBUSU14LT5DQ0VSICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MxRTsNCisgIA0KKyAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOw0KKyAgLyogR2V0IHRoZSBUSU14IENSMiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wY3IyID0gIFRJTXgtPkNSMjsNCisgIA0KKyAgLyogR2V0IHRoZSBUSU14IENDTVIxIHJlZ2lzdGVyIHZhbHVlICovDQorICB0bXBjY21yeCA9IFRJTXgtPkNDTVIxOw0KKyAgICANCisgIC8qIFJlc2V0IHRoZSBPdXRwdXQgQ29tcGFyZSBNb2RlIEJpdHMgKi8NCisgIHRtcGNjbXJ4ICY9ICh1aW50MTZfdCl+VElNX0NDTVIxX09DMU07DQorICB0bXBjY21yeCAmPSAodWludDE2X3QpflRJTV9DQ01SMV9DQzFTOw0KKyAgLyogU2VsZWN0IHRoZSBPdXRwdXQgQ29tcGFyZSBNb2RlICovDQorICB0bXBjY21yeCB8PSBUSU1fT0NJbml0U3RydWN0LT5USU1fT0NNb2RlOw0KKyAgDQorICAvKiBSZXNldCB0aGUgT3V0cHV0IFBvbGFyaXR5IGxldmVsICovDQorICB0bXBjY2VyICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MxUDsNCisgIC8qIFNldCB0aGUgT3V0cHV0IENvbXBhcmUgUG9sYXJpdHkgKi8NCisgIHRtcGNjZXIgfD0gVElNX09DSW5pdFN0cnVjdC0+VElNX09DUG9sYXJpdHk7DQorICANCisgIC8qIFNldCB0aGUgT3V0cHV0IFN0YXRlICovDQorICB0bXBjY2VyIHw9IFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PdXRwdXRTdGF0ZTsNCisgICAgDQorICBpZigoVElNeCA9PSBUSU0xKSB8fCAoVElNeCA9PSBUSU04KSkNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PVVRQVVROX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PdXRwdXROU3RhdGUpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ05fUE9MQVJJVFkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DTlBvbGFyaXR5KSk7DQorICAgIGFzc2VydF9wYXJhbShJU19USU1fT0NOSURMRV9TVEFURShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NOSWRsZVN0YXRlKSk7DQorICAgIGFzc2VydF9wYXJhbShJU19USU1fT0NJRExFX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ0lkbGVTdGF0ZSkpOw0KKyAgICANCisgICAgLyogUmVzZXQgdGhlIE91dHB1dCBOIFBvbGFyaXR5IGxldmVsICovDQorICAgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzFOUDsNCisgICAgLyogU2V0IHRoZSBPdXRwdXQgTiBQb2xhcml0eSAqLw0KKyAgICB0bXBjY2VyIHw9IFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ05Qb2xhcml0eTsNCisgICAgLyogUmVzZXQgdGhlIE91dHB1dCBOIFN0YXRlICovDQorICAgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzFORTsNCisgICAgDQorICAgIC8qIFNldCB0aGUgT3V0cHV0IE4gU3RhdGUgKi8NCisgICAgdG1wY2NlciB8PSBUSU1fT0NJbml0U3RydWN0LT5USU1fT3V0cHV0TlN0YXRlOw0KKyAgICAvKiBSZXNldCB0aGUgT3V0cHV0IENvbXBhcmUgYW5kIE91dHB1dCBDb21wYXJlIE4gSURMRSBTdGF0ZSAqLw0KKyAgICB0bXBjcjIgJj0gKHVpbnQxNl90KX5USU1fQ1IyX09JUzE7DQorICAgIHRtcGNyMiAmPSAodWludDE2X3QpflRJTV9DUjJfT0lTMU47DQorICAgIC8qIFNldCB0aGUgT3V0cHV0IElkbGUgc3RhdGUgKi8NCisgICAgdG1wY3IyIHw9IFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ0lkbGVTdGF0ZTsNCisgICAgLyogU2V0IHRoZSBPdXRwdXQgTiBJZGxlIHN0YXRlICovDQorICAgIHRtcGNyMiB8PSBUSU1fT0NJbml0U3RydWN0LT5USU1fT0NOSWRsZVN0YXRlOw0KKyAgfQ0KKyAgLyogV3JpdGUgdG8gVElNeCBDUjIgKi8NCisgIFRJTXgtPkNSMiA9IHRtcGNyMjsNCisgIA0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yeDsNCisgIA0KKyAgLyogU2V0IHRoZSBDYXB0dXJlIENvbXBhcmUgUmVnaXN0ZXIgdmFsdWUgKi8NCisgIFRJTXgtPkNDUjEgPSBUSU1fT0NJbml0U3RydWN0LT5USU1fUHVsc2U7DQorICANCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NFUiAqLw0KKyAgVElNeC0+Q0NFUiA9IHRtcGNjZXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBUSU14IENoYW5uZWwyIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMgDQorICAqICAgICAgICAgaW4gdGhlIFRJTV9PQ0luaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBUSU1fT0NJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucw0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MySW5pdChUSU1fVHlwZURlZiogVElNeCwgVElNX09DSW5pdFR5cGVEZWYqIFRJTV9PQ0luaXRTdHJ1Y3QpDQorew0KKyAgdWludDE2X3QgdG1wY2NtcnggPSAwLCB0bXBjY2VyID0gMCwgdG1wY3IyID0gMDsNCisgICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QyX1BFUklQSChUSU14KSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ19NT0RFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT1VUUFVUX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PdXRwdXRTdGF0ZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ19QT0xBUklUWShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NQb2xhcml0eSkpOyAgIA0KKw0KKyAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAyOiBSZXNldCB0aGUgQ0MyRSBCaXQgKi8NCisgIFRJTXgtPkNDRVIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzJFOw0KKyAgDQorICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLyAgDQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisgIC8qIEdldCB0aGUgVElNeCBDUjIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNyMiA9ICBUSU14LT5DUjI7DQorICANCisgIC8qIEdldCB0aGUgVElNeCBDQ01SMSByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wY2NtcnggPSBUSU14LT5DQ01SMTsNCisgICAgDQorICAvKiBSZXNldCB0aGUgT3V0cHV0IENvbXBhcmUgbW9kZSBhbmQgQ2FwdHVyZS9Db21wYXJlIHNlbGVjdGlvbiBCaXRzICovDQorICB0bXBjY21yeCAmPSAodWludDE2X3QpflRJTV9DQ01SMV9PQzJNOw0KKyAgdG1wY2NtcnggJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfQ0MyUzsNCisgIA0KKyAgLyogU2VsZWN0IHRoZSBPdXRwdXQgQ29tcGFyZSBNb2RlICovDQorICB0bXBjY21yeCB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ01vZGUgPDwgOCk7DQorICANCisgIC8qIFJlc2V0IHRoZSBPdXRwdXQgUG9sYXJpdHkgbGV2ZWwgKi8NCisgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzJQOw0KKyAgLyogU2V0IHRoZSBPdXRwdXQgQ29tcGFyZSBQb2xhcml0eSAqLw0KKyAgdG1wY2NlciB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ1BvbGFyaXR5IDw8IDQpOw0KKyAgDQorICAvKiBTZXQgdGhlIE91dHB1dCBTdGF0ZSAqLw0KKyAgdG1wY2NlciB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PdXRwdXRTdGF0ZSA8PCA0KTsNCisgICAgDQorICBpZigoVElNeCA9PSBUSU0xKSB8fCAoVElNeCA9PSBUSU04KSkNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PVVRQVVROX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PdXRwdXROU3RhdGUpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ05fUE9MQVJJVFkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DTlBvbGFyaXR5KSk7DQorICAgIGFzc2VydF9wYXJhbShJU19USU1fT0NOSURMRV9TVEFURShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NOSWRsZVN0YXRlKSk7DQorICAgIGFzc2VydF9wYXJhbShJU19USU1fT0NJRExFX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ0lkbGVTdGF0ZSkpOw0KKyAgICANCisgICAgLyogUmVzZXQgdGhlIE91dHB1dCBOIFBvbGFyaXR5IGxldmVsICovDQorICAgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzJOUDsNCisgICAgLyogU2V0IHRoZSBPdXRwdXQgTiBQb2xhcml0eSAqLw0KKyAgICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DTlBvbGFyaXR5IDw8IDQpOw0KKyAgICAvKiBSZXNldCB0aGUgT3V0cHV0IE4gU3RhdGUgKi8NCisgICAgdG1wY2NlciAmPSAodWludDE2X3QpflRJTV9DQ0VSX0NDMk5FOw0KKyAgICANCisgICAgLyogU2V0IHRoZSBPdXRwdXQgTiBTdGF0ZSAqLw0KKyAgICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX09DSW5pdFN0cnVjdC0+VElNX091dHB1dE5TdGF0ZSA8PCA0KTsNCisgICAgLyogUmVzZXQgdGhlIE91dHB1dCBDb21wYXJlIGFuZCBPdXRwdXQgQ29tcGFyZSBOIElETEUgU3RhdGUgKi8NCisgICAgdG1wY3IyICY9ICh1aW50MTZfdCl+VElNX0NSMl9PSVMyOw0KKyAgICB0bXBjcjIgJj0gKHVpbnQxNl90KX5USU1fQ1IyX09JUzJOOw0KKyAgICAvKiBTZXQgdGhlIE91dHB1dCBJZGxlIHN0YXRlICovDQorICAgIHRtcGNyMiB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ0lkbGVTdGF0ZSA8PCAyKTsNCisgICAgLyogU2V0IHRoZSBPdXRwdXQgTiBJZGxlIHN0YXRlICovDQorICAgIHRtcGNyMiB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ05JZGxlU3RhdGUgPDwgMik7DQorICB9DQorICAvKiBXcml0ZSB0byBUSU14IENSMiAqLw0KKyAgVElNeC0+Q1IyID0gdG1wY3IyOw0KKyAgDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIxICovDQorICBUSU14LT5DQ01SMSA9IHRtcGNjbXJ4Ow0KKyAgDQorICAvKiBTZXQgdGhlIENhcHR1cmUgQ29tcGFyZSBSZWdpc3RlciB2YWx1ZSAqLw0KKyAgVElNeC0+Q0NSMiA9IFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9QdWxzZTsNCisgIA0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ0VSICovDQorICBUSU14LT5DQ0VSID0gdG1wY2NlcjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFRJTXggQ2hhbm5lbDMgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycw0KKyAgKiAgICAgICAgIGluIHRoZSBUSU1fT0NJbml0U3RydWN0Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBUSU1fT0NJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucw0KKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MzSW5pdChUSU1fVHlwZURlZiogVElNeCwgVElNX09DSW5pdFR5cGVEZWYqIFRJTV9PQ0luaXRTdHJ1Y3QpDQorew0KKyAgdWludDE2X3QgdG1wY2NtcnggPSAwLCB0bXBjY2VyID0gMCwgdG1wY3IyID0gMDsNCisgICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ19NT0RFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT1VUUFVUX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PdXRwdXRTdGF0ZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ19QT0xBUklUWShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NQb2xhcml0eSkpOyAgIA0KKw0KKyAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAzOiBSZXNldCB0aGUgQ0MyRSBCaXQgKi8NCisgIFRJTXgtPkNDRVIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzNFOw0KKyAgDQorICAvKiBHZXQgdGhlIFRJTXggQ0NFUiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7DQorICAvKiBHZXQgdGhlIFRJTXggQ1IyIHJlZ2lzdGVyIHZhbHVlICovDQorICB0bXBjcjIgPSAgVElNeC0+Q1IyOw0KKyAgDQorICAvKiBHZXQgdGhlIFRJTXggQ0NNUjIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNjbXJ4ID0gVElNeC0+Q0NNUjI7DQorICAgIA0KKyAgLyogUmVzZXQgdGhlIE91dHB1dCBDb21wYXJlIG1vZGUgYW5kIENhcHR1cmUvQ29tcGFyZSBzZWxlY3Rpb24gQml0cyAqLw0KKyAgdG1wY2NtcnggJj0gKHVpbnQxNl90KX5USU1fQ0NNUjJfT0MzTTsNCisgIHRtcGNjbXJ4ICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX0NDM1M7ICANCisgIC8qIFNlbGVjdCB0aGUgT3V0cHV0IENvbXBhcmUgTW9kZSAqLw0KKyAgdG1wY2NtcnggfD0gVElNX09DSW5pdFN0cnVjdC0+VElNX09DTW9kZTsNCisgIA0KKyAgLyogUmVzZXQgdGhlIE91dHB1dCBQb2xhcml0eSBsZXZlbCAqLw0KKyAgdG1wY2NlciAmPSAodWludDE2X3QpflRJTV9DQ0VSX0NDM1A7DQorICAvKiBTZXQgdGhlIE91dHB1dCBDb21wYXJlIFBvbGFyaXR5ICovDQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DUG9sYXJpdHkgPDwgOCk7DQorICANCisgIC8qIFNldCB0aGUgT3V0cHV0IFN0YXRlICovDQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX09DSW5pdFN0cnVjdC0+VElNX091dHB1dFN0YXRlIDw8IDgpOw0KKyAgICANCisgIGlmKChUSU14ID09IFRJTTEpIHx8IChUSU14ID09IFRJTTgpKQ0KKyAgew0KKyAgICBhc3NlcnRfcGFyYW0oSVNfVElNX09VVFBVVE5fU1RBVEUoVElNX09DSW5pdFN0cnVjdC0+VElNX091dHB1dE5TdGF0ZSkpOw0KKyAgICBhc3NlcnRfcGFyYW0oSVNfVElNX09DTl9QT0xBUklUWShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NOUG9sYXJpdHkpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ05JRExFX1NUQVRFKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ05JZGxlU3RhdGUpKTsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ0lETEVfU1RBVEUoVElNX09DSW5pdFN0cnVjdC0+VElNX09DSWRsZVN0YXRlKSk7DQorICAgIA0KKyAgICAvKiBSZXNldCB0aGUgT3V0cHV0IE4gUG9sYXJpdHkgbGV2ZWwgKi8NCisgICAgdG1wY2NlciAmPSAodWludDE2X3QpflRJTV9DQ0VSX0NDM05QOw0KKyAgICAvKiBTZXQgdGhlIE91dHB1dCBOIFBvbGFyaXR5ICovDQorICAgIHRtcGNjZXIgfD0gKHVpbnQxNl90KShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NOUG9sYXJpdHkgPDwgOCk7DQorICAgIC8qIFJlc2V0IHRoZSBPdXRwdXQgTiBTdGF0ZSAqLw0KKyAgICB0bXBjY2VyICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MzTkU7DQorICAgIA0KKyAgICAvKiBTZXQgdGhlIE91dHB1dCBOIFN0YXRlICovDQorICAgIHRtcGNjZXIgfD0gKHVpbnQxNl90KShUSU1fT0NJbml0U3RydWN0LT5USU1fT3V0cHV0TlN0YXRlIDw8IDgpOw0KKyAgICAvKiBSZXNldCB0aGUgT3V0cHV0IENvbXBhcmUgYW5kIE91dHB1dCBDb21wYXJlIE4gSURMRSBTdGF0ZSAqLw0KKyAgICB0bXBjcjIgJj0gKHVpbnQxNl90KX5USU1fQ1IyX09JUzM7DQorICAgIHRtcGNyMiAmPSAodWludDE2X3QpflRJTV9DUjJfT0lTM047DQorICAgIC8qIFNldCB0aGUgT3V0cHV0IElkbGUgc3RhdGUgKi8NCisgICAgdG1wY3IyIHw9ICh1aW50MTZfdCkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DSWRsZVN0YXRlIDw8IDQpOw0KKyAgICAvKiBTZXQgdGhlIE91dHB1dCBOIElkbGUgc3RhdGUgKi8NCisgICAgdG1wY3IyIHw9ICh1aW50MTZfdCkoVElNX09DSW5pdFN0cnVjdC0+VElNX09DTklkbGVTdGF0ZSA8PCA0KTsNCisgIH0NCisgIC8qIFdyaXRlIHRvIFRJTXggQ1IyICovDQorICBUSU14LT5DUjIgPSB0bXBjcjI7DQorICANCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NNUjIgKi8NCisgIFRJTXgtPkNDTVIyID0gdG1wY2Ntcng7DQorICANCisgIC8qIFNldCB0aGUgQ2FwdHVyZSBDb21wYXJlIFJlZ2lzdGVyIHZhbHVlICovDQorICBUSU14LT5DQ1IzID0gVElNX09DSW5pdFN0cnVjdC0+VElNX1B1bHNlOw0KKyAgDQorICAvKiBXcml0ZSB0byBUSU14IENDRVIgKi8NCisgIFRJTXgtPkNDRVIgPSB0bXBjY2VyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgVElNeCBDaGFubmVsNCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzDQorICAqICAgICAgICAgaW4gdGhlIFRJTV9PQ0luaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIFRJTV9PQ0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVElNIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9PQzRJbml0KFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fT0NJbml0VHlwZURlZiogVElNX09DSW5pdFN0cnVjdCkNCit7DQorICB1aW50MTZfdCB0bXBjY21yeCA9IDAsIHRtcGNjZXIgPSAwLCB0bXBjcjIgPSAwOw0KKyAgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDNfUEVSSVBIKFRJTXgpKTsgDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DX01PREUoVElNX09DSW5pdFN0cnVjdC0+VElNX09DTW9kZSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PVVRQVVRfU1RBVEUoVElNX09DSW5pdFN0cnVjdC0+VElNX091dHB1dFN0YXRlKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DX1BPTEFSSVRZKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ1BvbGFyaXR5KSk7ICAgDQorDQorICAvKiBEaXNhYmxlIHRoZSBDaGFubmVsIDQ6IFJlc2V0IHRoZSBDQzRFIEJpdCAqLw0KKyAgVElNeC0+Q0NFUiAmPSAodWludDE2X3QpflRJTV9DQ0VSX0NDNEU7DQorICANCisgIC8qIEdldCB0aGUgVElNeCBDQ0VSIHJlZ2lzdGVyIHZhbHVlICovDQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisgIC8qIEdldCB0aGUgVElNeCBDUjIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNyMiA9ICBUSU14LT5DUjI7DQorICANCisgIC8qIEdldCB0aGUgVElNeCBDQ01SMiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wY2NtcnggPSBUSU14LT5DQ01SMjsNCisgICAgDQorICAvKiBSZXNldCB0aGUgT3V0cHV0IENvbXBhcmUgbW9kZSBhbmQgQ2FwdHVyZS9Db21wYXJlIHNlbGVjdGlvbiBCaXRzICovDQorICB0bXBjY21yeCAmPSAodWludDE2X3QpflRJTV9DQ01SMl9PQzRNOw0KKyAgdG1wY2NtcnggJj0gKHVpbnQxNl90KX5USU1fQ0NNUjJfQ0M0UzsNCisgIA0KKyAgLyogU2VsZWN0IHRoZSBPdXRwdXQgQ29tcGFyZSBNb2RlICovDQorICB0bXBjY21yeCB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ01vZGUgPDwgOCk7DQorICANCisgIC8qIFJlc2V0IHRoZSBPdXRwdXQgUG9sYXJpdHkgbGV2ZWwgKi8NCisgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzRQOw0KKyAgLyogU2V0IHRoZSBPdXRwdXQgQ29tcGFyZSBQb2xhcml0eSAqLw0KKyAgdG1wY2NlciB8PSAodWludDE2X3QpKFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ1BvbGFyaXR5IDw8IDEyKTsNCisgIA0KKyAgLyogU2V0IHRoZSBPdXRwdXQgU3RhdGUgKi8NCisgIHRtcGNjZXIgfD0gKHVpbnQxNl90KShUSU1fT0NJbml0U3RydWN0LT5USU1fT3V0cHV0U3RhdGUgPDwgMTIpOw0KKyAgDQorICBpZigoVElNeCA9PSBUSU0xKSB8fCAoVElNeCA9PSBUSU04KSkNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ0lETEVfU1RBVEUoVElNX09DSW5pdFN0cnVjdC0+VElNX09DSWRsZVN0YXRlKSk7DQorICAgIC8qIFJlc2V0IHRoZSBPdXRwdXQgQ29tcGFyZSBJRExFIFN0YXRlICovDQorICAgIHRtcGNyMiAmPSh1aW50MTZfdCkgflRJTV9DUjJfT0lTNDsNCisgICAgLyogU2V0IHRoZSBPdXRwdXQgSWRsZSBzdGF0ZSAqLw0KKyAgICB0bXBjcjIgfD0gKHVpbnQxNl90KShUSU1fT0NJbml0U3RydWN0LT5USU1fT0NJZGxlU3RhdGUgPDwgNik7DQorICB9DQorICAvKiBXcml0ZSB0byBUSU14IENSMiAqLw0KKyAgVElNeC0+Q1IyID0gdG1wY3IyOw0KKyAgDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIyICovICANCisgIFRJTXgtPkNDTVIyID0gdG1wY2Ntcng7DQorICAgIA0KKyAgLyogU2V0IHRoZSBDYXB0dXJlIENvbXBhcmUgUmVnaXN0ZXIgdmFsdWUgKi8NCisgIFRJTXgtPkNDUjQgPSBUSU1fT0NJbml0U3RydWN0LT5USU1fUHVsc2U7DQorICANCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NFUiAqLw0KKyAgVElNeC0+Q0NFUiA9IHRtcGNjZXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZpbGxzIGVhY2ggVElNX09DSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBUSU1fT0NJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgVElNX09DSW5pdFR5cGVEZWYgc3RydWN0dXJlIHdoaWNoIHdpbGwNCisgICogICAgICAgICBiZSBpbml0aWFsaXplZC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DU3RydWN0SW5pdChUSU1fT0NJbml0VHlwZURlZiogVElNX09DSW5pdFN0cnVjdCkNCit7DQorICAvKiBTZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLw0KKyAgVElNX09DSW5pdFN0cnVjdC0+VElNX09DTW9kZSA9IFRJTV9PQ01vZGVfVGltaW5nOw0KKyAgVElNX09DSW5pdFN0cnVjdC0+VElNX091dHB1dFN0YXRlID0gVElNX091dHB1dFN0YXRlX0Rpc2FibGU7DQorICBUSU1fT0NJbml0U3RydWN0LT5USU1fT3V0cHV0TlN0YXRlID0gVElNX091dHB1dE5TdGF0ZV9EaXNhYmxlOw0KKyAgVElNX09DSW5pdFN0cnVjdC0+VElNX1B1bHNlID0gMHgwMDAwMDAwMDsNCisgIFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ1BvbGFyaXR5ID0gVElNX09DUG9sYXJpdHlfSGlnaDsNCisgIFRJTV9PQ0luaXRTdHJ1Y3QtPlRJTV9PQ05Qb2xhcml0eSA9IFRJTV9PQ1BvbGFyaXR5X0hpZ2g7DQorICBUSU1fT0NJbml0U3RydWN0LT5USU1fT0NJZGxlU3RhdGUgPSBUSU1fT0NJZGxlU3RhdGVfUmVzZXQ7DQorICBUSU1fT0NJbml0U3RydWN0LT5USU1fT0NOSWRsZVN0YXRlID0gVElNX09DTklkbGVTdGF0ZV9SZXNldDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgVElNIE91dHB1dCBDb21wYXJlIE1vZGUuDQorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBiZWZvcmUgY2hhbmdpbmcgdGhlIE91dHB1dA0KKyAgKiAgICAgICAgIENvbXBhcmUgTW9kZS4gSWYgbmVlZGVkLCB1c2VyIGhhcyB0byBlbmFibGUgdGhpcyBjaGFubmVsIHVzaW5nDQorICAqICAgICAgICAgVElNX0NDeENtZCgpIGFuZCBUSU1fQ0N4TkNtZCgpIGZ1bmN0aW9ucy4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IGV4Y2VwdCA2IGFuZCA3LCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9DaGFubmVsOiBzcGVjaWZpZXMgdGhlIFRJTSBDaGFubmVsDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF8xOiBUSU0gQ2hhbm5lbCAxDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF8yOiBUSU0gQ2hhbm5lbCAyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF8zOiBUSU0gQ2hhbm5lbCAzDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF80OiBUSU0gQ2hhbm5lbCA0DQorICAqIEBwYXJhbSAgVElNX09DTW9kZTogc3BlY2lmaWVzIHRoZSBUSU0gT3V0cHV0IENvbXBhcmUgTW9kZS4NCisgICogICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NNb2RlX1RpbWluZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DTW9kZV9BY3RpdmUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ01vZGVfVG9nZ2xlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NNb2RlX1BXTTENCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ01vZGVfUFdNMg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZvcmNlZEFjdGlvbl9BY3RpdmUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9Gb3JjZWRBY3Rpb25fSW5BY3RpdmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NlbGVjdE9DeE0oVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9DaGFubmVsLCB1aW50MTZfdCBUSU1fT0NNb2RlKQ0KK3sNCisgIHVpbnQzMl90IHRtcCA9IDA7DQorICB1aW50MTZfdCB0bXAxID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QxX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0NIQU5ORUwoVElNX0NoYW5uZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT0NNKFRJTV9PQ01vZGUpKTsNCisNCisgIHRtcCA9ICh1aW50MzJfdCkgVElNeDsNCisgIHRtcCArPSBDQ01SX09GRlNFVDsNCisNCisgIHRtcDEgPSBDQ0VSX0NDRV9TRVQgPDwgKHVpbnQxNl90KVRJTV9DaGFubmVsOw0KKw0KKyAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbDogUmVzZXQgdGhlIENDeEUgQml0ICovDQorICBUSU14LT5DQ0VSICY9ICh1aW50MTZfdCkgfnRtcDE7DQorDQorICBpZigoVElNX0NoYW5uZWwgPT0gVElNX0NoYW5uZWxfMSkgfHwoVElNX0NoYW5uZWwgPT0gVElNX0NoYW5uZWxfMykpDQorICB7DQorICAgIHRtcCArPSAoVElNX0NoYW5uZWw+PjEpOw0KKw0KKyAgICAvKiBSZXNldCB0aGUgT0N4TSBiaXRzIGluIHRoZSBDQ01SeCByZWdpc3RlciAqLw0KKyAgICAqKF9fSU8gdWludDMyX3QgKikgdG1wICY9IENDTVJfT0MxM01fTUFTSzsNCisgICANCisgICAgLyogQ29uZmlndXJlIHRoZSBPQ3hNIGJpdHMgaW4gdGhlIENDTVJ4IHJlZ2lzdGVyICovDQorICAgICooX19JTyB1aW50MzJfdCAqKSB0bXAgfD0gVElNX09DTW9kZTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgdG1wICs9ICh1aW50MTZfdCkoVElNX0NoYW5uZWwgLSAodWludDE2X3QpNCk+PiAodWludDE2X3QpMTsNCisNCisgICAgLyogUmVzZXQgdGhlIE9DeE0gYml0cyBpbiB0aGUgQ0NNUnggcmVnaXN0ZXIgKi8NCisgICAgKihfX0lPIHVpbnQzMl90ICopIHRtcCAmPSBDQ01SX09DMjRNX01BU0s7DQorICAgIA0KKyAgICAvKiBDb25maWd1cmUgdGhlIE9DeE0gYml0cyBpbiB0aGUgQ0NNUnggcmVnaXN0ZXIgKi8NCisgICAgKihfX0lPIHVpbnQzMl90ICopIHRtcCB8PSAodWludDE2X3QpKFRJTV9PQ01vZGUgPDwgOCk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFRJTXggQ2FwdHVyZSBDb21wYXJlMSBSZWdpc3RlciB2YWx1ZQ0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgZXhjZXB0IDYgYW5kIDcsIHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQ29tcGFyZTE6IHNwZWNpZmllcyB0aGUgQ2FwdHVyZSBDb21wYXJlMSByZWdpc3RlciBuZXcgdmFsdWUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9TZXRDb21wYXJlMShUSU1fVHlwZURlZiogVElNeCwgdWludDMyX3QgQ29tcGFyZTEpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsNCisNCisgIC8qIFNldCB0aGUgQ2FwdHVyZSBDb21wYXJlMSBSZWdpc3RlciB2YWx1ZSAqLw0KKyAgVElNeC0+Q0NSMSA9IENvbXBhcmUxOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBUSU14IENhcHR1cmUgQ29tcGFyZTIgUmVnaXN0ZXIgdmFsdWUNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1LCA4LCA5IG9yIDEyIHRvIHNlbGVjdCB0aGUgVElNIA0KKyAgKiAgICAgICAgIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgQ29tcGFyZTI6IHNwZWNpZmllcyB0aGUgQ2FwdHVyZSBDb21wYXJlMiByZWdpc3RlciBuZXcgdmFsdWUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9TZXRDb21wYXJlMihUSU1fVHlwZURlZiogVElNeCwgdWludDMyX3QgQ29tcGFyZTIpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDJfUEVSSVBIKFRJTXgpKTsNCisNCisgIC8qIFNldCB0aGUgQ2FwdHVyZSBDb21wYXJlMiBSZWdpc3RlciB2YWx1ZSAqLw0KKyAgVElNeC0+Q0NSMiA9IENvbXBhcmUyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBUSU14IENhcHR1cmUgQ29tcGFyZTMgUmVnaXN0ZXIgdmFsdWUNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBDb21wYXJlMzogc3BlY2lmaWVzIHRoZSBDYXB0dXJlIENvbXBhcmUzIHJlZ2lzdGVyIG5ldyB2YWx1ZS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NldENvbXBhcmUzKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MzJfdCBDb21wYXJlMykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKw0KKyAgLyogU2V0IHRoZSBDYXB0dXJlIENvbXBhcmUzIFJlZ2lzdGVyIHZhbHVlICovDQorICBUSU14LT5DQ1IzID0gQ29tcGFyZTM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFRJTXggQ2FwdHVyZSBDb21wYXJlNCBSZWdpc3RlciB2YWx1ZQ0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIENvbXBhcmU0OiBzcGVjaWZpZXMgdGhlIENhcHR1cmUgQ29tcGFyZTQgcmVnaXN0ZXIgbmV3IHZhbHVlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fU2V0Q29tcGFyZTQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQzMl90IENvbXBhcmU0KQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorDQorICAvKiBTZXQgdGhlIENhcHR1cmUgQ29tcGFyZTQgUmVnaXN0ZXIgdmFsdWUgKi8NCisgIFRJTXgtPkNDUjQgPSBDb21wYXJlNDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRm9yY2VzIHRoZSBUSU14IG91dHB1dCAxIHdhdmVmb3JtIHRvIGFjdGl2ZSBvciBpbmFjdGl2ZSBsZXZlbC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IGV4Y2VwdCA2IGFuZCA3LCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9Gb3JjZWRBY3Rpb246IHNwZWNpZmllcyB0aGUgZm9yY2VkIEFjdGlvbiB0byBiZSBzZXQgdG8gdGhlIG91dHB1dCB3YXZlZm9ybS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9Gb3JjZWRBY3Rpb25fQWN0aXZlOiBGb3JjZSBhY3RpdmUgbGV2ZWwgb24gT0MxUkVGDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRm9yY2VkQWN0aW9uX0luQWN0aXZlOiBGb3JjZSBpbmFjdGl2ZSBsZXZlbCBvbiBPQzFSRUYuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9Gb3JjZWRPQzFDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9Gb3JjZWRBY3Rpb24pDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjEgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fRk9SQ0VEX0FDVElPTihUSU1fRm9yY2VkQWN0aW9uKSk7DQorICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOw0KKw0KKyAgLyogUmVzZXQgdGhlIE9DMU0gQml0cyAqLw0KKyAgdG1wY2NtcjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfT0MxTTsNCisNCisgIC8qIENvbmZpZ3VyZSBUaGUgRm9yY2VkIG91dHB1dCBNb2RlICovDQorICB0bXBjY21yMSB8PSBUSU1fRm9yY2VkQWN0aW9uOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRm9yY2VzIHRoZSBUSU14IG91dHB1dCAyIHdhdmVmb3JtIHRvIGFjdGl2ZSBvciBpbmFjdGl2ZSBsZXZlbC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9Gb3JjZWRBY3Rpb246IHNwZWNpZmllcyB0aGUgZm9yY2VkIEFjdGlvbiB0byBiZSBzZXQgdG8gdGhlIG91dHB1dCB3YXZlZm9ybS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9Gb3JjZWRBY3Rpb25fQWN0aXZlOiBGb3JjZSBhY3RpdmUgbGV2ZWwgb24gT0MyUkVGDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRm9yY2VkQWN0aW9uX0luQWN0aXZlOiBGb3JjZSBpbmFjdGl2ZSBsZXZlbCBvbiBPQzJSRUYuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9Gb3JjZWRPQzJDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9Gb3JjZWRBY3Rpb24pDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjEgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDJfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fRk9SQ0VEX0FDVElPTihUSU1fRm9yY2VkQWN0aW9uKSk7DQorICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOw0KKw0KKyAgLyogUmVzZXQgdGhlIE9DMk0gQml0cyAqLw0KKyAgdG1wY2NtcjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfT0MyTTsNCisNCisgIC8qIENvbmZpZ3VyZSBUaGUgRm9yY2VkIG91dHB1dCBNb2RlICovDQorICB0bXBjY21yMSB8PSAodWludDE2X3QpKFRJTV9Gb3JjZWRBY3Rpb24gPDwgOCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIxIHJlZ2lzdGVyICovDQorICBUSU14LT5DQ01SMSA9IHRtcGNjbXIxOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGb3JjZXMgdGhlIFRJTXggb3V0cHV0IDMgd2F2ZWZvcm0gdG8gYWN0aXZlIG9yIGluYWN0aXZlIGxldmVsLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlICAxLCAyLCAzLCA0LCA1IG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fRm9yY2VkQWN0aW9uOiBzcGVjaWZpZXMgdGhlIGZvcmNlZCBBY3Rpb24gdG8gYmUgc2V0IHRvIHRoZSBvdXRwdXQgd2F2ZWZvcm0uDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRm9yY2VkQWN0aW9uX0FjdGl2ZTogRm9yY2UgYWN0aXZlIGxldmVsIG9uIE9DM1JFRg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZvcmNlZEFjdGlvbl9JbkFjdGl2ZTogRm9yY2UgaW5hY3RpdmUgbGV2ZWwgb24gT0MzUkVGLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fRm9yY2VkT0MzQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRm9yY2VkQWN0aW9uKQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXIyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0ZPUkNFRF9BQ1RJT04oVElNX0ZvcmNlZEFjdGlvbikpOw0KKw0KKyAgdG1wY2NtcjIgPSBUSU14LT5DQ01SMjsNCisNCisgIC8qIFJlc2V0IHRoZSBPQzFNIEJpdHMgKi8NCisgIHRtcGNjbXIyICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX09DM007DQorDQorICAvKiBDb25maWd1cmUgVGhlIEZvcmNlZCBvdXRwdXQgTW9kZSAqLw0KKyAgdG1wY2NtcjIgfD0gVElNX0ZvcmNlZEFjdGlvbjsNCisNCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NNUjIgcmVnaXN0ZXIgKi8NCisgIFRJTXgtPkNDTVIyID0gdG1wY2NtcjI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEZvcmNlcyB0aGUgVElNeCBvdXRwdXQgNCB3YXZlZm9ybSB0byBhY3RpdmUgb3IgaW5hY3RpdmUgbGV2ZWwuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9Gb3JjZWRBY3Rpb246IHNwZWNpZmllcyB0aGUgZm9yY2VkIEFjdGlvbiB0byBiZSBzZXQgdG8gdGhlIG91dHB1dCB3YXZlZm9ybS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9Gb3JjZWRBY3Rpb25fQWN0aXZlOiBGb3JjZSBhY3RpdmUgbGV2ZWwgb24gT0M0UkVGDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRm9yY2VkQWN0aW9uX0luQWN0aXZlOiBGb3JjZSBpbmFjdGl2ZSBsZXZlbCBvbiBPQzRSRUYuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9Gb3JjZWRPQzRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9Gb3JjZWRBY3Rpb24pDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjIgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDNfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fRk9SQ0VEX0FDVElPTihUSU1fRm9yY2VkQWN0aW9uKSk7DQorICB0bXBjY21yMiA9IFRJTXgtPkNDTVIyOw0KKw0KKyAgLyogUmVzZXQgdGhlIE9DMk0gQml0cyAqLw0KKyAgdG1wY2NtcjIgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjJfT0M0TTsNCisNCisgIC8qIENvbmZpZ3VyZSBUaGUgRm9yY2VkIG91dHB1dCBNb2RlICovDQorICB0bXBjY21yMiB8PSAodWludDE2X3QpKFRJTV9Gb3JjZWRBY3Rpb24gPDwgOCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIyIHJlZ2lzdGVyICovDQorICBUSU14LT5DQ01SMiA9IHRtcGNjbXIyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBUSU14IHBlcmlwaGVyYWwgUHJlbG9hZCByZWdpc3RlciBvbiBDQ1IxLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgZXhjZXB0IDYgYW5kIDcsIHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DUHJlbG9hZDogbmV3IHN0YXRlIG9mIHRoZSBUSU14IHBlcmlwaGVyYWwgUHJlbG9hZCByZWdpc3Rlcg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DUHJlbG9hZF9FbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1ByZWxvYWRfRGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MxUHJlbG9hZENvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DUHJlbG9hZCkNCit7DQorICB1aW50MTZfdCB0bXBjY21yMSA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMV9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ1BSRUxPQURfU1RBVEUoVElNX09DUHJlbG9hZCkpOw0KKw0KKyAgdG1wY2NtcjEgPSBUSU14LT5DQ01SMTsNCisNCisgIC8qIFJlc2V0IHRoZSBPQzFQRSBCaXQgKi8NCisgIHRtcGNjbXIxICY9ICh1aW50MTZfdCkoflRJTV9DQ01SMV9PQzFQRSk7DQorDQorICAvKiBFbmFibGUgb3IgRGlzYWJsZSB0aGUgT3V0cHV0IENvbXBhcmUgUHJlbG9hZCBmZWF0dXJlICovDQorICB0bXBjY21yMSB8PSBUSU1fT0NQcmVsb2FkOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVElNeCBwZXJpcGhlcmFsIFByZWxvYWQgcmVnaXN0ZXIgb24gQ0NSMi4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ1ByZWxvYWQ6IG5ldyBzdGF0ZSBvZiB0aGUgVElNeCBwZXJpcGhlcmFsIFByZWxvYWQgcmVnaXN0ZXINCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1ByZWxvYWRfRW5hYmxlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NQcmVsb2FkX0Rpc2FibGUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DMlByZWxvYWRDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1ByZWxvYWQpDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjEgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDJfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT0NQUkVMT0FEX1NUQVRFKFRJTV9PQ1ByZWxvYWQpKTsNCisNCisgIHRtcGNjbXIxID0gVElNeC0+Q0NNUjE7DQorDQorICAvKiBSZXNldCB0aGUgT0MyUEUgQml0ICovDQorICB0bXBjY21yMSAmPSAodWludDE2X3QpKH5USU1fQ0NNUjFfT0MyUEUpOw0KKw0KKyAgLyogRW5hYmxlIG9yIERpc2FibGUgdGhlIE91dHB1dCBDb21wYXJlIFByZWxvYWQgZmVhdHVyZSAqLw0KKyAgdG1wY2NtcjEgfD0gKHVpbnQxNl90KShUSU1fT0NQcmVsb2FkIDw8IDgpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVElNeCBwZXJpcGhlcmFsIFByZWxvYWQgcmVnaXN0ZXIgb24gQ0NSMy4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DUHJlbG9hZDogbmV3IHN0YXRlIG9mIHRoZSBUSU14IHBlcmlwaGVyYWwgUHJlbG9hZCByZWdpc3Rlcg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DUHJlbG9hZF9FbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1ByZWxvYWRfRGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MzUHJlbG9hZENvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DUHJlbG9hZCkNCit7DQorICB1aW50MTZfdCB0bXBjY21yMiA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ1BSRUxPQURfU1RBVEUoVElNX09DUHJlbG9hZCkpOw0KKw0KKyAgdG1wY2NtcjIgPSBUSU14LT5DQ01SMjsNCisNCisgIC8qIFJlc2V0IHRoZSBPQzNQRSBCaXQgKi8NCisgIHRtcGNjbXIyICY9ICh1aW50MTZfdCkoflRJTV9DQ01SMl9PQzNQRSk7DQorDQorICAvKiBFbmFibGUgb3IgRGlzYWJsZSB0aGUgT3V0cHV0IENvbXBhcmUgUHJlbG9hZCBmZWF0dXJlICovDQorICB0bXBjY21yMiB8PSBUSU1fT0NQcmVsb2FkOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMiByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjIgPSB0bXBjY21yMjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVElNeCBwZXJpcGhlcmFsIFByZWxvYWQgcmVnaXN0ZXIgb24gQ0NSNC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DUHJlbG9hZDogbmV3IHN0YXRlIG9mIHRoZSBUSU14IHBlcmlwaGVyYWwgUHJlbG9hZCByZWdpc3Rlcg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DUHJlbG9hZF9FbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1ByZWxvYWRfRGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0M0UHJlbG9hZENvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DUHJlbG9hZCkNCit7DQorICB1aW50MTZfdCB0bXBjY21yMiA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ1BSRUxPQURfU1RBVEUoVElNX09DUHJlbG9hZCkpOw0KKw0KKyAgdG1wY2NtcjIgPSBUSU14LT5DQ01SMjsNCisNCisgIC8qIFJlc2V0IHRoZSBPQzRQRSBCaXQgKi8NCisgIHRtcGNjbXIyICY9ICh1aW50MTZfdCkoflRJTV9DQ01SMl9PQzRQRSk7DQorDQorICAvKiBFbmFibGUgb3IgRGlzYWJsZSB0aGUgT3V0cHV0IENvbXBhcmUgUHJlbG9hZCBmZWF0dXJlICovDQorICB0bXBjY21yMiB8PSAodWludDE2X3QpKFRJTV9PQ1ByZWxvYWQgPDwgOCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIyIHJlZ2lzdGVyICovDQorICBUSU14LT5DQ01SMiA9IHRtcGNjbXIyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IE91dHB1dCBDb21wYXJlIDEgRmFzdCBmZWF0dXJlLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgZXhjZXB0IDYgYW5kIDcsIHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DRmFzdDogbmV3IHN0YXRlIG9mIHRoZSBPdXRwdXQgQ29tcGFyZSBGYXN0IEVuYWJsZSBCaXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NGYXN0X0VuYWJsZTogVElNIG91dHB1dCBjb21wYXJlIGZhc3QgZW5hYmxlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NGYXN0X0Rpc2FibGU6IFRJTSBvdXRwdXQgY29tcGFyZSBmYXN0IGRpc2FibGUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DMUZhc3RDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0Zhc3QpDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjEgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT0NGQVNUX1NUQVRFKFRJTV9PQ0Zhc3QpKTsNCisNCisgIC8qIEdldCB0aGUgVElNeCBDQ01SMSByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wY2NtcjEgPSBUSU14LT5DQ01SMTsNCisNCisgIC8qIFJlc2V0IHRoZSBPQzFGRSBCaXQgKi8NCisgIHRtcGNjbXIxICY9ICh1aW50MTZfdCl+VElNX0NDTVIxX09DMUZFOw0KKw0KKyAgLyogRW5hYmxlIG9yIERpc2FibGUgdGhlIE91dHB1dCBDb21wYXJlIEZhc3QgQml0ICovDQorICB0bXBjY21yMSB8PSBUSU1fT0NGYXN0Ow0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgVElNeCBPdXRwdXQgQ29tcGFyZSAyIEZhc3QgZmVhdHVyZS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ0Zhc3Q6IG5ldyBzdGF0ZSBvZiB0aGUgT3V0cHV0IENvbXBhcmUgRmFzdCBFbmFibGUgQml0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DRmFzdF9FbmFibGU6IFRJTSBvdXRwdXQgY29tcGFyZSBmYXN0IGVuYWJsZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DRmFzdF9EaXNhYmxlOiBUSU0gb3V0cHV0IGNvbXBhcmUgZmFzdCBkaXNhYmxlDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9PQzJGYXN0Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NGYXN0KQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXIxID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QyX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DRkFTVF9TVEFURShUSU1fT0NGYXN0KSk7DQorDQorICAvKiBHZXQgdGhlIFRJTXggQ0NNUjEgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNjbXIxID0gVElNeC0+Q0NNUjE7DQorDQorICAvKiBSZXNldCB0aGUgT0MyRkUgQml0ICovDQorICB0bXBjY21yMSAmPSAodWludDE2X3QpKH5USU1fQ0NNUjFfT0MyRkUpOw0KKw0KKyAgLyogRW5hYmxlIG9yIERpc2FibGUgdGhlIE91dHB1dCBDb21wYXJlIEZhc3QgQml0ICovDQorICB0bXBjY21yMSB8PSAodWludDE2X3QpKFRJTV9PQ0Zhc3QgPDwgOCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIxICovDQorICBUSU14LT5DQ01SMSA9IHRtcGNjbXIxOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IE91dHB1dCBDb21wYXJlIDMgRmFzdCBmZWF0dXJlLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlICAxLCAyLCAzLCA0LCA1IG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fT0NGYXN0OiBuZXcgc3RhdGUgb2YgdGhlIE91dHB1dCBDb21wYXJlIEZhc3QgRW5hYmxlIEJpdC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0Zhc3RfRW5hYmxlOiBUSU0gb3V0cHV0IGNvbXBhcmUgZmFzdCBlbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0Zhc3RfRGlzYWJsZTogVElNIG91dHB1dCBjb21wYXJlIGZhc3QgZGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MzRmFzdENvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DRmFzdCkNCit7DQorICB1aW50MTZfdCB0bXBjY21yMiA9IDA7DQorICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DRkFTVF9TVEFURShUSU1fT0NGYXN0KSk7DQorDQorICAvKiBHZXQgdGhlIFRJTXggQ0NNUjIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7DQorDQorICAvKiBSZXNldCB0aGUgT0MzRkUgQml0ICovDQorICB0bXBjY21yMiAmPSAodWludDE2X3QpflRJTV9DQ01SMl9PQzNGRTsNCisNCisgIC8qIEVuYWJsZSBvciBEaXNhYmxlIHRoZSBPdXRwdXQgQ29tcGFyZSBGYXN0IEJpdCAqLw0KKyAgdG1wY2NtcjIgfD0gVElNX09DRmFzdDsNCisNCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NNUjIgKi8NCisgIFRJTXgtPkNDTVIyID0gdG1wY2NtcjI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIFRJTXggT3V0cHV0IENvbXBhcmUgNCBGYXN0IGZlYXR1cmUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ0Zhc3Q6IG5ldyBzdGF0ZSBvZiB0aGUgT3V0cHV0IENvbXBhcmUgRmFzdCBFbmFibGUgQml0Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DRmFzdF9FbmFibGU6IFRJTSBvdXRwdXQgY29tcGFyZSBmYXN0IGVuYWJsZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DRmFzdF9EaXNhYmxlOiBUSU0gb3V0cHV0IGNvbXBhcmUgZmFzdCBkaXNhYmxlDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9PQzRGYXN0Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NGYXN0KQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXIyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DRkFTVF9TVEFURShUSU1fT0NGYXN0KSk7DQorDQorICAvKiBHZXQgdGhlIFRJTXggQ0NNUjIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7DQorDQorICAvKiBSZXNldCB0aGUgT0M0RkUgQml0ICovDQorICB0bXBjY21yMiAmPSAodWludDE2X3QpKH5USU1fQ0NNUjJfT0M0RkUpOw0KKw0KKyAgLyogRW5hYmxlIG9yIERpc2FibGUgdGhlIE91dHB1dCBDb21wYXJlIEZhc3QgQml0ICovDQorICB0bXBjY21yMiB8PSAodWludDE2X3QpKFRJTV9PQ0Zhc3QgPDwgOCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIyICovDQorICBUSU14LT5DQ01SMiA9IHRtcGNjbXIyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgb3Igc2FmZWd1YXJkcyB0aGUgT0NSRUYxIHNpZ25hbCBvbiBhbiBleHRlcm5hbCBldmVudA0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgZXhjZXB0IDYgYW5kIDcsIHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DQ2xlYXI6IG5ldyBzdGF0ZSBvZiB0aGUgT3V0cHV0IENvbXBhcmUgQ2xlYXIgRW5hYmxlIEJpdC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0NsZWFyX0VuYWJsZTogVElNIE91dHB1dCBjbGVhciBlbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0NsZWFyX0Rpc2FibGU6IFRJTSBPdXRwdXQgY2xlYXIgZGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ2xlYXJPQzFSZWYoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0NsZWFyKQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXIxID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QxX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DQ0xFQVJfU1RBVEUoVElNX09DQ2xlYXIpKTsNCisNCisgIHRtcGNjbXIxID0gVElNeC0+Q0NNUjE7DQorDQorICAvKiBSZXNldCB0aGUgT0MxQ0UgQml0ICovDQorICB0bXBjY21yMSAmPSAodWludDE2X3QpflRJTV9DQ01SMV9PQzFDRTsNCisNCisgIC8qIEVuYWJsZSBvciBEaXNhYmxlIHRoZSBPdXRwdXQgQ29tcGFyZSBDbGVhciBCaXQgKi8NCisgIHRtcGNjbXIxIHw9IFRJTV9PQ0NsZWFyOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIG9yIHNhZmVndWFyZHMgdGhlIE9DUkVGMiBzaWduYWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ0NsZWFyOiBuZXcgc3RhdGUgb2YgdGhlIE91dHB1dCBDb21wYXJlIENsZWFyIEVuYWJsZSBCaXQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NDbGVhcl9FbmFibGU6IFRJTSBPdXRwdXQgY2xlYXIgZW5hYmxlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NDbGVhcl9EaXNhYmxlOiBUSU0gT3V0cHV0IGNsZWFyIGRpc2FibGUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX0NsZWFyT0MyUmVmKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NDbGVhcikNCit7DQorICB1aW50MTZfdCB0bXBjY21yMSA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMl9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ0NMRUFSX1NUQVRFKFRJTV9PQ0NsZWFyKSk7DQorDQorICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOw0KKw0KKyAgLyogUmVzZXQgdGhlIE9DMkNFIEJpdCAqLw0KKyAgdG1wY2NtcjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfT0MyQ0U7DQorDQorICAvKiBFbmFibGUgb3IgRGlzYWJsZSB0aGUgT3V0cHV0IENvbXBhcmUgQ2xlYXIgQml0ICovDQorICB0bXBjY21yMSB8PSAodWludDE2X3QpKFRJTV9PQ0NsZWFyIDw8IDgpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIG9yIHNhZmVndWFyZHMgdGhlIE9DUkVGMyBzaWduYWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DQ2xlYXI6IG5ldyBzdGF0ZSBvZiB0aGUgT3V0cHV0IENvbXBhcmUgQ2xlYXIgRW5hYmxlIEJpdC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0NsZWFyX0VuYWJsZTogVElNIE91dHB1dCBjbGVhciBlbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0NsZWFyX0Rpc2FibGU6IFRJTSBPdXRwdXQgY2xlYXIgZGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ2xlYXJPQzNSZWYoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0NsZWFyKQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXIyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DQ0xFQVJfU1RBVEUoVElNX09DQ2xlYXIpKTsNCisNCisgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7DQorDQorICAvKiBSZXNldCB0aGUgT0MzQ0UgQml0ICovDQorICB0bXBjY21yMiAmPSAodWludDE2X3QpflRJTV9DQ01SMl9PQzNDRTsNCisNCisgIC8qIEVuYWJsZSBvciBEaXNhYmxlIHRoZSBPdXRwdXQgQ29tcGFyZSBDbGVhciBCaXQgKi8NCisgIHRtcGNjbXIyIHw9IFRJTV9PQ0NsZWFyOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMiByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NNUjIgPSB0bXBjY21yMjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIG9yIHNhZmVndWFyZHMgdGhlIE9DUkVGNCBzaWduYWwgb24gYW4gZXh0ZXJuYWwgZXZlbnQNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DQ2xlYXI6IG5ldyBzdGF0ZSBvZiB0aGUgT3V0cHV0IENvbXBhcmUgQ2xlYXIgRW5hYmxlIEJpdC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0NsZWFyX0VuYWJsZTogVElNIE91dHB1dCBjbGVhciBlbmFibGUNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ0NsZWFyX0Rpc2FibGU6IFRJTSBPdXRwdXQgY2xlYXIgZGlzYWJsZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ2xlYXJPQzRSZWYoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ0NsZWFyKQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjbXIyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DQ0xFQVJfU1RBVEUoVElNX09DQ2xlYXIpKTsNCisNCisgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7DQorDQorICAvKiBSZXNldCB0aGUgT0M0Q0UgQml0ICovDQorICB0bXBjY21yMiAmPSAodWludDE2X3QpflRJTV9DQ01SMl9PQzRDRTsNCisNCisgIC8qIEVuYWJsZSBvciBEaXNhYmxlIHRoZSBPdXRwdXQgQ29tcGFyZSBDbGVhciBCaXQgKi8NCisgIHRtcGNjbXIyIHw9ICh1aW50MTZfdCkoVElNX09DQ2xlYXIgPDwgOCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIyIHJlZ2lzdGVyICovDQorICBUSU14LT5DQ01SMiA9IHRtcGNjbXIyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IGNoYW5uZWwgMSBwb2xhcml0eS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IGV4Y2VwdCA2IGFuZCA3LCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ1BvbGFyaXR5OiBzcGVjaWZpZXMgdGhlIE9DMSBQb2xhcml0eQ0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DUG9sYXJpdHlfSGlnaDogT3V0cHV0IENvbXBhcmUgYWN0aXZlIGhpZ2gNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1BvbGFyaXR5X0xvdzogT3V0cHV0IENvbXBhcmUgYWN0aXZlIGxvdw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MxUG9sYXJpdHlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9PQ1BvbGFyaXR5KQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjZXIgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT0NfUE9MQVJJVFkoVElNX09DUG9sYXJpdHkpKTsNCisNCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOw0KKw0KKyAgLyogU2V0IG9yIFJlc2V0IHRoZSBDQzFQIEJpdCAqLw0KKyAgdG1wY2NlciAmPSAodWludDE2X3QpKH5USU1fQ0NFUl9DQzFQKTsNCisgIHRtcGNjZXIgfD0gVElNX09DUG9sYXJpdHk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDRVIgcmVnaXN0ZXIgKi8NCisgIFRJTXgtPkNDRVIgPSB0bXBjY2VyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IENoYW5uZWwgMU4gcG9sYXJpdHkuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DTlBvbGFyaXR5OiBzcGVjaWZpZXMgdGhlIE9DMU4gUG9sYXJpdHkNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ05Qb2xhcml0eV9IaWdoOiBPdXRwdXQgQ29tcGFyZSBhY3RpdmUgaGlnaA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DTlBvbGFyaXR5X0xvdzogT3V0cHV0IENvbXBhcmUgYWN0aXZlIGxvdw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MxTlBvbGFyaXR5Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NOUG9sYXJpdHkpDQorew0KKyAgdWludDE2X3QgdG1wY2NlciA9IDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUNF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ05fUE9MQVJJVFkoVElNX09DTlBvbGFyaXR5KSk7DQorICAgDQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisNCisgIC8qIFNldCBvciBSZXNldCB0aGUgQ0MxTlAgQml0ICovDQorICB0bXBjY2VyICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MxTlA7DQorICB0bXBjY2VyIHw9IFRJTV9PQ05Qb2xhcml0eTsNCisNCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NFUiByZWdpc3RlciAqLw0KKyAgVElNeC0+Q0NFUiA9IHRtcGNjZXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIFRJTXggY2hhbm5lbCAyIHBvbGFyaXR5Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUsIDgsIDkgb3IgMTIgdG8gc2VsZWN0IHRoZSBUSU0gDQorICAqICAgICAgICAgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fT0NQb2xhcml0eTogc3BlY2lmaWVzIHRoZSBPQzIgUG9sYXJpdHkNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1BvbGFyaXR5X0hpZ2g6IE91dHB1dCBDb21wYXJlIGFjdGl2ZSBoaWdoDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NQb2xhcml0eV9Mb3c6IE91dHB1dCBDb21wYXJlIGFjdGl2ZSBsb3cNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DMlBvbGFyaXR5Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NQb2xhcml0eSkNCit7DQorICB1aW50MTZfdCB0bXBjY2VyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QyX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DX1BPTEFSSVRZKFRJTV9PQ1BvbGFyaXR5KSk7DQorDQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisNCisgIC8qIFNldCBvciBSZXNldCB0aGUgQ0MyUCBCaXQgKi8NCisgIHRtcGNjZXIgJj0gKHVpbnQxNl90KSh+VElNX0NDRVJfQ0MyUCk7DQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX09DUG9sYXJpdHkgPDwgNCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDRVIgcmVnaXN0ZXIgKi8NCisgIFRJTXgtPkNDRVIgPSB0bXBjY2VyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IENoYW5uZWwgMk4gcG9sYXJpdHkuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DTlBvbGFyaXR5OiBzcGVjaWZpZXMgdGhlIE9DMk4gUG9sYXJpdHkNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ05Qb2xhcml0eV9IaWdoOiBPdXRwdXQgQ29tcGFyZSBhY3RpdmUgaGlnaA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DTlBvbGFyaXR5X0xvdzogT3V0cHV0IENvbXBhcmUgYWN0aXZlIGxvdw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fT0MyTlBvbGFyaXR5Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NOUG9sYXJpdHkpDQorew0KKyAgdWludDE2X3QgdG1wY2NlciA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUNF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ05fUE9MQVJJVFkoVElNX09DTlBvbGFyaXR5KSk7DQorICANCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOw0KKw0KKyAgLyogU2V0IG9yIFJlc2V0IHRoZSBDQzJOUCBCaXQgKi8NCisgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzJOUDsNCisgIHRtcGNjZXIgfD0gKHVpbnQxNl90KShUSU1fT0NOUG9sYXJpdHkgPDwgNCk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDRVIgcmVnaXN0ZXIgKi8NCisgIFRJTXgtPkNDRVIgPSB0bXBjY2VyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IGNoYW5uZWwgMyBwb2xhcml0eS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fT0NQb2xhcml0eTogc3BlY2lmaWVzIHRoZSBPQzMgUG9sYXJpdHkNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ1BvbGFyaXR5X0hpZ2g6IE91dHB1dCBDb21wYXJlIGFjdGl2ZSBoaWdoDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NQb2xhcml0eV9Mb3c6IE91dHB1dCBDb21wYXJlIGFjdGl2ZSBsb3cNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DM1BvbGFyaXR5Q29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fT0NQb2xhcml0eSkNCit7DQorICB1aW50MTZfdCB0bXBjY2VyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DX1BPTEFSSVRZKFRJTV9PQ1BvbGFyaXR5KSk7DQorDQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisNCisgIC8qIFNldCBvciBSZXNldCB0aGUgQ0MzUCBCaXQgKi8NCisgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzNQOw0KKyAgdG1wY2NlciB8PSAodWludDE2X3QpKFRJTV9PQ1BvbGFyaXR5IDw8IDgpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ0VSIHJlZ2lzdGVyICovDQorICBUSU14LT5DQ0VSID0gdG1wY2NlcjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgVElNeCBDaGFubmVsIDNOIHBvbGFyaXR5Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9PQ05Qb2xhcml0eTogc3BlY2lmaWVzIHRoZSBPQzNOIFBvbGFyaXR5DQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NOUG9sYXJpdHlfSGlnaDogT3V0cHV0IENvbXBhcmUgYWN0aXZlIGhpZ2gNCisgICogICAgICAgICAgICBAYXJnIFRJTV9PQ05Qb2xhcml0eV9Mb3c6IE91dHB1dCBDb21wYXJlIGFjdGl2ZSBsb3cNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX09DM05Qb2xhcml0eUNvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DTlBvbGFyaXR5KQ0KK3sNCisgIHVpbnQxNl90IHRtcGNjZXIgPSAwOw0KKyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1Q0X1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX09DTl9QT0xBUklUWShUSU1fT0NOUG9sYXJpdHkpKTsNCisgICAgDQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisNCisgIC8qIFNldCBvciBSZXNldCB0aGUgQ0MzTlAgQml0ICovDQorICB0bXBjY2VyICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MzTlA7DQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX09DTlBvbGFyaXR5IDw8IDgpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ0VSIHJlZ2lzdGVyICovDQorICBUSU14LT5DQ0VSID0gdG1wY2NlcjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgVElNeCBjaGFubmVsIDQgcG9sYXJpdHkuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX09DUG9sYXJpdHk6IHNwZWNpZmllcyB0aGUgT0M0IFBvbGFyaXR5DQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fT0NQb2xhcml0eV9IaWdoOiBPdXRwdXQgQ29tcGFyZSBhY3RpdmUgaGlnaA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX09DUG9sYXJpdHlfTG93OiBPdXRwdXQgQ29tcGFyZSBhY3RpdmUgbG93DQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9PQzRQb2xhcml0eUNvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX09DUG9sYXJpdHkpDQorew0KKyAgdWludDE2X3QgdG1wY2NlciA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PQ19QT0xBUklUWShUSU1fT0NQb2xhcml0eSkpOw0KKw0KKyAgdG1wY2NlciA9IFRJTXgtPkNDRVI7DQorDQorICAvKiBTZXQgb3IgUmVzZXQgdGhlIENDNFAgQml0ICovDQorICB0bXBjY2VyICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0M0UDsNCisgIHRtcGNjZXIgfD0gKHVpbnQxNl90KShUSU1fT0NQb2xhcml0eSA8PCAxMik7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDRVIgcmVnaXN0ZXIgKi8NCisgIFRJTXgtPkNDRVIgPSB0bXBjY2VyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBUSU0gQ2FwdHVyZSBDb21wYXJlIENoYW5uZWwgeC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IGV4Y2VwdCA2IGFuZCA3LCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9DaGFubmVsOiBzcGVjaWZpZXMgdGhlIFRJTSBDaGFubmVsDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF8xOiBUSU0gQ2hhbm5lbCAxDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF8yOiBUSU0gQ2hhbm5lbCAyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF8zOiBUSU0gQ2hhbm5lbCAzDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ2hhbm5lbF80OiBUSU0gQ2hhbm5lbCA0DQorICAqIEBwYXJhbSAgVElNX0NDeDogc3BlY2lmaWVzIHRoZSBUSU0gQ2hhbm5lbCBDQ3hFIGJpdCBuZXcgc3RhdGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogVElNX0NDeF9FbmFibGUgb3IgVElNX0NDeF9EaXNhYmxlLiANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX0NDeENtZChUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0NoYW5uZWwsIHVpbnQxNl90IFRJTV9DQ3gpDQorew0KKyAgdWludDE2X3QgdG1wID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QxX1BFUklQSChUSU14KSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DSEFOTkVMKFRJTV9DaGFubmVsKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWChUSU1fQ0N4KSk7DQorDQorICB0bXAgPSBDQ0VSX0NDRV9TRVQgPDwgVElNX0NoYW5uZWw7DQorDQorICAvKiBSZXNldCB0aGUgQ0N4RSBCaXQgKi8NCisgIFRJTXgtPkNDRVIgJj0gKHVpbnQxNl90KX4gdG1wOw0KKw0KKyAgLyogU2V0IG9yIHJlc2V0IHRoZSBDQ3hFIEJpdCAqLyANCisgIFRJTXgtPkNDRVIgfD0gICh1aW50MTZfdCkoVElNX0NDeCA8PCBUSU1fQ2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFRJTSBDYXB0dXJlIENvbXBhcmUgQ2hhbm5lbCB4Ti4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fQ2hhbm5lbDogc3BlY2lmaWVzIHRoZSBUSU0gQ2hhbm5lbA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NoYW5uZWxfMTogVElNIENoYW5uZWwgMQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NoYW5uZWxfMjogVElNIENoYW5uZWwgMg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NoYW5uZWxfMzogVElNIENoYW5uZWwgMw0KKyAgKiBAcGFyYW0gIFRJTV9DQ3hOOiBzcGVjaWZpZXMgdGhlIFRJTSBDaGFubmVsIENDeE5FIGJpdCBuZXcgc3RhdGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogVElNX0NDeE5fRW5hYmxlIG9yIFRJTV9DQ3hOX0Rpc2FibGUuIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ0N4TkNtZChUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0NoYW5uZWwsIHVpbnQxNl90IFRJTV9DQ3hOKQ0KK3sNCisgIHVpbnQxNl90IHRtcCA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUNF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT01QTEVNRU5UQVJZX0NIQU5ORUwoVElNX0NoYW5uZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTihUSU1fQ0N4TikpOw0KKw0KKyAgdG1wID0gQ0NFUl9DQ05FX1NFVCA8PCBUSU1fQ2hhbm5lbDsNCisNCisgIC8qIFJlc2V0IHRoZSBDQ3hORSBCaXQgKi8NCisgIFRJTXgtPkNDRVIgJj0gKHVpbnQxNl90KSB+dG1wOw0KKw0KKyAgLyogU2V0IG9yIHJlc2V0IHRoZSBDQ3hORSBCaXQgKi8gDQorICBUSU14LT5DQ0VSIHw9ICAodWludDE2X3QpKFRJTV9DQ3hOIDw8IFRJTV9DaGFubmVsKTsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0dyb3VwMyBJbnB1dCBDYXB0dXJlIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgICBJbnB1dCBDYXB0dXJlIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgQ2FwdHVyZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisgICANCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgIA0KKyAgICAgICAgICAgICAgVElNIERyaXZlcjogaG93IHRvIHVzZSBpdCBpbiBJbnB1dCBDYXB0dXJlIE1vZGUNCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICAgICAgVG8gdXNlIHRoZSBUaW1lciBpbiBJbnB1dCBDYXB0dXJlIG1vZGUsIHRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIG1hbmRhdG9yeToNCisgICAgICAgDQorICAgICAgIDEuIEVuYWJsZSBUSU0gY2xvY2sgdXNpbmcgUkNDX0FQQnhQZXJpcGhDbG9ja0NtZChSQ0NfQVBCeFBlcmlwaF9USU14LCBFTkFCTEUpIGZ1bmN0aW9uDQorICAgICAgIA0KKyAgICAgICAyLiBDb25maWd1cmUgdGhlIFRJTSBwaW5zIGJ5IGNvbmZpZ3VyaW5nIHRoZSBjb3JyZXNwb25kaW5nIEdQSU8gcGlucw0KKyAgICAgICANCisgICAgICAgMi4gQ29uZmlndXJlIHRoZSBUaW1lIGJhc2UgdW5pdCBhcyBkZXNjcmliZWQgaW4gdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBkcml2ZXIsDQorICAgICAgICAgIGlmIG5lZWRlZCwgZWxzZSB0aGUgVGltZXIgd2lsbCBydW4gd2l0aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uOg0KKyAgICAgICAgICAtIEF1dG9yZWxvYWQgdmFsdWUgPSAweEZGRkYNCisgICAgICAgICAgLSBQcmVzY2FsZXIgdmFsdWUgPSAweDAwMDANCisgICAgICAgICAgLSBDb3VudGVyIG1vZGUgPSBVcCBjb3VudGluZw0KKyAgICAgICAgICAtIENsb2NrIERpdmlzaW9uID0gVElNX0NLRF9ESVYxDQorICAgICAgICAgIA0KKyAgICAgICAzLiBGaWxsIHRoZSBUSU1fSUNJbml0U3RydWN0IHdpdGggdGhlIGRlc2lyZWQgcGFyYW1ldGVycyBpbmNsdWRpbmc6DQorICAgICAgICAgIC0gVElNIENoYW5uZWw6IFRJTV9DaGFubmVsDQorICAgICAgICAgIC0gVElNIElucHV0IENhcHR1cmUgcG9sYXJpdHk6IFRJTV9JQ1BvbGFyaXR5DQorICAgICAgICAgIC0gVElNIElucHV0IENhcHR1cmUgc2VsZWN0aW9uOiBUSU1fSUNTZWxlY3Rpb24NCisgICAgICAgICAgLSBUSU0gSW5wdXQgQ2FwdHVyZSBQcmVzY2FsZXI6IFRJTV9JQ1ByZXNjYWxlcg0KKyAgICAgICAgICAtIFRJTSBJbnB1dCBDQXB0dXJlIGZpbHRlciB2YWx1ZTogVElNX0lDRmlsdGVyDQorICAgICAgIA0KKyAgICAgICA0LiBDYWxsIFRJTV9JQ0luaXQoVElNeCwgJlRJTV9JQ0luaXRTdHJ1Y3QpIHRvIGNvbmZpZ3VyZSB0aGUgZGVzaXJlZCBjaGFubmVsIHdpdGggdGhlIA0KKyAgICAgICAgICBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gYW5kIHRvIG1lYXN1cmUgb25seSBmcmVxdWVuY3kgb3IgZHV0eSBjeWNsZSBvZiB0aGUgaW5wdXQgc2lnbmFsLA0KKyAgICAgICAgICBvciwNCisgICAgICAgICAgQ2FsbCBUSU1fUFdNSUNvbmZpZyhUSU14LCAmVElNX0lDSW5pdFN0cnVjdCkgdG8gY29uZmlndXJlIHRoZSBkZXNpcmVkIGNoYW5uZWxzIHdpdGggdGhlIA0KKyAgICAgICAgICBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gYW5kIHRvIG1lYXN1cmUgdGhlIGZyZXF1ZW5jeSBhbmQgdGhlIGR1dHkgY3ljbGUgb2YgdGhlIGlucHV0IHNpZ25hbA0KKyAgICAgICAgICANCisgICAgICAgNS4gRW5hYmxlIHRoZSBOVklDIG9yIHRoZSBETUEgdG8gcmVhZCB0aGUgbWVhc3VyZWQgZnJlcXVlbmN5LiANCisgICAgICAgICAgDQorICAgICAgIDYuIEVuYWJsZSB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgKG9yIERNQSByZXF1ZXN0KSB0byByZWFkIHRoZSBDYXB0dXJlZCB2YWx1ZSwNCisgICAgICAgICAgdXNpbmcgdGhlIGZ1bmN0aW9uIFRJTV9JVENvbmZpZyhUSU14LCBUSU1fSVRfQ0N4KSAob3IgVElNX0RNQV9DbWQoVElNeCwgVElNX0RNQV9DQ3gpKSANCisgICAgICAgDQorICAgICAgIDcuIENhbGwgdGhlIFRJTV9DbWQoRU5BQkxFKSBmdW5jdGlvbiB0byBlbmFibGUgdGhlIFRJTSBjb3VudGVyLg0KKyAgICAgICANCisgICAgICAgOC4gVXNlIFRJTV9HZXRDYXB0dXJleChUSU14KTsgdG8gcmVhZCB0aGUgY2FwdHVyZWQgdmFsdWUuDQorICAgICAgIA0KKyAgICAgICBOb3RlMTogQWxsIG90aGVyIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBzZXBhcmF0ZWx5IHRvIG1vZGlmeSwgaWYgbmVlZGVkLA0KKyAgICAgICAgICAgICAgYSBzcGVjaWZpYyBmZWF0dXJlIG9mIHRoZSBUaW1lci4gDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBUSU0gcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzDQorICAqICAgICAgICAgaW4gdGhlIFRJTV9JQ0luaXRTdHJ1Y3QuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCBleGNlcHQgNiBhbmQgNywgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fSUNJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgVElNX0lDSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMNCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBUSU0gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX0lDSW5pdChUSU1fVHlwZURlZiogVElNeCwgVElNX0lDSW5pdFR5cGVEZWYqIFRJTV9JQ0luaXRTdHJ1Y3QpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8gICAgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMV9QRVJJUEgoVElNeCkpOyAgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QT0xBUklUWShUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQb2xhcml0eSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19TRUxFQ1RJT04oVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDU2VsZWN0aW9uKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQcmVzY2FsZXIpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ0ZpbHRlcikpOw0KKyAgDQorICBpZiAoVElNX0lDSW5pdFN0cnVjdC0+VElNX0NoYW5uZWwgPT0gVElNX0NoYW5uZWxfMSkNCisgIHsNCisgICAgLyogVEkxIENvbmZpZ3VyYXRpb24gKi8NCisgICAgVEkxX0NvbmZpZyhUSU14LCBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQb2xhcml0eSwNCisgICAgICAgICAgICAgICBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDRmlsdGVyKTsNCisgICAgLyogU2V0IHRoZSBJbnB1dCBDYXB0dXJlIFByZXNjYWxlciB2YWx1ZSAqLw0KKyAgICBUSU1fU2V0SUMxUHJlc2NhbGVyKFRJTXgsIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1ByZXNjYWxlcik7DQorICB9DQorICBlbHNlIGlmIChUSU1fSUNJbml0U3RydWN0LT5USU1fQ2hhbm5lbCA9PSBUSU1fQ2hhbm5lbF8yKQ0KKyAgew0KKyAgICAvKiBUSTIgQ29uZmlndXJhdGlvbiAqLw0KKyAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QyX1BFUklQSChUSU14KSk7DQorICAgIFRJMl9Db25maWcoVElNeCwgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDUG9sYXJpdHksDQorICAgICAgICAgICAgICAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDU2VsZWN0aW9uLA0KKyAgICAgICAgICAgICAgIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ0ZpbHRlcik7DQorICAgIC8qIFNldCB0aGUgSW5wdXQgQ2FwdHVyZSBQcmVzY2FsZXIgdmFsdWUgKi8NCisgICAgVElNX1NldElDMlByZXNjYWxlcihUSU14LCBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQcmVzY2FsZXIpOw0KKyAgfQ0KKyAgZWxzZSBpZiAoVElNX0lDSW5pdFN0cnVjdC0+VElNX0NoYW5uZWwgPT0gVElNX0NoYW5uZWxfMykNCisgIHsNCisgICAgLyogVEkzIENvbmZpZ3VyYXRpb24gKi8NCisgICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKyAgICBUSTNfQ29uZmlnKFRJTXgsICBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQb2xhcml0eSwNCisgICAgICAgICAgICAgICBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDRmlsdGVyKTsNCisgICAgLyogU2V0IHRoZSBJbnB1dCBDYXB0dXJlIFByZXNjYWxlciB2YWx1ZSAqLw0KKyAgICBUSU1fU2V0SUMzUHJlc2NhbGVyKFRJTXgsIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1ByZXNjYWxlcik7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFRJNCBDb25maWd1cmF0aW9uICovIA0KKyAgICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICAgIFRJNF9Db25maWcoVElNeCwgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDUG9sYXJpdHksDQorICAgICAgICAgICAgICAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDU2VsZWN0aW9uLA0KKyAgICAgICAgICAgICAgIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ0ZpbHRlcik7DQorICAgIC8qIFNldCB0aGUgSW5wdXQgQ2FwdHVyZSBQcmVzY2FsZXIgdmFsdWUgKi8NCisgICAgVElNX1NldElDNFByZXNjYWxlcihUSU14LCBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQcmVzY2FsZXIpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFRJTV9JQ0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgVElNX0lDSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIFRJTV9JQ0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsDQorICAqICAgICAgICAgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9JQ1N0cnVjdEluaXQoVElNX0lDSW5pdFR5cGVEZWYqIFRJTV9JQ0luaXRTdHJ1Y3QpDQorew0KKyAgLyogU2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8NCisgIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9DaGFubmVsID0gVElNX0NoYW5uZWxfMTsNCisgIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1BvbGFyaXR5ID0gVElNX0lDUG9sYXJpdHlfUmlzaW5nOw0KKyAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDU2VsZWN0aW9uID0gVElNX0lDU2VsZWN0aW9uX0RpcmVjdFRJOw0KKyAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDUHJlc2NhbGVyID0gVElNX0lDUFNDX0RJVjE7DQorICBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNGaWx0ZXIgPSAweDAwOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU0gcGVyaXBoZXJhbCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzDQorICAqICAgICAgICAgaW4gdGhlIFRJTV9JQ0luaXRTdHJ1Y3QgdG8gbWVhc3VyZSBhbiBleHRlcm5hbCBQV00gc2lnbmFsLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlICAxLCAyLCAzLCA0LCA1LDgsIDkgb3IgMTIgdG8gc2VsZWN0IHRoZSBUSU0gDQorICAqICAgICAgICAgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fSUNJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgVElNX0lDSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMNCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBUSU0gcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1BXTUlDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIFRJTV9JQ0luaXRUeXBlRGVmKiBUSU1fSUNJbml0U3RydWN0KQ0KK3sNCisgIHVpbnQxNl90IGljb3Bwb3NpdGVwb2xhcml0eSA9IFRJTV9JQ1BvbGFyaXR5X1Jpc2luZzsNCisgIHVpbnQxNl90IGljb3Bwb3NpdGVzZWxlY3Rpb24gPSBUSU1fSUNTZWxlY3Rpb25fRGlyZWN0VEk7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMl9QRVJJUEgoVElNeCkpOw0KKw0KKyAgLyogU2VsZWN0IHRoZSBPcHBvc2l0ZSBJbnB1dCBQb2xhcml0eSAqLw0KKyAgaWYgKFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1BvbGFyaXR5ID09IFRJTV9JQ1BvbGFyaXR5X1Jpc2luZykNCisgIHsNCisgICAgaWNvcHBvc2l0ZXBvbGFyaXR5ID0gVElNX0lDUG9sYXJpdHlfRmFsbGluZzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgaWNvcHBvc2l0ZXBvbGFyaXR5ID0gVElNX0lDUG9sYXJpdHlfUmlzaW5nOw0KKyAgfQ0KKyAgLyogU2VsZWN0IHRoZSBPcHBvc2l0ZSBJbnB1dCAqLw0KKyAgaWYgKFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1NlbGVjdGlvbiA9PSBUSU1fSUNTZWxlY3Rpb25fRGlyZWN0VEkpDQorICB7DQorICAgIGljb3Bwb3NpdGVzZWxlY3Rpb24gPSBUSU1fSUNTZWxlY3Rpb25fSW5kaXJlY3RUSTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgaWNvcHBvc2l0ZXNlbGVjdGlvbiA9IFRJTV9JQ1NlbGVjdGlvbl9EaXJlY3RUSTsNCisgIH0NCisgIGlmIChUSU1fSUNJbml0U3RydWN0LT5USU1fQ2hhbm5lbCA9PSBUSU1fQ2hhbm5lbF8xKQ0KKyAgew0KKyAgICAvKiBUSTEgQ29uZmlndXJhdGlvbiAqLw0KKyAgICBUSTFfQ29uZmlnKFRJTXgsIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1BvbGFyaXR5LCBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDRmlsdGVyKTsNCisgICAgLyogU2V0IHRoZSBJbnB1dCBDYXB0dXJlIFByZXNjYWxlciB2YWx1ZSAqLw0KKyAgICBUSU1fU2V0SUMxUHJlc2NhbGVyKFRJTXgsIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1ByZXNjYWxlcik7DQorICAgIC8qIFRJMiBDb25maWd1cmF0aW9uICovDQorICAgIFRJMl9Db25maWcoVElNeCwgaWNvcHBvc2l0ZXBvbGFyaXR5LCBpY29wcG9zaXRlc2VsZWN0aW9uLCBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNGaWx0ZXIpOw0KKyAgICAvKiBTZXQgdGhlIElucHV0IENhcHR1cmUgUHJlc2NhbGVyIHZhbHVlICovDQorICAgIFRJTV9TZXRJQzJQcmVzY2FsZXIoVElNeCwgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDUHJlc2NhbGVyKTsNCisgIH0NCisgIGVsc2UNCisgIHsgDQorICAgIC8qIFRJMiBDb25maWd1cmF0aW9uICovDQorICAgIFRJMl9Db25maWcoVElNeCwgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDUG9sYXJpdHksIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ1NlbGVjdGlvbiwNCisgICAgICAgICAgICAgICBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNGaWx0ZXIpOw0KKyAgICAvKiBTZXQgdGhlIElucHV0IENhcHR1cmUgUHJlc2NhbGVyIHZhbHVlICovDQorICAgIFRJTV9TZXRJQzJQcmVzY2FsZXIoVElNeCwgVElNX0lDSW5pdFN0cnVjdC0+VElNX0lDUHJlc2NhbGVyKTsNCisgICAgLyogVEkxIENvbmZpZ3VyYXRpb24gKi8NCisgICAgVEkxX0NvbmZpZyhUSU14LCBpY29wcG9zaXRlcG9sYXJpdHksIGljb3Bwb3NpdGVzZWxlY3Rpb24sIFRJTV9JQ0luaXRTdHJ1Y3QtPlRJTV9JQ0ZpbHRlcik7DQorICAgIC8qIFNldCB0aGUgSW5wdXQgQ2FwdHVyZSBQcmVzY2FsZXIgdmFsdWUgKi8NCisgICAgVElNX1NldElDMVByZXNjYWxlcihUSU14LCBUSU1fSUNJbml0U3RydWN0LT5USU1fSUNQcmVzY2FsZXIpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBHZXRzIHRoZSBUSU14IElucHV0IENhcHR1cmUgMSB2YWx1ZS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IGV4Y2VwdCA2IGFuZCA3LCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIENhcHR1cmUgQ29tcGFyZSAxIFJlZ2lzdGVyIHZhbHVlLg0KKyAgKi8NCit1aW50MzJfdCBUSU1fR2V0Q2FwdHVyZTEoVElNX1R5cGVEZWYqIFRJTXgpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsNCisNCisgIC8qIEdldCB0aGUgQ2FwdHVyZSAxIFJlZ2lzdGVyIHZhbHVlICovDQorICByZXR1cm4gVElNeC0+Q0NSMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgR2V0cyB0aGUgVElNeCBJbnB1dCBDYXB0dXJlIDIgdmFsdWUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIENhcHR1cmUgQ29tcGFyZSAyIFJlZ2lzdGVyIHZhbHVlLg0KKyAgKi8NCit1aW50MzJfdCBUSU1fR2V0Q2FwdHVyZTIoVElNX1R5cGVEZWYqIFRJTXgpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDJfUEVSSVBIKFRJTXgpKTsNCisNCisgIC8qIEdldCB0aGUgQ2FwdHVyZSAyIFJlZ2lzdGVyIHZhbHVlICovDQorICByZXR1cm4gVElNeC0+Q0NSMjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgR2V0cyB0aGUgVElNeCBJbnB1dCBDYXB0dXJlIDMgdmFsdWUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgQ2FwdHVyZSBDb21wYXJlIDMgUmVnaXN0ZXIgdmFsdWUuDQorICAqLw0KK3VpbnQzMl90IFRJTV9HZXRDYXB0dXJlMyhUSU1fVHlwZURlZiogVElNeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOyANCisNCisgIC8qIEdldCB0aGUgQ2FwdHVyZSAzIFJlZ2lzdGVyIHZhbHVlICovDQorICByZXR1cm4gVElNeC0+Q0NSMzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgR2V0cyB0aGUgVElNeCBJbnB1dCBDYXB0dXJlIDQgdmFsdWUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgQ2FwdHVyZSBDb21wYXJlIDQgUmVnaXN0ZXIgdmFsdWUuDQorICAqLw0KK3VpbnQzMl90IFRJTV9HZXRDYXB0dXJlNChUSU1fVHlwZURlZiogVElNeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKw0KKyAgLyogR2V0IHRoZSBDYXB0dXJlIDQgUmVnaXN0ZXIgdmFsdWUgKi8NCisgIHJldHVybiBUSU14LT5DQ1I0Ow0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBUSU14IElucHV0IENhcHR1cmUgMSBwcmVzY2FsZXIuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCBleGNlcHQgNiBhbmQgNywgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fSUNQU0M6IHNwZWNpZmllcyB0aGUgSW5wdXQgQ2FwdHVyZTEgcHJlc2NhbGVyIG5ldyB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVYxOiBubyBwcmVzY2FsZXINCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVYyOiBjYXB0dXJlIGlzIGRvbmUgb25jZSBldmVyeSAyIGV2ZW50cw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUFNDX0RJVjQ6IGNhcHR1cmUgaXMgZG9uZSBvbmNlIGV2ZXJ5IDQgZXZlbnRzDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQU0NfRElWODogY2FwdHVyZSBpcyBkb25lIG9uY2UgZXZlcnkgOCBldmVudHMNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NldElDMVByZXNjYWxlcihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lDUFNDKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QxX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihUSU1fSUNQU0MpKTsNCisNCisgIC8qIFJlc2V0IHRoZSBJQzFQU0MgQml0cyAqLw0KKyAgVElNeC0+Q0NNUjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMxUFNDOw0KKw0KKyAgLyogU2V0IHRoZSBJQzFQU0MgdmFsdWUgKi8NCisgIFRJTXgtPkNDTVIxIHw9IFRJTV9JQ1BTQzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyB0aGUgVElNeCBJbnB1dCBDYXB0dXJlIDIgcHJlc2NhbGVyLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUsIDgsIDkgb3IgMTIgdG8gc2VsZWN0IHRoZSBUSU0gDQorICAqICAgICAgICAgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fSUNQU0M6IHNwZWNpZmllcyB0aGUgSW5wdXQgQ2FwdHVyZTIgcHJlc2NhbGVyIG5ldyB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVYxOiBubyBwcmVzY2FsZXINCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVYyOiBjYXB0dXJlIGlzIGRvbmUgb25jZSBldmVyeSAyIGV2ZW50cw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUFNDX0RJVjQ6IGNhcHR1cmUgaXMgZG9uZSBvbmNlIGV2ZXJ5IDQgZXZlbnRzDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQU0NfRElWODogY2FwdHVyZSBpcyBkb25lIG9uY2UgZXZlcnkgOCBldmVudHMNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NldElDMlByZXNjYWxlcihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lDUFNDKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QyX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihUSU1fSUNQU0MpKTsNCisNCisgIC8qIFJlc2V0IHRoZSBJQzJQU0MgQml0cyAqLw0KKyAgVElNeC0+Q0NNUjEgJj0gKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMyUFNDOw0KKw0KKyAgLyogU2V0IHRoZSBJQzJQU0MgdmFsdWUgKi8NCisgIFRJTXgtPkNDTVIxIHw9ICh1aW50MTZfdCkoVElNX0lDUFNDIDw8IDgpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBUSU14IElucHV0IENhcHR1cmUgMyBwcmVzY2FsZXIuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0lDUFNDOiBzcGVjaWZpZXMgdGhlIElucHV0IENhcHR1cmUzIHByZXNjYWxlciBuZXcgdmFsdWUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQU0NfRElWMTogbm8gcHJlc2NhbGVyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQU0NfRElWMjogY2FwdHVyZSBpcyBkb25lIG9uY2UgZXZlcnkgMiBldmVudHMNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVY0OiBjYXB0dXJlIGlzIGRvbmUgb25jZSBldmVyeSA0IGV2ZW50cw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUFNDX0RJVjg6IGNhcHR1cmUgaXMgZG9uZSBvbmNlIGV2ZXJ5IDggZXZlbnRzDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9TZXRJQzNQcmVzY2FsZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BTQykNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUM19QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QUkVTQ0FMRVIoVElNX0lDUFNDKSk7DQorDQorICAvKiBSZXNldCB0aGUgSUMzUFNDIEJpdHMgKi8NCisgIFRJTXgtPkNDTVIyICY9ICh1aW50MTZfdCl+VElNX0NDTVIyX0lDM1BTQzsNCisNCisgIC8qIFNldCB0aGUgSUMzUFNDIHZhbHVlICovDQorICBUSU14LT5DQ01SMiB8PSBUSU1fSUNQU0M7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFRJTXggSW5wdXQgQ2FwdHVyZSA0IHByZXNjYWxlci4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fSUNQU0M6IHNwZWNpZmllcyB0aGUgSW5wdXQgQ2FwdHVyZTQgcHJlc2NhbGVyIG5ldyB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVYxOiBubyBwcmVzY2FsZXINCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BTQ19ESVYyOiBjYXB0dXJlIGlzIGRvbmUgb25jZSBldmVyeSAyIGV2ZW50cw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUFNDX0RJVjQ6IGNhcHR1cmUgaXMgZG9uZSBvbmNlIGV2ZXJ5IDQgZXZlbnRzDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQU0NfRElWODogY2FwdHVyZSBpcyBkb25lIG9uY2UgZXZlcnkgOCBldmVudHMNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NldElDNFByZXNjYWxlcihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lDUFNDKQ0KK3sgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDNfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUFJFU0NBTEVSKFRJTV9JQ1BTQykpOw0KKw0KKyAgLyogUmVzZXQgdGhlIElDNFBTQyBCaXRzICovDQorICBUSU14LT5DQ01SMiAmPSAodWludDE2X3QpflRJTV9DQ01SMl9JQzRQU0M7DQorDQorICAvKiBTZXQgdGhlIElDNFBTQyB2YWx1ZSAqLw0KKyAgVElNeC0+Q0NNUjIgfD0gKHVpbnQxNl90KShUSU1fSUNQU0MgPDwgOCk7DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFRJTV9Hcm91cDQgQWR2YW5jZWQtY29udHJvbCB0aW1lcnMgKFRJTTEgYW5kIFRJTTgpIHNwZWNpZmljIGZlYXR1cmVzDQorICogIEBicmllZiAgIEFkdmFuY2VkLWNvbnRyb2wgdGltZXJzIChUSU0xIGFuZCBUSU04KSBzcGVjaWZpYyBmZWF0dXJlcw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgQWR2YW5jZWQtY29udHJvbCB0aW1lcnMgKFRJTTEgYW5kIFRJTTgpIHNwZWNpZmljIGZlYXR1cmVzDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKyAgDQorICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICANCisgICAgICAgICAgICAgIFRJTSBEcml2ZXI6IGhvdyB0byB1c2UgdGhlIEJyZWFrIGZlYXR1cmUNCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSANCisgICAgICAgQWZ0ZXIgY29uZmlndXJpbmcgdGhlIFRpbWVyIGNoYW5uZWwocykgaW4gdGhlIGFwcHJvcHJpYXRlIE91dHB1dCBDb21wYXJlIG1vZGU6IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgMS4gRmlsbCB0aGUgVElNX0JEVFJJbml0U3RydWN0IHdpdGggdGhlIGRlc2lyZWQgcGFyYW1ldGVycyBmb3IgdGhlIFRpbWVyDQorICAgICAgICAgIEJyZWFrIFBvbGFyaXR5LCBkZWFkIHRpbWUsIExvY2sgbGV2ZWwsIHRoZSBPU1NJL09TU1IgU3RhdGUgYW5kIHRoZSANCisgICAgICAgICAgQU9FKGF1dG9tYXRpYyBvdXRwdXQgZW5hYmxlKS4NCisgICAgICAgICAgICAgICANCisgICAgICAgMi4gQ2FsbCBUSU1fQkRUUkNvbmZpZyhUSU14LCAmVElNX0JEVFJJbml0U3RydWN0KSB0byBjb25maWd1cmUgdGhlIFRpbWVyDQorICAgICAgICAgIA0KKyAgICAgICAzLiBFbmFibGUgdGhlIE1haW4gT3V0cHV0IHVzaW5nIFRJTV9DdHJsUFdNT3V0cHV0cyhUSU0xLCBFTkFCTEUpIA0KKyAgICAgICAgICANCisgICAgICAgNC4gT25jZSB0aGUgYnJlYWsgZXZlbiBvY2N1cnMsIHRoZSBUaW1lcidzIG91dHB1dCBzaWduYWxzIGFyZSBwdXQgaW4gcmVzZXQNCisgICAgICAgICAgc3RhdGUgb3IgaW4gYSBrbm93biBzdGF0ZSAoYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hZGUgaW4NCisgICAgICAgICAgVElNX0JEVFJDb25maWcoKSBmdW5jdGlvbikuDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIEJyZWFrIGZlYXR1cmUsIGRlYWQgdGltZSwgTG9jayBsZXZlbCwgT1NTSS9PU1NSIFN0YXRlDQorICAqICAgICAgICAgYW5kIHRoZSBBT0UoYXV0b21hdGljIG91dHB1dCBlbmFibGUpLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlICAxIG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gDQorICAqIEBwYXJhbSAgVElNX0JEVFJJbml0U3RydWN0OiBwb2ludGVyIHRvIGEgVElNX0JEVFJJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdA0KKyAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBCRFRSIFJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gIGluZm9ybWF0aW9uIGZvciB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9CRFRSQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCBUSU1fQkRUUkluaXRUeXBlRGVmICpUSU1fQkRUUkluaXRTdHJ1Y3QpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDRfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT1NTUl9TVEFURShUSU1fQkRUUkluaXRTdHJ1Y3QtPlRJTV9PU1NSU3RhdGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fT1NTSV9TVEFURShUSU1fQkRUUkluaXRTdHJ1Y3QtPlRJTV9PU1NJU3RhdGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fTE9DS19MRVZFTChUSU1fQkRUUkluaXRTdHJ1Y3QtPlRJTV9MT0NLTGV2ZWwpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fQlJFQUtfU1RBVEUoVElNX0JEVFJJbml0U3RydWN0LT5USU1fQnJlYWspKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fQlJFQUtfUE9MQVJJVFkoVElNX0JEVFJJbml0U3RydWN0LT5USU1fQnJlYWtQb2xhcml0eSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPTUFUSUNfT1VUUFVUX1NUQVRFKFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX0F1dG9tYXRpY091dHB1dCkpOw0KKw0KKyAgLyogU2V0IHRoZSBMb2NrIGxldmVsLCB0aGUgQnJlYWsgZW5hYmxlIEJpdCBhbmQgdGhlIFBvbGFyaXR5LCB0aGUgT1NTUiBTdGF0ZSwNCisgICAgIHRoZSBPU1NJIFN0YXRlLCB0aGUgZGVhZCB0aW1lIHZhbHVlIGFuZCB0aGUgQXV0b21hdGljIE91dHB1dCBFbmFibGUgQml0ICovDQorICBUSU14LT5CRFRSID0gKHVpbnQzMl90KVRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX09TU1JTdGF0ZSB8IFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX09TU0lTdGF0ZSB8DQorICAgICAgICAgICAgIFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX0xPQ0tMZXZlbCB8IFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX0RlYWRUaW1lIHwNCisgICAgICAgICAgICAgVElNX0JEVFJJbml0U3RydWN0LT5USU1fQnJlYWsgfCBUSU1fQkRUUkluaXRTdHJ1Y3QtPlRJTV9CcmVha1BvbGFyaXR5IHwNCisgICAgICAgICAgICAgVElNX0JEVFJJbml0U3RydWN0LT5USU1fQXV0b21hdGljT3V0cHV0Ow0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFRJTV9CRFRSSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBUSU1fQkRUUkluaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBUSU1fQkRUUkluaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaA0KKyAgKiAgICAgICAgIHdpbGwgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9CRFRSU3RydWN0SW5pdChUSU1fQkRUUkluaXRUeXBlRGVmKiBUSU1fQkRUUkluaXRTdHJ1Y3QpDQorew0KKyAgLyogU2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8NCisgIFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX09TU1JTdGF0ZSA9IFRJTV9PU1NSU3RhdGVfRGlzYWJsZTsNCisgIFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX09TU0lTdGF0ZSA9IFRJTV9PU1NJU3RhdGVfRGlzYWJsZTsNCisgIFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX0xPQ0tMZXZlbCA9IFRJTV9MT0NLTGV2ZWxfT0ZGOw0KKyAgVElNX0JEVFJJbml0U3RydWN0LT5USU1fRGVhZFRpbWUgPSAweDAwOw0KKyAgVElNX0JEVFJJbml0U3RydWN0LT5USU1fQnJlYWsgPSBUSU1fQnJlYWtfRGlzYWJsZTsNCisgIFRJTV9CRFRSSW5pdFN0cnVjdC0+VElNX0JyZWFrUG9sYXJpdHkgPSBUSU1fQnJlYWtQb2xhcml0eV9Mb3c7DQorICBUSU1fQkRUUkluaXRTdHJ1Y3QtPlRJTV9BdXRvbWF0aWNPdXRwdXQgPSBUSU1fQXV0b21hdGljT3V0cHV0X0Rpc2FibGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFRJTSBwZXJpcGhlcmFsIE1haW4gT3V0cHV0cy4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIG9yIDggdG8gc2VsZWN0IHRoZSBUSU14IHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgVElNIHBlcmlwaGVyYWwgTWFpbiBPdXRwdXRzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ3RybFBXTU91dHB1dHMoVElNX1R5cGVEZWYqIFRJTXgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUNF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIFRJTSBNYWluIE91dHB1dCAqLw0KKyAgICBUSU14LT5CRFRSIHw9IFRJTV9CRFRSX01PRTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgVElNIE1haW4gT3V0cHV0ICovDQorICAgIFRJTXgtPkJEVFIgJj0gKHVpbnQxNl90KX5USU1fQkRUUl9NT0U7DQorICB9ICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgVElNIHBlcmlwaGVyYWwgQ29tbXV0YXRpb24gZXZlbnQuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEgb3IgOCB0byBzZWxlY3QgdGhlIFRJTXggcGVyaXBoZXJhbA0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIENvbW11dGF0aW9uIGV2ZW50Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fU2VsZWN0Q09NKFRJTV9UeXBlRGVmKiBUSU14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDRfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogU2V0IHRoZSBDT00gQml0ICovDQorICAgIFRJTXgtPkNSMiB8PSBUSU1fQ1IyX0NDVVM7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFJlc2V0IHRoZSBDT00gQml0ICovDQorICAgIFRJTXgtPkNSMiAmPSAodWludDE2X3QpflRJTV9DUjJfQ0NVUzsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyBvciBSZXNldHMgdGhlIFRJTSBwZXJpcGhlcmFsIENhcHR1cmUgQ29tcGFyZSBQcmVsb2FkIENvbnRyb2wgYml0Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlICAxIG9yIDggdG8gc2VsZWN0IHRoZSBUSU14IHBlcmlwaGVyYWwNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBDYXB0dXJlIENvbXBhcmUgUHJlbG9hZCBDb250cm9sIGJpdA0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ0NQcmVsb2FkQ29udHJvbChUSU1fVHlwZURlZiogVElNeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUNF9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBTZXQgdGhlIENDUEMgQml0ICovDQorICAgIFRJTXgtPkNSMiB8PSBUSU1fQ1IyX0NDUEM7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIFJlc2V0IHRoZSBDQ1BDIEJpdCAqLw0KKyAgICBUSU14LT5DUjIgJj0gKHVpbnQxNl90KX5USU1fQ1IyX0NDUEM7DQorICB9DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFRJTV9Hcm91cDUgSW50ZXJydXB0cyBETUEgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICogIEBicmllZiAgICBJbnRlcnJ1cHRzLCBETUEgYW5kIGZsYWdzIG1hbmFnZW1lbnQgZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgIEludGVycnVwdHMsIERNQSBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBUSU0gaW50ZXJydXB0cy4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IHRvIHNlbGVjdCB0aGUgVElNeCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9JVDogc3BlY2lmaWVzIHRoZSBUSU0gaW50ZXJydXB0cyBzb3VyY2VzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfVXBkYXRlOiBUSU0gdXBkYXRlIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9DQzE6IFRJTSBDYXB0dXJlIENvbXBhcmUgMSBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQ0MyOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDIgSW50ZXJydXB0IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX0NDMzogVElNIENhcHR1cmUgQ29tcGFyZSAzIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9DQzQ6IFRJTSBDYXB0dXJlIENvbXBhcmUgNCBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQ09NOiBUSU0gQ29tbXV0YXRpb24gSW50ZXJydXB0IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX1RyaWdnZXI6IFRJTSBUcmlnZ2VyIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9CcmVhazogVElNIEJyZWFrIEludGVycnVwdCBzb3VyY2UNCisgICogIA0KKyAgKiBAbm90ZSAgIEZvciBUSU02IGFuZCBUSU03IG9ubHkgdGhlIHBhcmFtZXRlciBUSU1fSVRfVXBkYXRlIGNhbiBiZSB1c2VkDQorICAqIEBub3RlICAgRm9yIFRJTTkgYW5kIFRJTTEyIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBjYW4gYmUgdXNlZDogVElNX0lUX1VwZGF0ZSwNCisgICogICAgICAgICAgVElNX0lUX0NDMSwgVElNX0lUX0NDMiBvciBUSU1fSVRfVHJpZ2dlci4gDQorICAqIEBub3RlICAgRm9yIFRJTTEwLCBUSU0xMSwgVElNMTMgYW5kIFRJTTE0IG9ubHkgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBjYW4NCisgICogICAgICAgICAgYmUgdXNlZDogVElNX0lUX1VwZGF0ZSBvciBUSU1fSVRfQ0MxICAgDQorICAqIEBub3RlICAgVElNX0lUX0NPTSBhbmQgVElNX0lUX0JyZWFrIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCBUSU0xIGFuZCBUSU04IA0KKyAgKiAgICAgICAgDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgVElNIGludGVycnVwdHMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9JVENvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lULCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BTExfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fSVQoVElNX0lUKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogRW5hYmxlIHRoZSBJbnRlcnJ1cHQgc291cmNlcyAqLw0KKyAgICBUSU14LT5ESUVSIHw9IFRJTV9JVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgSW50ZXJydXB0IHNvdXJjZXMgKi8NCisgICAgVElNeC0+RElFUiAmPSAodWludDE2X3QpflRJTV9JVDsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgVElNeCBldmVudCB0byBiZSBnZW5lcmF0ZSBieSBzb2Z0d2FyZS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0V2ZW50U291cmNlOiBzcGVjaWZpZXMgdGhlIGV2ZW50IHNvdXJjZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgkgICANCisgICogICAgICAgICAgICBAYXJnIFRJTV9FdmVudFNvdXJjZV9VcGRhdGU6IFRpbWVyIHVwZGF0ZSBFdmVudCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9FdmVudFNvdXJjZV9DQzE6IFRpbWVyIENhcHR1cmUgQ29tcGFyZSAxIEV2ZW50IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V2ZW50U291cmNlX0NDMjogVGltZXIgQ2FwdHVyZSBDb21wYXJlIDIgRXZlbnQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXZlbnRTb3VyY2VfQ0MzOiBUaW1lciBDYXB0dXJlIENvbXBhcmUgMyBFdmVudCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9FdmVudFNvdXJjZV9DQzQ6IFRpbWVyIENhcHR1cmUgQ29tcGFyZSA0IEV2ZW50IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V2ZW50U291cmNlX0NPTTogVGltZXIgQ09NIGV2ZW50IHNvdXJjZSAgDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXZlbnRTb3VyY2VfVHJpZ2dlcjogVGltZXIgVHJpZ2dlciBFdmVudCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9FdmVudFNvdXJjZV9CcmVhazogVGltZXIgQnJlYWsgZXZlbnQgc291cmNlDQorICAqIA0KKyAgKiBAbm90ZSAgIFRJTTYgYW5kIFRJTTcgY2FuIG9ubHkgZ2VuZXJhdGUgYW4gdXBkYXRlIGV2ZW50LiANCisgICogQG5vdGUgICBUSU1fRXZlbnRTb3VyY2VfQ09NIGFuZCBUSU1fRXZlbnRTb3VyY2VfQnJlYWsgYXJlIHVzZWQgb25seSB3aXRoIFRJTTEgYW5kIFRJTTguDQorICAqICAgICAgICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX0dlbmVyYXRlRXZlbnQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9FdmVudFNvdXJjZSkNCit7IA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VWRU5UX1NPVVJDRShUSU1fRXZlbnRTb3VyY2UpKTsNCisgDQorICAvKiBTZXQgdGhlIGV2ZW50IHNvdXJjZXMgKi8NCisgIFRJTXgtPkVHUiA9IFRJTV9FdmVudFNvdXJjZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBUSU0gZmxhZyBpcyBzZXQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEgdG8gMTQgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fRkxBRzogc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfVXBkYXRlOiBUSU0gdXBkYXRlIEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX0NDMTogVElNIENhcHR1cmUgQ29tcGFyZSAxIEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX0NDMjogVElNIENhcHR1cmUgQ29tcGFyZSAyIEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX0NDMzogVElNIENhcHR1cmUgQ29tcGFyZSAzIEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX0NDNDogVElNIENhcHR1cmUgQ29tcGFyZSA0IEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX0NPTTogVElNIENvbW11dGF0aW9uIEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX1RyaWdnZXI6IFRJTSBUcmlnZ2VyIEZsYWcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9GTEFHX0JyZWFrOiBUSU0gQnJlYWsgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0MxT0Y6IFRJTSBDYXB0dXJlIENvbXBhcmUgMSBvdmVyIGNhcHR1cmUgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0MyT0Y6IFRJTSBDYXB0dXJlIENvbXBhcmUgMiBvdmVyIGNhcHR1cmUgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0MzT0Y6IFRJTSBDYXB0dXJlIENvbXBhcmUgMyBvdmVyIGNhcHR1cmUgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0M0T0Y6IFRJTSBDYXB0dXJlIENvbXBhcmUgNCBvdmVyIGNhcHR1cmUgRmxhZw0KKyAgKg0KKyAgKiBAbm90ZSAgIFRJTTYgYW5kIFRJTTcgY2FuIGhhdmUgb25seSBvbmUgdXBkYXRlIGZsYWcuIA0KKyAgKiBAbm90ZSAgIFRJTV9GTEFHX0NPTSBhbmQgVElNX0ZMQUdfQnJlYWsgYXJlIHVzZWQgb25seSB3aXRoIFRJTTEgYW5kIFRJTTguICAgIA0KKyAgKg0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgVElNX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgVElNX0dldEZsYWdTdGF0dXMoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9GTEFHKQ0KK3sgDQorICBJVFN0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0dFVF9GTEFHKFRJTV9GTEFHKSk7DQorDQorICANCisgIGlmICgoVElNeC0+U1IgJiBUSU1fRkxBRykgIT0gKHVpbnQxNl90KVJFU0VUKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgcmV0dXJuIGJpdHN0YXR1czsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2xlYXJzIHRoZSBUSU14J3MgcGVuZGluZyBmbGFncy4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyBiaXQgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRkxBR19VcGRhdGU6IFRJTSB1cGRhdGUgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0MxOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDEgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0MyOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDIgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0MzOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDMgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ0M0OiBUSU0gQ2FwdHVyZSBDb21wYXJlIDQgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQ09NOiBUSU0gQ29tbXV0YXRpb24gRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfVHJpZ2dlcjogVElNIFRyaWdnZXIgRmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0ZMQUdfQnJlYWs6IFRJTSBCcmVhayBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRkxBR19DQzFPRjogVElNIENhcHR1cmUgQ29tcGFyZSAxIG92ZXIgY2FwdHVyZSBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRkxBR19DQzJPRjogVElNIENhcHR1cmUgQ29tcGFyZSAyIG92ZXIgY2FwdHVyZSBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRkxBR19DQzNPRjogVElNIENhcHR1cmUgQ29tcGFyZSAzIG92ZXIgY2FwdHVyZSBGbGFnDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRkxBR19DQzRPRjogVElNIENhcHR1cmUgQ29tcGFyZSA0IG92ZXIgY2FwdHVyZSBGbGFnDQorICAqDQorICAqIEBub3RlICAgVElNNiBhbmQgVElNNyBjYW4gaGF2ZSBvbmx5IG9uZSB1cGRhdGUgZmxhZy4gDQorICAqIEBub3RlICAgVElNX0ZMQUdfQ09NIGFuZCBUSU1fRkxBR19CcmVhayBhcmUgdXNlZCBvbmx5IHdpdGggVElNMSBhbmQgVElNOC4NCisgICogICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9DbGVhckZsYWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9GTEFHKQ0KK3sgIA0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorICAgDQorICAvKiBDbGVhciB0aGUgZmxhZ3MgKi8NCisgIFRJTXgtPlNSID0gKHVpbnQxNl90KX5USU1fRkxBRzsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ2hlY2tzIHdoZXRoZXIgdGhlIFRJTSBpbnRlcnJ1cHQgaGFzIG9jY3VycmVkIG9yIG5vdC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxIHRvIDE0IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0lUOiBzcGVjaWZpZXMgdGhlIFRJTSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX1VwZGF0ZTogVElNIHVwZGF0ZSBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQ0MxOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDEgSW50ZXJydXB0IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX0NDMjogVElNIENhcHR1cmUgQ29tcGFyZSAyIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9DQzM6IFRJTSBDYXB0dXJlIENvbXBhcmUgMyBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQ0M0OiBUSU0gQ2FwdHVyZSBDb21wYXJlIDQgSW50ZXJydXB0IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX0NPTTogVElNIENvbW11dGF0aW9uIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9UcmlnZ2VyOiBUSU0gVHJpZ2dlciBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQnJlYWs6IFRJTSBCcmVhayBJbnRlcnJ1cHQgc291cmNlDQorICAqDQorICAqIEBub3RlICAgVElNNiBhbmQgVElNNyBjYW4gZ2VuZXJhdGUgb25seSBhbiB1cGRhdGUgaW50ZXJydXB0Lg0KKyAgKiBAbm90ZSAgIFRJTV9JVF9DT00gYW5kIFRJTV9JVF9CcmVhayBhcmUgdXNlZCBvbmx5IHdpdGggVElNMSBhbmQgVElNOC4NCisgICogICAgIA0KKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgdGhlIFRJTV9JVChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBUSU1fR2V0SVRTdGF0dXMoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JVCkNCit7DQorICBJVFN0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsgIA0KKyAgdWludDE2X3QgaXRzdGF0dXMgPSAweDAsIGl0ZW5hYmxlID0gMHgwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fQUxMX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0dFVF9JVChUSU1fSVQpKTsNCisgICANCisgIGl0c3RhdHVzID0gVElNeC0+U1IgJiBUSU1fSVQ7DQorICANCisgIGl0ZW5hYmxlID0gVElNeC0+RElFUiAmIFRJTV9JVDsNCisgIGlmICgoaXRzdGF0dXMgIT0gKHVpbnQxNl90KVJFU0VUKSAmJiAoaXRlbmFibGUgIT0gKHVpbnQxNl90KVJFU0VUKSkNCisgIHsNCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgVElNeCdzIGludGVycnVwdCBwZW5kaW5nIGJpdHMuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSB0byAxNCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9JVDogc3BlY2lmaWVzIHRoZSBwZW5kaW5nIGJpdCB0byBjbGVhci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9VcGRhdGU6IFRJTTEgdXBkYXRlIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9DQzE6IFRJTSBDYXB0dXJlIENvbXBhcmUgMSBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQ0MyOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDIgSW50ZXJydXB0IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX0NDMzogVElNIENhcHR1cmUgQ29tcGFyZSAzIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9DQzQ6IFRJTSBDYXB0dXJlIENvbXBhcmUgNCBJbnRlcnJ1cHQgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSVRfQ09NOiBUSU0gQ29tbXV0YXRpb24gSW50ZXJydXB0IHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lUX1RyaWdnZXI6IFRJTSBUcmlnZ2VyIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JVF9CcmVhazogVElNIEJyZWFrIEludGVycnVwdCBzb3VyY2UNCisgICoNCisgICogQG5vdGUgICBUSU02IGFuZCBUSU03IGNhbiBnZW5lcmF0ZSBvbmx5IGFuIHVwZGF0ZSBpbnRlcnJ1cHQuDQorICAqIEBub3RlICAgVElNX0lUX0NPTSBhbmQgVElNX0lUX0JyZWFrIGFyZSB1c2VkIG9ubHkgd2l0aCBUSU0xIGFuZCBUSU04Lg0KKyAgKiAgICAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fQ2xlYXJJVFBlbmRpbmdCaXQoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JVCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BTExfUEVSSVBIKFRJTXgpKTsNCisNCisgIC8qIENsZWFyIHRoZSBJVCBwZW5kaW5nIEJpdCAqLw0KKyAgVElNeC0+U1IgPSAodWludDE2X3QpflRJTV9JVDsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgVElNeCdzIERNQSBpbnRlcmZhY2UuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0RNQUJhc2U6IERNQSBCYXNlIGFkZHJlc3MuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQmFzZV9DUjEgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJhc2VfQ1IyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQmFzZV9TTUNSDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQmFzZV9ESUVSDQorICAqICAgICAgICAgICAgQGFyZyBUSU0xX0RNQUJhc2VfU1INCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCYXNlX0VHUg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJhc2VfQ0NNUjENCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCYXNlX0NDTVIyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQmFzZV9DQ0VSDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQmFzZV9DTlQgICANCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCYXNlX1BTQyAgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJhc2VfQVJSDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BQmFzZV9SQ1INCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCYXNlX0NDUjENCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCYXNlX0NDUjINCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFCYXNlX0NDUjMgIA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJhc2VfQ0NSNA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJhc2VfQkRUUg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQUJhc2VfRENSDQorICAqIEBwYXJhbSAgVElNX0RNQUJ1cnN0TGVuZ3RoOiBETUEgQnVyc3QgbGVuZ3RoLiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIHZhbHVlDQorICAqICAgICAgICAgYmV0d2VlbjogVElNX0RNQUJ1cnN0TGVuZ3RoXzFUcmFuc2ZlciBhbmQgVElNX0RNQUJ1cnN0TGVuZ3RoXzE4VHJhbnNmZXJzLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fRE1BQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRE1BQmFzZSwgdWludDE2X3QgVElNX0RNQUJ1cnN0TGVuZ3RoKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9CQVNFKFRJTV9ETUFCYXNlKSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfTEVOR1RIKFRJTV9ETUFCdXJzdExlbmd0aCkpOw0KKw0KKyAgLyogU2V0IHRoZSBETUEgQmFzZSBhbmQgdGhlIERNQSBCdXJzdCBMZW5ndGggKi8NCisgIFRJTXgtPkRDUiA9IFRJTV9ETUFCYXNlIHwgVElNX0RNQUJ1cnN0TGVuZ3RoOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBUSU14J3MgRE1BIFJlcXVlc3RzLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUsIDYsIDcgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9ETUFTb3VyY2U6IHNwZWNpZmllcyB0aGUgRE1BIFJlcXVlc3Qgc291cmNlcy4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfVXBkYXRlOiBUSU0gdXBkYXRlIEludGVycnVwdCBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0MxOiBUSU0gQ2FwdHVyZSBDb21wYXJlIDEgRE1BIHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DQzI6IFRJTSBDYXB0dXJlIENvbXBhcmUgMiBETUEgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX0NDMzogVElNIENhcHR1cmUgQ29tcGFyZSAzIERNQSBzb3VyY2UNCisgICogICAgICAgICAgICBAYXJnIFRJTV9ETUFfQ0M0OiBUSU0gQ2FwdHVyZSBDb21wYXJlIDQgRE1BIHNvdXJjZQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0RNQV9DT006IFRJTSBDb21tdXRhdGlvbiBETUEgc291cmNlDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRE1BX1RyaWdnZXI6IFRJTSBUcmlnZ2VyIERNQSBzb3VyY2UNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBETUEgUmVxdWVzdCBzb3VyY2VzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fRE1BQ21kKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRE1BU291cmNlLCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1Q1X1BFUklQSChUSU14KSk7IA0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfU09VUkNFKFRJTV9ETUFTb3VyY2UpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIERNQSBzb3VyY2VzICovDQorICAgIFRJTXgtPkRJRVIgfD0gVElNX0RNQVNvdXJjZTsgDQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIERNQSBzb3VyY2VzICovDQorICAgIFRJTXgtPkRJRVIgJj0gKHVpbnQxNl90KX5USU1fRE1BU291cmNlOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZWxlY3RzIHRoZSBUSU14IHBlcmlwaGVyYWwgQ2FwdHVyZSBDb21wYXJlIERNQSBzb3VyY2UuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIENhcHR1cmUgQ29tcGFyZSBETUEgc291cmNlDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9TZWxlY3RDQ0RNQShUSU1fVHlwZURlZiogVElNeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIFNldCB0aGUgQ0NEUyBCaXQgKi8NCisgICAgVElNeC0+Q1IyIHw9IFRJTV9DUjJfQ0NEUzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogUmVzZXQgdGhlIENDRFMgQml0ICovDQorICAgIFRJTXgtPkNSMiAmPSAodWludDE2X3QpflRJTV9DUjJfQ0NEUzsNCisgIH0NCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0dyb3VwNiBDbG9ja3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgIENsb2NrcyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvY2tzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IGludGVybmFsIENsb2NrDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fSW50ZXJuYWxDbG9ja0NvbmZpZyhUSU1fVHlwZURlZiogVElNeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMl9QRVJJUEgoVElNeCkpOw0KKw0KKyAgLyogRGlzYWJsZSBzbGF2ZSBtb2RlIHRvIGNsb2NrIHRoZSBwcmVzY2FsZXIgZGlyZWN0bHkgd2l0aCB0aGUgaW50ZXJuYWwgY2xvY2sgKi8NCisgIFRJTXgtPlNNQ1IgJj0gICh1aW50MTZfdCl+VElNX1NNQ1JfU01TOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IEludGVybmFsIFRyaWdnZXIgYXMgRXh0ZXJuYWwgQ2xvY2sNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1LCA4LCA5IG9yIDEyIHRvIHNlbGVjdCB0aGUgVElNIA0KKyAgKiAgICAgICAgIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0lucHV0VHJpZ2dlclNvdXJjZTogVHJpZ2dlciBzb3VyY2UuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfSVRSMDogSW50ZXJuYWwgVHJpZ2dlciAwDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfSVRSMTogSW50ZXJuYWwgVHJpZ2dlciAxDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfSVRSMjogSW50ZXJuYWwgVHJpZ2dlciAyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfSVRSMzogSW50ZXJuYWwgVHJpZ2dlciAzDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9JVFJ4RXh0ZXJuYWxDbG9ja0NvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lucHV0VHJpZ2dlclNvdXJjZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMl9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlRFUk5BTF9UUklHR0VSX1NFTEVDVElPTihUSU1fSW5wdXRUcmlnZ2VyU291cmNlKSk7DQorDQorICAvKiBTZWxlY3QgdGhlIEludGVybmFsIFRyaWdnZXIgKi8NCisgIFRJTV9TZWxlY3RJbnB1dFRyaWdnZXIoVElNeCwgVElNX0lucHV0VHJpZ2dlclNvdXJjZSk7DQorDQorICAvKiBTZWxlY3QgdGhlIEV4dGVybmFsIGNsb2NrIG1vZGUxICovDQorICBUSU14LT5TTUNSIHw9IFRJTV9TbGF2ZU1vZGVfRXh0ZXJuYWwxOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IFRyaWdnZXIgYXMgRXh0ZXJuYWwgQ2xvY2sNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1LCA4LCA5LCAxMCwgMTEsIDEyLCAxMyBvciAxNCAgDQorICAqICAgICAgICAgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fVEl4RXh0ZXJuYWxDTEtTb3VyY2U6IFRyaWdnZXIgc291cmNlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RJeEV4dGVybmFsQ0xLMVNvdXJjZV9USTFFRDogVEkxIEVkZ2UgRGV0ZWN0b3INCisgICogICAgICAgICAgICBAYXJnIFRJTV9USXhFeHRlcm5hbENMSzFTb3VyY2VfVEkxOiBGaWx0ZXJlZCBUaW1lciBJbnB1dCAxDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVEl4RXh0ZXJuYWxDTEsxU291cmNlX1RJMjogRmlsdGVyZWQgVGltZXIgSW5wdXQgMg0KKyAgKiBAcGFyYW0gIFRJTV9JQ1BvbGFyaXR5OiBzcGVjaWZpZXMgdGhlIFRJeCBQb2xhcml0eS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BvbGFyaXR5X1Jpc2luZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUG9sYXJpdHlfRmFsbGluZw0KKyAgKiBAcGFyYW0gIElDRmlsdGVyOiBzcGVjaWZpZXMgdGhlIGZpbHRlciB2YWx1ZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwIGFuZCAweEYuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9USXhFeHRlcm5hbENsb2NrQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fVEl4RXh0ZXJuYWxDTEtTb3VyY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNQb2xhcml0eSwgdWludDE2X3QgSUNGaWx0ZXIpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUE9MQVJJVFkoVElNX0lDUG9sYXJpdHkpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKElDRmlsdGVyKSk7DQorDQorICAvKiBDb25maWd1cmUgdGhlIFRpbWVyIElucHV0IENsb2NrIFNvdXJjZSAqLw0KKyAgaWYgKFRJTV9USXhFeHRlcm5hbENMS1NvdXJjZSA9PSBUSU1fVEl4RXh0ZXJuYWxDTEsxU291cmNlX1RJMikNCisgIHsNCisgICAgVEkyX0NvbmZpZyhUSU14LCBUSU1fSUNQb2xhcml0eSwgVElNX0lDU2VsZWN0aW9uX0RpcmVjdFRJLCBJQ0ZpbHRlcik7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIFRJMV9Db25maWcoVElNeCwgVElNX0lDUG9sYXJpdHksIFRJTV9JQ1NlbGVjdGlvbl9EaXJlY3RUSSwgSUNGaWx0ZXIpOw0KKyAgfQ0KKyAgLyogU2VsZWN0IHRoZSBUcmlnZ2VyIHNvdXJjZSAqLw0KKyAgVElNX1NlbGVjdElucHV0VHJpZ2dlcihUSU14LCBUSU1fVEl4RXh0ZXJuYWxDTEtTb3VyY2UpOw0KKyAgLyogU2VsZWN0IHRoZSBFeHRlcm5hbCBjbG9jayBtb2RlMSAqLw0KKyAgVElNeC0+U01DUiB8PSBUSU1fU2xhdmVNb2RlX0V4dGVybmFsMTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlcyB0aGUgRXh0ZXJuYWwgY2xvY2sgTW9kZTENCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0V4dFRSR1ByZXNjYWxlcjogVGhlIGV4dGVybmFsIFRyaWdnZXIgUHJlc2NhbGVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V4dFRSR1BTQ19PRkY6IEVUUlAgUHJlc2NhbGVyIE9GRi4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9FeHRUUkdQU0NfRElWMjogRVRSUCBmcmVxdWVuY3kgZGl2aWRlZCBieSAyLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V4dFRSR1BTQ19ESVY0OiBFVFJQIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDQuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXh0VFJHUFNDX0RJVjg6IEVUUlAgZnJlcXVlbmN5IGRpdmlkZWQgYnkgOC4NCisgICogQHBhcmFtICBUSU1fRXh0VFJHUG9sYXJpdHk6IFRoZSBleHRlcm5hbCBUcmlnZ2VyIFBvbGFyaXR5Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V4dFRSR1BvbGFyaXR5X0ludmVydGVkOiBhY3RpdmUgbG93IG9yIGZhbGxpbmcgZWRnZSBhY3RpdmUuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXh0VFJHUG9sYXJpdHlfTm9uSW52ZXJ0ZWQ6IGFjdGl2ZSBoaWdoIG9yIHJpc2luZyBlZGdlIGFjdGl2ZS4NCisgICogQHBhcmFtICBFeHRUUkdGaWx0ZXI6IEV4dGVybmFsIFRyaWdnZXIgRmlsdGVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwIGFuZCAweDBGDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9FVFJDbG9ja01vZGUxQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRXh0VFJHUHJlc2NhbGVyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fRXh0VFJHUG9sYXJpdHksIHVpbnQxNl90IEV4dFRSR0ZpbHRlcikNCit7DQorICB1aW50MTZfdCB0bXBzbWNyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VYVF9QUkVTQ0FMRVIoVElNX0V4dFRSR1ByZXNjYWxlcikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FWFRfUE9MQVJJVFkoVElNX0V4dFRSR1BvbGFyaXR5KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VYVF9GSUxURVIoRXh0VFJHRmlsdGVyKSk7DQorICAvKiBDb25maWd1cmUgdGhlIEVUUiBDbG9jayBzb3VyY2UgKi8NCisgIFRJTV9FVFJDb25maWcoVElNeCwgVElNX0V4dFRSR1ByZXNjYWxlciwgVElNX0V4dFRSR1BvbGFyaXR5LCBFeHRUUkdGaWx0ZXIpOw0KKyAgDQorICAvKiBHZXQgdGhlIFRJTXggU01DUiByZWdpc3RlciB2YWx1ZSAqLw0KKyAgdG1wc21jciA9IFRJTXgtPlNNQ1I7DQorDQorICAvKiBSZXNldCB0aGUgU01TIEJpdHMgKi8NCisgIHRtcHNtY3IgJj0gKHVpbnQxNl90KX5USU1fU01DUl9TTVM7DQorDQorICAvKiBTZWxlY3QgdGhlIEV4dGVybmFsIGNsb2NrIG1vZGUxICovDQorICB0bXBzbWNyIHw9IFRJTV9TbGF2ZU1vZGVfRXh0ZXJuYWwxOw0KKw0KKyAgLyogU2VsZWN0IHRoZSBUcmlnZ2VyIHNlbGVjdGlvbiA6IEVUUkYgKi8NCisgIHRtcHNtY3IgJj0gKHVpbnQxNl90KX5USU1fU01DUl9UUzsNCisgIHRtcHNtY3IgfD0gVElNX1RTX0VUUkY7DQorDQorICAvKiBXcml0ZSB0byBUSU14IFNNQ1IgKi8NCisgIFRJTXgtPlNNQ1IgPSB0bXBzbWNyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBFeHRlcm5hbCBjbG9jayBNb2RlMg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlICAxLCAyLCAzLCA0LCA1IG9yIDggdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fRXh0VFJHUHJlc2NhbGVyOiBUaGUgZXh0ZXJuYWwgVHJpZ2dlciBQcmVzY2FsZXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXh0VFJHUFNDX09GRjogRVRSUCBQcmVzY2FsZXIgT0ZGLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V4dFRSR1BTQ19ESVYyOiBFVFJQIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDIuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXh0VFJHUFNDX0RJVjQ6IEVUUlAgZnJlcXVlbmN5IGRpdmlkZWQgYnkgNC4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9FeHRUUkdQU0NfRElWODogRVRSUCBmcmVxdWVuY3kgZGl2aWRlZCBieSA4Lg0KKyAgKiBAcGFyYW0gIFRJTV9FeHRUUkdQb2xhcml0eTogVGhlIGV4dGVybmFsIFRyaWdnZXIgUG9sYXJpdHkuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXh0VFJHUG9sYXJpdHlfSW52ZXJ0ZWQ6IGFjdGl2ZSBsb3cgb3IgZmFsbGluZyBlZGdlIGFjdGl2ZS4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9FeHRUUkdQb2xhcml0eV9Ob25JbnZlcnRlZDogYWN0aXZlIGhpZ2ggb3IgcmlzaW5nIGVkZ2UgYWN0aXZlLg0KKyAgKiBAcGFyYW0gIEV4dFRSR0ZpbHRlcjogRXh0ZXJuYWwgVHJpZ2dlciBGaWx0ZXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAgYW5kIDB4MEYNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX0VUUkNsb2NrTW9kZTJDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9FeHRUUkdQcmVzY2FsZXIsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgVElNX0V4dFRSR1BvbGFyaXR5LCB1aW50MTZfdCBFeHRUUkdGaWx0ZXIpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDNfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fRVhUX1BSRVNDQUxFUihUSU1fRXh0VFJHUHJlc2NhbGVyKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VYVF9QT0xBUklUWShUSU1fRXh0VFJHUG9sYXJpdHkpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fRVhUX0ZJTFRFUihFeHRUUkdGaWx0ZXIpKTsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgRVRSIENsb2NrIHNvdXJjZSAqLw0KKyAgVElNX0VUUkNvbmZpZyhUSU14LCBUSU1fRXh0VFJHUHJlc2NhbGVyLCBUSU1fRXh0VFJHUG9sYXJpdHksIEV4dFRSR0ZpbHRlcik7DQorDQorICAvKiBFbmFibGUgdGhlIEV4dGVybmFsIGNsb2NrIG1vZGUyICovDQorICBUSU14LT5TTUNSIHw9IFRJTV9TTUNSX0VDRTsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0dyb3VwNyBTeW5jaHJvbml6YXRpb24gbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgIFN5bmNocm9uaXphdGlvbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgDQorICAgICAgICAgICAgICBUSU0gRHJpdmVyOiBob3cgdG8gdXNlIGl0IGluIHN5bmNocm9uaXphdGlvbiBNb2RlDQorICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gDQorICAgICAgIENhc2Ugb2YgdHdvL3NldmVyYWwgVGltZXJzDQorICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAgICAgIDEuIENvbmZpZ3VyZSB0aGUgTWFzdGVyIFRpbWVycyB1c2luZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoNCisgICAgICAgICAgLSB2b2lkIFRJTV9TZWxlY3RPdXRwdXRUcmlnZ2VyKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fVFJHT1NvdXJjZSk7IA0KKyAgICAgICAgICAtIHZvaWQgVElNX1NlbGVjdE1hc3RlclNsYXZlTW9kZShUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX01hc3RlclNsYXZlTW9kZSk7ICANCisgICAgICAgMi4gQ29uZmlndXJlIHRoZSBTbGF2ZSBUaW1lcnMgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IA0KKyAgICAgICAgICAtIHZvaWQgVElNX1NlbGVjdElucHV0VHJpZ2dlcihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lucHV0VHJpZ2dlclNvdXJjZSk7ICANCisgICAgICAgICAgLSB2b2lkIFRJTV9TZWxlY3RTbGF2ZU1vZGUoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9TbGF2ZU1vZGUpOyANCisgICAgICAgICAgDQorICAgICAgIENhc2Ugb2YgVGltZXJzIGFuZCBleHRlcm5hbCB0cmlnZ2VyKEVUUiBwaW4pDQorICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICAgICAgIA0KKyAgICAgICAxLiBDb25maWd1cmUgdGhlIEV4dGVybmFsIHRyaWdnZXIgdXNpbmcgdGhpcyBmdW5jdGlvbjoNCisgICAgICAgICAgLSB2b2lkIFRJTV9FVFJDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9FeHRUUkdQcmVzY2FsZXIsIHVpbnQxNl90IFRJTV9FeHRUUkdQb2xhcml0eSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgRXh0VFJHRmlsdGVyKTsNCisgICAgICAgMi4gQ29uZmlndXJlIHRoZSBTbGF2ZSBUaW1lcnMgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6IA0KKyAgICAgICAgICAtIHZvaWQgVElNX1NlbGVjdElucHV0VHJpZ2dlcihUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lucHV0VHJpZ2dlclNvdXJjZSk7ICANCisgICAgICAgICAgLSB2b2lkIFRJTV9TZWxlY3RTbGF2ZU1vZGUoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9TbGF2ZU1vZGUpOyANCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgSW5wdXQgVHJpZ2dlciBzb3VyY2UNCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAgMSwgMiwgMywgNCwgNSwgOCwgOSwgMTAsIDExLCAxMiwgMTMgb3IgMTQgIA0KKyAgKiAgICAgICAgIHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0lucHV0VHJpZ2dlclNvdXJjZTogVGhlIElucHV0IFRyaWdnZXIgc291cmNlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RTX0lUUjA6IEludGVybmFsIFRyaWdnZXIgMA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RTX0lUUjE6IEludGVybmFsIFRyaWdnZXIgMQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RTX0lUUjI6IEludGVybmFsIFRyaWdnZXIgMg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RTX0lUUjM6IEludGVybmFsIFRyaWdnZXIgMw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RTX1RJMUZfRUQ6IFRJMSBFZGdlIERldGVjdG9yDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfVEkxRlAxOiBGaWx0ZXJlZCBUaW1lciBJbnB1dCAxDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfVEkyRlAyOiBGaWx0ZXJlZCBUaW1lciBJbnB1dCAyDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFNfRVRSRjogRXh0ZXJuYWwgVHJpZ2dlciBpbnB1dA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fU2VsZWN0SW5wdXRUcmlnZ2VyKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fSW5wdXRUcmlnZ2VyU291cmNlKQ0KK3sNCisgIHVpbnQxNl90IHRtcHNtY3IgPSAwOw0KKw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDFfUEVSSVBIKFRJTXgpKTsgDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX1RSSUdHRVJfU0VMRUNUSU9OKFRJTV9JbnB1dFRyaWdnZXJTb3VyY2UpKTsNCisNCisgIC8qIEdldCB0aGUgVElNeCBTTUNSIHJlZ2lzdGVyIHZhbHVlICovDQorICB0bXBzbWNyID0gVElNeC0+U01DUjsNCisNCisgIC8qIFJlc2V0IHRoZSBUUyBCaXRzICovDQorICB0bXBzbWNyICY9ICh1aW50MTZfdCl+VElNX1NNQ1JfVFM7DQorDQorICAvKiBTZXQgdGhlIElucHV0IFRyaWdnZXIgc291cmNlICovDQorICB0bXBzbWNyIHw9IFRJTV9JbnB1dFRyaWdnZXJTb3VyY2U7DQorDQorICAvKiBXcml0ZSB0byBUSU14IFNNQ1IgKi8NCisgIFRJTXgtPlNNQ1IgPSB0bXBzbWNyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZWxlY3RzIHRoZSBUSU14IFRyaWdnZXIgT3V0cHV0IE1vZGUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgNiwgNyBvciA4IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwuDQorICAqICAgICANCisgICogQHBhcmFtICBUSU1fVFJHT1NvdXJjZTogc3BlY2lmaWVzIHRoZSBUcmlnZ2VyIE91dHB1dCBzb3VyY2UuDQorICAqICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICoNCisgICogIC0gRm9yIGFsbCBUSU14DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFJHT1NvdXJjZV9SZXNldDogIFRoZSBVRyBiaXQgaW4gdGhlIFRJTV9FR1IgcmVnaXN0ZXIgaXMgdXNlZCBhcyB0aGUgdHJpZ2dlciBvdXRwdXQoVFJHTykNCisgICogICAgICAgICAgICBAYXJnIFRJTV9UUkdPU291cmNlX0VuYWJsZTogVGhlIENvdW50ZXIgRW5hYmxlIENFTiBpcyB1c2VkIGFzIHRoZSB0cmlnZ2VyIG91dHB1dChUUkdPKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RSR09Tb3VyY2VfVXBkYXRlOiBUaGUgdXBkYXRlIGV2ZW50IGlzIHNlbGVjdGVkIGFzIHRoZSB0cmlnZ2VyIG91dHB1dChUUkdPKQ0KKyAgKg0KKyAgKiAgLSBGb3IgYWxsIFRJTXggZXhjZXB0IFRJTTYgYW5kIFRJTTcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9UUkdPU291cmNlX09DMTogVGhlIHRyaWdnZXIgb3V0cHV0IHNlbmRzIGEgcG9zaXRpdmUgcHVsc2Ugd2hlbiB0aGUgQ0MxSUYgZmxhZw0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0byBiZSBzZXQsIGFzIHNvb24gYXMgYSBjYXB0dXJlIG9yIGNvbXBhcmUgbWF0Y2ggb2NjdXJzKFRSR08pDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFJHT1NvdXJjZV9PQzFSZWY6IE9DMVJFRiBzaWduYWwgaXMgdXNlZCBhcyB0aGUgdHJpZ2dlciBvdXRwdXQoVFJHTykNCisgICogICAgICAgICAgICBAYXJnIFRJTV9UUkdPU291cmNlX09DMlJlZjogT0MyUkVGIHNpZ25hbCBpcyB1c2VkIGFzIHRoZSB0cmlnZ2VyIG91dHB1dChUUkdPKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1RSR09Tb3VyY2VfT0MzUmVmOiBPQzNSRUYgc2lnbmFsIGlzIHVzZWQgYXMgdGhlIHRyaWdnZXIgb3V0cHV0KFRSR08pDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fVFJHT1NvdXJjZV9PQzRSZWY6IE9DNFJFRiBzaWduYWwgaXMgdXNlZCBhcyB0aGUgdHJpZ2dlciBvdXRwdXQoVFJHTykNCisgICoNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NlbGVjdE91dHB1dFRyaWdnZXIoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9UUkdPU291cmNlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1Q1X1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX1RSR09fU09VUkNFKFRJTV9UUkdPU291cmNlKSk7DQorDQorICAvKiBSZXNldCB0aGUgTU1TIEJpdHMgKi8NCisgIFRJTXgtPkNSMiAmPSAodWludDE2X3QpflRJTV9DUjJfTU1TOw0KKyAgLyogU2VsZWN0IHRoZSBUUkdPIHNvdXJjZSAqLw0KKyAgVElNeC0+Q1IyIHw9ICBUSU1fVFJHT1NvdXJjZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgVElNeCBTbGF2ZSBNb2RlLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUsIDgsIDkgb3IgMTIgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fU2xhdmVNb2RlOiBzcGVjaWZpZXMgdGhlIFRpbWVyIFNsYXZlIE1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fU2xhdmVNb2RlX1Jlc2V0OiBSaXNpbmcgZWRnZSBvZiB0aGUgc2VsZWN0ZWQgdHJpZ2dlciBzaWduYWwoVFJHSSkgcmVpbml0aWFsaXplIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvdW50ZXIgYW5kIHRyaWdnZXJzIGFuIHVwZGF0ZSBvZiB0aGUgcmVnaXN0ZXJzDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fU2xhdmVNb2RlX0dhdGVkOiAgICAgVGhlIGNvdW50ZXIgY2xvY2sgaXMgZW5hYmxlZCB3aGVuIHRoZSB0cmlnZ2VyIHNpZ25hbCAoVFJHSSkgaXMgaGlnaA0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX1NsYXZlTW9kZV9UcmlnZ2VyOiAgIFRoZSBjb3VudGVyIHN0YXJ0cyBhdCBhIHJpc2luZyBlZGdlIG9mIHRoZSB0cmlnZ2VyIFRSR0kNCisgICogICAgICAgICAgICBAYXJnIFRJTV9TbGF2ZU1vZGVfRXh0ZXJuYWwxOiBSaXNpbmcgZWRnZXMgb2YgdGhlIHNlbGVjdGVkIHRyaWdnZXIgKFRSR0kpIGNsb2NrIHRoZSBjb3VudGVyDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9TZWxlY3RTbGF2ZU1vZGUoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9TbGF2ZU1vZGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDJfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fU0xBVkVfTU9ERShUSU1fU2xhdmVNb2RlKSk7DQorDQorICAvKiBSZXNldCB0aGUgU01TIEJpdHMgKi8NCisgIFRJTXgtPlNNQ1IgJj0gKHVpbnQxNl90KX5USU1fU01DUl9TTVM7DQorDQorICAvKiBTZWxlY3QgdGhlIFNsYXZlIE1vZGUgKi8NCisgIFRJTXgtPlNNQ1IgfD0gVElNX1NsYXZlTW9kZTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyBvciBSZXNldHMgdGhlIFRJTXggTWFzdGVyL1NsYXZlIE1vZGUuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9NYXN0ZXJTbGF2ZU1vZGU6IHNwZWNpZmllcyB0aGUgVGltZXIgTWFzdGVyIFNsYXZlIE1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fTWFzdGVyU2xhdmVNb2RlX0VuYWJsZTogc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIGN1cnJlbnQgdGltZXINCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgaXRzIHNsYXZlcyAodGhyb3VnaCBUUkdPKQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX01hc3RlclNsYXZlTW9kZV9EaXNhYmxlOiBObyBhY3Rpb24NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVElNX1NlbGVjdE1hc3RlclNsYXZlTW9kZShUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX01hc3RlclNsYXZlTW9kZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9MSVNUMl9QRVJJUEgoVElNeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9NU01fU1RBVEUoVElNX01hc3RlclNsYXZlTW9kZSkpOw0KKw0KKyAgLyogUmVzZXQgdGhlIE1TTSBCaXQgKi8NCisgIFRJTXgtPlNNQ1IgJj0gKHVpbnQxNl90KX5USU1fU01DUl9NU007DQorICANCisgIC8qIFNldCBvciBSZXNldCB0aGUgTVNNIEJpdCAqLw0KKyAgVElNeC0+U01DUiB8PSBUSU1fTWFzdGVyU2xhdmVNb2RlOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU14IEV4dGVybmFsIFRyaWdnZXIgKEVUUikuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9FeHRUUkdQcmVzY2FsZXI6IFRoZSBleHRlcm5hbCBUcmlnZ2VyIFByZXNjYWxlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9FeHRUUkdQU0NfT0ZGOiBFVFJQIFByZXNjYWxlciBPRkYuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRXh0VFJHUFNDX0RJVjI6IEVUUlAgZnJlcXVlbmN5IGRpdmlkZWQgYnkgMi4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9FeHRUUkdQU0NfRElWNDogRVRSUCBmcmVxdWVuY3kgZGl2aWRlZCBieSA0Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V4dFRSR1BTQ19ESVY4OiBFVFJQIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IDguDQorICAqIEBwYXJhbSAgVElNX0V4dFRSR1BvbGFyaXR5OiBUaGUgZXh0ZXJuYWwgVHJpZ2dlciBQb2xhcml0eS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9FeHRUUkdQb2xhcml0eV9JbnZlcnRlZDogYWN0aXZlIGxvdyBvciBmYWxsaW5nIGVkZ2UgYWN0aXZlLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0V4dFRSR1BvbGFyaXR5X05vbkludmVydGVkOiBhY3RpdmUgaGlnaCBvciByaXNpbmcgZWRnZSBhY3RpdmUuDQorICAqIEBwYXJhbSAgRXh0VFJHRmlsdGVyOiBFeHRlcm5hbCBUcmlnZ2VyIEZpbHRlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMCBhbmQgMHgwRg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fRVRSQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRXh0VFJHUHJlc2NhbGVyLA0KKyAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fRXh0VFJHUG9sYXJpdHksIHVpbnQxNl90IEV4dFRSR0ZpbHRlcikNCit7DQorICB1aW50MTZfdCB0bXBzbWNyID0gMDsNCisNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QzX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VYVF9QUkVTQ0FMRVIoVElNX0V4dFRSR1ByZXNjYWxlcikpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FWFRfUE9MQVJJVFkoVElNX0V4dFRSR1BvbGFyaXR5KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VYVF9GSUxURVIoRXh0VFJHRmlsdGVyKSk7DQorDQorICB0bXBzbWNyID0gVElNeC0+U01DUjsNCisNCisgIC8qIFJlc2V0IHRoZSBFVFIgQml0cyAqLw0KKyAgdG1wc21jciAmPSBTTUNSX0VUUl9NQVNLOw0KKw0KKyAgLyogU2V0IHRoZSBQcmVzY2FsZXIsIHRoZSBGaWx0ZXIgdmFsdWUgYW5kIHRoZSBQb2xhcml0eSAqLw0KKyAgdG1wc21jciB8PSAodWludDE2X3QpKFRJTV9FeHRUUkdQcmVzY2FsZXIgfCAodWludDE2X3QpKFRJTV9FeHRUUkdQb2xhcml0eSB8ICh1aW50MTZfdCkoRXh0VFJHRmlsdGVyIDw8ICh1aW50MTZfdCk4KSkpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBTTUNSICovDQorICBUSU14LT5TTUNSID0gdG1wc21jcjsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVElNX0dyb3VwOCBTcGVjaWZpYyBpbnRlcmZhY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgIFNwZWNpZmljIGludGVyZmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICBTcGVjaWZpYyBpbnRlcmZhY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIFRJTXggRW5jb2RlciBJbnRlcmZhY2UuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgOCwgOSBvciAxMiB0byBzZWxlY3QgdGhlIFRJTSANCisgICogICAgICAgICBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9FbmNvZGVyTW9kZTogc3BlY2lmaWVzIHRoZSBUSU14IEVuY29kZXIgTW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9FbmNvZGVyTW9kZV9USTE6IENvdW50ZXIgY291bnRzIG9uIFRJMUZQMSBlZGdlIGRlcGVuZGluZyBvbiBUSTJGUDIgbGV2ZWwuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fRW5jb2Rlck1vZGVfVEkyOiBDb3VudGVyIGNvdW50cyBvbiBUSTJGUDIgZWRnZSBkZXBlbmRpbmcgb24gVEkxRlAxIGxldmVsLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0VuY29kZXJNb2RlX1RJMTI6IENvdW50ZXIgY291bnRzIG9uIGJvdGggVEkxRlAxIGFuZCBUSTJGUDIgZWRnZXMgZGVwZW5kaW5nDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGxldmVsIG9mIHRoZSBvdGhlciBpbnB1dC4NCisgICogQHBhcmFtICBUSU1fSUMxUG9sYXJpdHk6IHNwZWNpZmllcyB0aGUgSUMxIFBvbGFyaXR5DQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9GYWxsaW5nOiBJQyBGYWxsaW5nIGVkZ2UuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9SaXNpbmc6IElDIFJpc2luZyBlZGdlLg0KKyAgKiBAcGFyYW0gIFRJTV9JQzJQb2xhcml0eTogc3BlY2lmaWVzIHRoZSBJQzIgUG9sYXJpdHkNCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BvbGFyaXR5X0ZhbGxpbmc6IElDIEZhbGxpbmcgZWRnZS4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BvbGFyaXR5X1Jpc2luZzogSUMgUmlzaW5nIGVkZ2UuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9FbmNvZGVySW50ZXJmYWNlQ29uZmlnKFRJTV9UeXBlRGVmKiBUSU14LCB1aW50MTZfdCBUSU1fRW5jb2Rlck1vZGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUMxUG9sYXJpdHksIHVpbnQxNl90IFRJTV9JQzJQb2xhcml0eSkNCit7DQorICB1aW50MTZfdCB0bXBzbWNyID0gMDsNCisgIHVpbnQxNl90IHRtcGNjbXIxID0gMDsNCisgIHVpbnQxNl90IHRtcGNjZXIgPSAwOw0KKyAgICANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1QyX1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfTU9ERShUSU1fRW5jb2Rlck1vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19USU1fSUNfUE9MQVJJVFkoVElNX0lDMVBvbGFyaXR5KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BPTEFSSVRZKFRJTV9JQzJQb2xhcml0eSkpOw0KKw0KKyAgLyogR2V0IHRoZSBUSU14IFNNQ1IgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcHNtY3IgPSBUSU14LT5TTUNSOw0KKw0KKyAgLyogR2V0IHRoZSBUSU14IENDTVIxIHJlZ2lzdGVyIHZhbHVlICovDQorICB0bXBjY21yMSA9IFRJTXgtPkNDTVIxOw0KKw0KKyAgLyogR2V0IHRoZSBUSU14IENDRVIgcmVnaXN0ZXIgdmFsdWUgKi8NCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOw0KKw0KKyAgLyogU2V0IHRoZSBlbmNvZGVyIE1vZGUgKi8NCisgIHRtcHNtY3IgJj0gKHVpbnQxNl90KX5USU1fU01DUl9TTVM7DQorICB0bXBzbWNyIHw9IFRJTV9FbmNvZGVyTW9kZTsNCisNCisgIC8qIFNlbGVjdCB0aGUgQ2FwdHVyZSBDb21wYXJlIDEgYW5kIHRoZSBDYXB0dXJlIENvbXBhcmUgMiBhcyBpbnB1dCAqLw0KKyAgdG1wY2NtcjEgJj0gKCh1aW50MTZfdCl+VElNX0NDTVIxX0NDMVMpICYgKCh1aW50MTZfdCl+VElNX0NDTVIxX0NDMlMpOw0KKyAgdG1wY2NtcjEgfD0gVElNX0NDTVIxX0NDMVNfMCB8IFRJTV9DQ01SMV9DQzJTXzA7DQorDQorICAvKiBTZXQgdGhlIFRJMSBhbmQgdGhlIFRJMiBQb2xhcml0aWVzICovDQorICB0bXBjY2VyICY9ICgodWludDE2X3QpflRJTV9DQ0VSX0NDMVApICYgKCh1aW50MTZfdCl+VElNX0NDRVJfQ0MyUCk7DQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX0lDMVBvbGFyaXR5IHwgKHVpbnQxNl90KShUSU1fSUMyUG9sYXJpdHkgPDwgKHVpbnQxNl90KTQpKTsNCisNCisgIC8qIFdyaXRlIHRvIFRJTXggU01DUiAqLw0KKyAgVElNeC0+U01DUiA9IHRtcHNtY3I7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIxICovDQorICBUSU14LT5DQ01SMSA9IHRtcGNjbXIxOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ0VSICovDQorICBUSU14LT5DQ0VSID0gdG1wY2NlcjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVElNeCdzIEhhbGwgc2Vuc29yIGludGVyZmFjZS4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1LCA4LCA5IG9yIDEyIHRvIHNlbGVjdCB0aGUgVElNIA0KKyAgKiAgICAgICAgIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgVElNeCBIYWxsIHNlbnNvciBpbnRlcmZhY2UuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFRJTV9TZWxlY3RIYWxsU2Vuc29yKFRJTV9UeXBlRGVmKiBUSU14LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19USU1fTElTVDJfUEVSSVBIKFRJTXgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorDQorICBpZiAoTmV3U3RhdGUgIT0gRElTQUJMRSkNCisgIHsNCisgICAgLyogU2V0IHRoZSBUSTFTIEJpdCAqLw0KKyAgICBUSU14LT5DUjIgfD0gVElNX0NSMl9USTFTOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBSZXNldCB0aGUgVEkxUyBCaXQgKi8NCisgICAgVElNeC0+Q1IyICY9ICh1aW50MTZfdCl+VElNX0NSMl9USTFTOw0KKyAgfQ0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBUSU1fR3JvdXA5IFNwZWNpZmljIHJlbWFwcGluZyBtYW5hZ2VtZW50IGZ1bmN0aW9uDQorICogIEBicmllZiAgIFNwZWNpZmljIHJlbWFwcGluZyBtYW5hZ2VtZW50IGZ1bmN0aW9uDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmljIHJlbWFwcGluZyBtYW5hZ2VtZW50IGZ1bmN0aW9uDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBUSU0yLCBUSU01IGFuZCBUSU0xMSBSZW1hcHBpbmcgaW5wdXQgY2FwYWJpbGl0aWVzLg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDIsIDUgb3IgMTEgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fUmVtYXA6IHNwZWNpZmllcyB0aGUgVElNIGlucHV0IHJlbWFwcGluZyBzb3VyY2UuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU0yX1RJTThfVFJHTzogVElNMiBJVFIxIGlucHV0IGlzIGNvbm5lY3RlZCB0byBUSU04IFRyaWdnZXIgb3V0cHV0KGRlZmF1bHQpDQorICAqICAgICAgICAgICAgQGFyZyBUSU0yX0VUSF9QVFA6ICAgVElNMiBJVFIxIGlucHV0IGlzIGNvbm5lY3RlZCB0byBFVEggUFRQIHRyb2dnZXIgb3V0cHV0Lg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNMl9VU0JGU19TT0Y6IFRJTTIgSVRSMSBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gVVNCIEZTIFNPRi4gDQorICAqICAgICAgICAgICAgQGFyZyBUSU0yX1VTQkhTX1NPRjogVElNMiBJVFIxIGlucHV0IGlzIGNvbm5lY3RlZCB0byBVU0IgSFMgU09GLiANCisgICogICAgICAgICAgICBAYXJnIFRJTTVfR1BJTzogICAgICBUSU01IENINCBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gZGVkaWNhdGVkIFRpbWVyIHBpbihkZWZhdWx0KQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNNV9MU0k6ICAgICAgIFRJTTUgQ0g0IGlucHV0IGlzIGNvbm5lY3RlZCB0byBMU0kgY2xvY2suDQorICAqICAgICAgICAgICAgQGFyZyBUSU01X0xTRTogICAgICAgVElNNSBDSDQgaW5wdXQgaXMgY29ubmVjdGVkIHRvIExTRSBjbG9jay4NCisgICogICAgICAgICAgICBAYXJnIFRJTTVfUlRDOiAgICAgICBUSU01IENINCBpbnB1dCBpcyBjb25uZWN0ZWQgdG8gUlRDIE91dHB1dCBldmVudC4NCisgICogICAgICAgICAgICBAYXJnIFRJTTExX0dQSU86ICAgICBUSU0xMSBDSDQgaW5wdXQgaXMgY29ubmVjdGVkIHRvIGRlZGljYXRlZCBUaW1lciBwaW4oZGVmYXVsdCkgDQorICAqICAgICAgICAgICAgQGFyZyBUSU0xMV9IU0U6ICAgICAgVElNMTEgQ0g0IGlucHV0IGlzIGNvbm5lY3RlZCB0byBIU0VfUlRDIGNsb2NrDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhTRSBkaXZpZGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIHByZXNjYWxlcikgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBUSU1fUmVtYXBDb25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9SZW1hcCkNCit7DQorIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVElNX0xJU1Q2X1BFUklQSChUSU14KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVElNX1JFTUFQKFRJTV9SZW1hcCkpOw0KKw0KKyAgLyogU2V0IHRoZSBUaW1lciByZW1hcHBpbmcgY29uZmlndXJhdGlvbiAqLw0KKyAgVElNeC0+T1IgPSAgVElNX1JlbWFwOw0KK30NCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBUSTEgYXMgSW5wdXQuDQorICAqIEBwYXJhbSAgVElNeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSwgOCwgOSwgMTAsIDExLCAxMiwgMTMgb3IgMTQgDQorICAqICAgICAgICAgdG8gc2VsZWN0IHRoZSBUSU0gcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBUSU1fSUNQb2xhcml0eSA6IFRoZSBJbnB1dCBQb2xhcml0eS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BvbGFyaXR5X1Jpc2luZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUG9sYXJpdHlfRmFsbGluZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUG9sYXJpdHlfQm90aEVkZ2UgIA0KKyAgKiBAcGFyYW0gIFRJTV9JQ1NlbGVjdGlvbjogc3BlY2lmaWVzIHRoZSBpbnB1dCB0byBiZSB1c2VkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDU2VsZWN0aW9uX0RpcmVjdFRJOiBUSU0gSW5wdXQgMSBpcyBzZWxlY3RlZCB0byBiZSBjb25uZWN0ZWQgdG8gSUMxLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDU2VsZWN0aW9uX0luZGlyZWN0VEk6IFRJTSBJbnB1dCAxIGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBJQzIuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNTZWxlY3Rpb25fVFJDOiBUSU0gSW5wdXQgMSBpcyBzZWxlY3RlZCB0byBiZSBjb25uZWN0ZWQgdG8gVFJDLg0KKyAgKiBAcGFyYW0gIFRJTV9JQ0ZpbHRlcjogU3BlY2lmaWVzIHRoZSBJbnB1dCBDYXB0dXJlIEZpbHRlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMCBhbmQgMHgwRi4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3N0YXRpYyB2b2lkIFRJMV9Db25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MTZfdCBUSU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNGaWx0ZXIpDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjEgPSAwLCB0bXBjY2VyID0gMDsNCisNCisgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMTogUmVzZXQgdGhlIENDMUUgQml0ICovDQorICBUSU14LT5DQ0VSICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MxRTsNCisgIHRtcGNjbXIxID0gVElNeC0+Q0NNUjE7DQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisNCisgIC8qIFNlbGVjdCB0aGUgSW5wdXQgYW5kIHNldCB0aGUgZmlsdGVyICovDQorICB0bXBjY21yMSAmPSAoKHVpbnQxNl90KX5USU1fQ0NNUjFfQ0MxUykgJiAoKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMxRik7DQorICB0bXBjY21yMSB8PSAodWludDE2X3QpKFRJTV9JQ1NlbGVjdGlvbiB8ICh1aW50MTZfdCkoVElNX0lDRmlsdGVyIDw8ICh1aW50MTZfdCk0KSk7DQorDQorICAvKiBTZWxlY3QgdGhlIFBvbGFyaXR5IGFuZCBzZXQgdGhlIENDMUUgQml0ICovDQorICB0bXBjY2VyICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDMVAgfCBUSU1fQ0NFUl9DQzFOUCk7DQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkoVElNX0lDUG9sYXJpdHkgfCAodWludDE2X3QpVElNX0NDRVJfQ0MxRSk7DQorDQorICAvKiBXcml0ZSB0byBUSU14IENDTVIxIGFuZCBDQ0VSIHJlZ2lzdGVycyAqLw0KKyAgVElNeC0+Q0NNUjEgPSB0bXBjY21yMTsNCisgIFRJTXgtPkNDRVIgPSB0bXBjY2VyOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmUgdGhlIFRJMiBhcyBJbnB1dC4NCisgICogQHBhcmFtICBUSU14OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1LCA4LCA5IG9yIDEyIHRvIHNlbGVjdCB0aGUgVElNIA0KKyAgKiAgICAgICAgIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVElNX0lDUG9sYXJpdHkgOiBUaGUgSW5wdXQgUG9sYXJpdHkuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9SaXNpbmcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BvbGFyaXR5X0ZhbGxpbmcNCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1BvbGFyaXR5X0JvdGhFZGdlICAgDQorICAqIEBwYXJhbSAgVElNX0lDU2VsZWN0aW9uOiBzcGVjaWZpZXMgdGhlIGlucHV0IHRvIGJlIHVzZWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNTZWxlY3Rpb25fRGlyZWN0VEk6IFRJTSBJbnB1dCAyIGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBJQzIuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNTZWxlY3Rpb25fSW5kaXJlY3RUSTogVElNIElucHV0IDIgaXMgc2VsZWN0ZWQgdG8gYmUgY29ubmVjdGVkIHRvIElDMS4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1NlbGVjdGlvbl9UUkM6IFRJTSBJbnB1dCAyIGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBUUkMuDQorICAqIEBwYXJhbSAgVElNX0lDRmlsdGVyOiBTcGVjaWZpZXMgdGhlIElucHV0IENhcHR1cmUgRmlsdGVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwIGFuZCAweDBGLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQorc3RhdGljIHZvaWQgVEkyX0NvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lDUG9sYXJpdHksIHVpbnQxNl90IFRJTV9JQ1NlbGVjdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFRJTV9JQ0ZpbHRlcikNCit7DQorICB1aW50MTZfdCB0bXBjY21yMSA9IDAsIHRtcGNjZXIgPSAwLCB0bXAgPSAwOw0KKw0KKyAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCAyOiBSZXNldCB0aGUgQ0MyRSBCaXQgKi8NCisgIFRJTXgtPkNDRVIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzJFOw0KKyAgdG1wY2NtcjEgPSBUSU14LT5DQ01SMTsNCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOw0KKyAgdG1wID0gKHVpbnQxNl90KShUSU1fSUNQb2xhcml0eSA8PCA0KTsNCisNCisgIC8qIFNlbGVjdCB0aGUgSW5wdXQgYW5kIHNldCB0aGUgZmlsdGVyICovDQorICB0bXBjY21yMSAmPSAoKHVpbnQxNl90KX5USU1fQ0NNUjFfQ0MyUykgJiAoKHVpbnQxNl90KX5USU1fQ0NNUjFfSUMyRik7DQorICB0bXBjY21yMSB8PSAodWludDE2X3QpKFRJTV9JQ0ZpbHRlciA8PCAxMik7DQorICB0bXBjY21yMSB8PSAodWludDE2X3QpKFRJTV9JQ1NlbGVjdGlvbiA8PCA4KTsNCisNCisgIC8qIFNlbGVjdCB0aGUgUG9sYXJpdHkgYW5kIHNldCB0aGUgQ0MyRSBCaXQgKi8NCisgIHRtcGNjZXIgJj0gKHVpbnQxNl90KX4oVElNX0NDRVJfQ0MyUCB8IFRJTV9DQ0VSX0NDMk5QKTsNCisgIHRtcGNjZXIgfD0gICh1aW50MTZfdCkodG1wIHwgKHVpbnQxNl90KVRJTV9DQ0VSX0NDMkUpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMSBhbmQgQ0NFUiByZWdpc3RlcnMgKi8NCisgIFRJTXgtPkNDTVIxID0gdG1wY2NtcjEgOw0KKyAgVElNeC0+Q0NFUiA9IHRtcGNjZXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgVEkzIGFzIElucHV0Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9JQ1BvbGFyaXR5IDogVGhlIElucHV0IFBvbGFyaXR5Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUG9sYXJpdHlfUmlzaW5nDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9GYWxsaW5nDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9Cb3RoRWRnZSAgICAgICAgIA0KKyAgKiBAcGFyYW0gIFRJTV9JQ1NlbGVjdGlvbjogc3BlY2lmaWVzIHRoZSBpbnB1dCB0byBiZSB1c2VkLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDU2VsZWN0aW9uX0RpcmVjdFRJOiBUSU0gSW5wdXQgMyBpcyBzZWxlY3RlZCB0byBiZSBjb25uZWN0ZWQgdG8gSUMzLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDU2VsZWN0aW9uX0luZGlyZWN0VEk6IFRJTSBJbnB1dCAzIGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBJQzQuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNTZWxlY3Rpb25fVFJDOiBUSU0gSW5wdXQgMyBpcyBzZWxlY3RlZCB0byBiZSBjb25uZWN0ZWQgdG8gVFJDLg0KKyAgKiBAcGFyYW0gIFRJTV9JQ0ZpbHRlcjogU3BlY2lmaWVzIHRoZSBJbnB1dCBDYXB0dXJlIEZpbHRlci4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMCBhbmQgMHgwRi4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3N0YXRpYyB2b2lkIFRJM19Db25maWcoVElNX1R5cGVEZWYqIFRJTXgsIHVpbnQxNl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MTZfdCBUSU1fSUNTZWxlY3Rpb24sDQorICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBUSU1fSUNGaWx0ZXIpDQorew0KKyAgdWludDE2X3QgdG1wY2NtcjIgPSAwLCB0bXBjY2VyID0gMCwgdG1wID0gMDsNCisNCisgIC8qIERpc2FibGUgdGhlIENoYW5uZWwgMzogUmVzZXQgdGhlIENDM0UgQml0ICovDQorICBUSU14LT5DQ0VSICY9ICh1aW50MTZfdCl+VElNX0NDRVJfQ0MzRTsNCisgIHRtcGNjbXIyID0gVElNeC0+Q0NNUjI7DQorICB0bXBjY2VyID0gVElNeC0+Q0NFUjsNCisgIHRtcCA9ICh1aW50MTZfdCkoVElNX0lDUG9sYXJpdHkgPDwgOCk7DQorDQorICAvKiBTZWxlY3QgdGhlIElucHV0IGFuZCBzZXQgdGhlIGZpbHRlciAqLw0KKyAgdG1wY2NtcjIgJj0gKCh1aW50MTZfdCl+VElNX0NDTVIxX0NDMVMpICYgKCh1aW50MTZfdCl+VElNX0NDTVIyX0lDM0YpOw0KKyAgdG1wY2NtcjIgfD0gKHVpbnQxNl90KShUSU1fSUNTZWxlY3Rpb24gfCAodWludDE2X3QpKFRJTV9JQ0ZpbHRlciA8PCAodWludDE2X3QpNCkpOw0KKw0KKyAgLyogU2VsZWN0IHRoZSBQb2xhcml0eSBhbmQgc2V0IHRoZSBDQzNFIEJpdCAqLw0KKyAgdG1wY2NlciAmPSAodWludDE2X3QpfihUSU1fQ0NFUl9DQzNQIHwgVElNX0NDRVJfQ0MzTlApOw0KKyAgdG1wY2NlciB8PSAodWludDE2X3QpKHRtcCB8ICh1aW50MTZfdClUSU1fQ0NFUl9DQzNFKTsNCisNCisgIC8qIFdyaXRlIHRvIFRJTXggQ0NNUjIgYW5kIENDRVIgcmVnaXN0ZXJzICovDQorICBUSU14LT5DQ01SMiA9IHRtcGNjbXIyOw0KKyAgVElNeC0+Q0NFUiA9IHRtcGNjZXI7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgVEk0IGFzIElucHV0Lg0KKyAgKiBAcGFyYW0gIFRJTXg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgOCB0byBzZWxlY3QgdGhlIFRJTSBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFRJTV9JQ1BvbGFyaXR5IDogVGhlIElucHV0IFBvbGFyaXR5Lg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0lDUG9sYXJpdHlfUmlzaW5nDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9GYWxsaW5nDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNQb2xhcml0eV9Cb3RoRWRnZSAgICAgDQorICAqIEBwYXJhbSAgVElNX0lDU2VsZWN0aW9uOiBzcGVjaWZpZXMgdGhlIGlucHV0IHRvIGJlIHVzZWQuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNTZWxlY3Rpb25fRGlyZWN0VEk6IFRJTSBJbnB1dCA0IGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBJQzQuDQorICAqICAgICAgICAgICAgQGFyZyBUSU1fSUNTZWxlY3Rpb25fSW5kaXJlY3RUSTogVElNIElucHV0IDQgaXMgc2VsZWN0ZWQgdG8gYmUgY29ubmVjdGVkIHRvIElDMy4NCisgICogICAgICAgICAgICBAYXJnIFRJTV9JQ1NlbGVjdGlvbl9UUkM6IFRJTSBJbnB1dCA0IGlzIHNlbGVjdGVkIHRvIGJlIGNvbm5lY3RlZCB0byBUUkMuDQorICAqIEBwYXJhbSAgVElNX0lDRmlsdGVyOiBTcGVjaWZpZXMgdGhlIElucHV0IENhcHR1cmUgRmlsdGVyLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwIGFuZCAweDBGLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQorc3RhdGljIHZvaWQgVEk0X0NvbmZpZyhUSU1fVHlwZURlZiogVElNeCwgdWludDE2X3QgVElNX0lDUG9sYXJpdHksIHVpbnQxNl90IFRJTV9JQ1NlbGVjdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFRJTV9JQ0ZpbHRlcikNCit7DQorICB1aW50MTZfdCB0bXBjY21yMiA9IDAsIHRtcGNjZXIgPSAwLCB0bXAgPSAwOw0KKw0KKyAgLyogRGlzYWJsZSB0aGUgQ2hhbm5lbCA0OiBSZXNldCB0aGUgQ0M0RSBCaXQgKi8NCisgIFRJTXgtPkNDRVIgJj0gKHVpbnQxNl90KX5USU1fQ0NFUl9DQzRFOw0KKyAgdG1wY2NtcjIgPSBUSU14LT5DQ01SMjsNCisgIHRtcGNjZXIgPSBUSU14LT5DQ0VSOw0KKyAgdG1wID0gKHVpbnQxNl90KShUSU1fSUNQb2xhcml0eSA8PCAxMik7DQorDQorICAvKiBTZWxlY3QgdGhlIElucHV0IGFuZCBzZXQgdGhlIGZpbHRlciAqLw0KKyAgdG1wY2NtcjIgJj0gKCh1aW50MTZfdCl+VElNX0NDTVIxX0NDMlMpICYgKCh1aW50MTZfdCl+VElNX0NDTVIxX0lDMkYpOw0KKyAgdG1wY2NtcjIgfD0gKHVpbnQxNl90KShUSU1fSUNTZWxlY3Rpb24gPDwgOCk7DQorICB0bXBjY21yMiB8PSAodWludDE2X3QpKFRJTV9JQ0ZpbHRlciA8PCAxMik7DQorDQorICAvKiBTZWxlY3QgdGhlIFBvbGFyaXR5IGFuZCBzZXQgdGhlIENDNEUgQml0ICovDQorICB0bXBjY2VyICY9ICh1aW50MTZfdCl+KFRJTV9DQ0VSX0NDNFAgfCBUSU1fQ0NFUl9DQzROUCk7DQorICB0bXBjY2VyIHw9ICh1aW50MTZfdCkodG1wIHwgKHVpbnQxNl90KVRJTV9DQ0VSX0NDNEUpOw0KKw0KKyAgLyogV3JpdGUgdG8gVElNeCBDQ01SMiBhbmQgQ0NFUiByZWdpc3RlcnMgKi8NCisgIFRJTXgtPkNDTVIyID0gdG1wY2NtcjI7DQorICBUSU14LT5DQ0VSID0gdG1wY2NlciA7DQorfQ0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF91c2FydC5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF91c2FydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWZkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X3VzYXJ0LmMKQEAgLTAsMCArMSwxNDY5IEBACisvKioNCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAZmlsZSAgICBzdG0zMmYyeHhfdXNhcnQuYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjINCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMiANCisgICogQGJyaWVmICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyANCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBVbml2ZXJzYWwgc3luY2hyb25vdXMgYXN5bmNocm9ub3VzIHJlY2VpdmVyDQorICAqICAgICAgICAgIHRyYW5zbWl0dGVyIChVU0FSVCk6ICAgICAgICAgICANCisgICogICAgICAgICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCisgICogICAgICAgICAgIC0gRGF0YSB0cmFuc2ZlcnMNCisgICogICAgICAgICAgIC0gTXVsdGktUHJvY2Vzc29yIENvbW11bmljYXRpb24NCisgICogICAgICAgICAgIC0gTElOIG1vZGUNCisgICogICAgICAgICAgIC0gSGFsZi1kdXBsZXggbW9kZQ0KKyAgKiAgICAgICAgICAgLSBTbWFydGNhcmQgbW9kZQ0KKyAgKiAgICAgICAgICAgLSBJckRBIG1vZGUNCisgICogICAgICAgICAgIC0gRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50DQorICAqICAgICAgICAgICAtIEludGVycnVwdHMgYW5kIGZsYWdzIG1hbmFnZW1lbnQgDQorICAqICAgICAgICAgICANCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICAgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgIDEuIEVuYWJsZSBwZXJpcGhlcmFsIGNsb2NrIHVzaW5nIHRoZSBmb2xsd29pbmcgZnVuY3Rpb25zDQorICAqICAgICAgICAgICAgIFJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfVVNBUlR4LCBFTkFCTEUpIGZvciBVU0FSVDEgYW5kIFVTQVJUNiANCisgICogICAgICAgICAgICAgUkNDX0FQQjFQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMVBlcmlwaF9VU0FSVHgsIEVOQUJMRSkgZm9yIFVTQVJUMiwgVVNBUlQzLCBVQVJUNCBvciBVQVJUNS4NCisgICoNCisgICogICAgICAgICAgMi4gIEFjY29yZGluZyB0byB0aGUgVVNBUlQgbW9kZSwgZW5hYmxlIHRoZSBHUElPIGNsb2NrcyB1c2luZyANCisgICogICAgICAgICAgICAgIFJDQ19BSEIxUGVyaXBoQ2xvY2tDbWQoKSBmdW5jdGlvbi4gKFRoZSBJL08gY2FuIGJlIFRYLCBSWCwgQ1RTLCANCisgICogICAgICAgICAgICAgIG9yL2FuZCBTQ0xLKS4gDQorICAqDQorICAqICAgICAgICAgIDMuIFBlcmlwaGVyYWwncyBhbHRlcm5hdGUgZnVuY3Rpb246IA0KKyAgKiAgICAgICAgICAgICAgICAgLSBDb25uZWN0IHRoZSBwaW4gdG8gdGhlIGRlc2lyZWQgcGVyaXBoZXJhbHMnIEFsdGVybmF0ZSANCisgICogICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gKEFGKSB1c2luZyBHUElPX1BpbkFGQ29uZmlnKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBkZXNpcmVkIHBpbiBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gYnk6DQorICAqICAgICAgICAgICAgICAgICAgIEdQSU9fSW5pdFN0cnVjdC0+R1BJT19Nb2RlID0gR1BJT19Nb2RlX0FGDQorICAqICAgICAgICAgICAgICAgICAtIFNlbGVjdCB0aGUgdHlwZSwgcHVsbC11cC9wdWxsLWRvd24gYW5kIG91dHB1dCBzcGVlZCB2aWEgDQorICAqICAgICAgICAgICAgICAgICAgIEdQSU9fUHVQZCwgR1BJT19PVHlwZSBhbmQgR1BJT19TcGVlZCBtZW1iZXJzDQorICAqICAgICAgICAgICAgICAgICAtIENhbGwgR1BJT19Jbml0KCkgZnVuY3Rpb24NCisgICogICAgICAgIA0KKyAgKiAgICAgICAgICA0LiBQcm9ncmFtIHRoZSBCYXVkIFJhdGUsIFdvcmQgTGVuZ3RoICwgU3RvcCBCaXQsIFBhcml0eSwgSGFyZHdhcmUgDQorICAqICAgICAgICAgICAgIGZsb3cgY29udHJvbCBhbmQgTW9kZShSZWNlaXZlci9UcmFuc21pdHRlcikgdXNpbmcgdGhlIFVTQVJUX0luaXQoKQ0KKyAgKiAgICAgICAgICAgICBmdW5jdGlvbi4NCisgICoNCisgICogICAgICAgICAgNS4gRm9yIHN5bmNocm9ub3VzIG1vZGUsIGVuYWJsZSB0aGUgY2xvY2sgYW5kIHByb2dyYW0gdGhlIHBvbGFyaXR5LA0KKyAgKiAgICAgICAgICAgICBwaGFzZSBhbmQgbGFzdCBiaXQgdXNpbmcgdGhlIFVTQVJUX0Nsb2NrSW5pdCgpIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiAgICAgICAgICA1LiBFbmFibGUgdGhlIE5WSUMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGludGVycnVwdCB1c2luZyB0aGUgZnVuY3Rpb24gDQorICAqICAgICAgICAgICAgIFVTQVJUX0lUQ29uZmlnKCkgaWYgeW91IG5lZWQgdG8gdXNlIGludGVycnVwdCBtb2RlLiANCisgICoNCisgICogICAgICAgICAgNi4gV2hlbiB1c2luZyB0aGUgRE1BIG1vZGUgDQorICAqICAgICAgICAgICAgICAgICAgIC0gQ29uZmlndXJlIHRoZSBETUEgdXNpbmcgRE1BX0luaXQoKSBmdW5jdGlvbg0KKyAgKiAgICAgICAgICAgICAgICAgICAtIEFjdGl2ZSB0aGUgbmVlZGVkIGNoYW5uZWwgUmVxdWVzdCB1c2luZyBVU0FSVF9ETUFDbWQoKSBmdW5jdGlvbg0KKyAgKiANCisgICogICAgICAgICAgNy4gRW5hYmxlIHRoZSBVU0FSVCB1c2luZyB0aGUgVVNBUlRfQ21kKCkgZnVuY3Rpb24uDQorICAqIA0KKyAgKiAgICAgICAgICA4LiBFbmFibGUgdGhlIERNQSB1c2luZyB0aGUgRE1BX0NtZCgpIGZ1bmN0aW9uLCB3aGVuIHVzaW5nIERNQSBtb2RlLiANCisgICoNCisgICogICAgICAgICAgUmVmZXIgdG8gTXVsdGktUHJvY2Vzc29yLCBMSU4sIGhhbGYtZHVwbGV4LCBTbWFydGNhcmQsIElyREEgc3ViLXNlY3Rpb25zDQorICAqICAgICAgICAgIGZvciBtb3JlIGRldGFpbHMNCisgICogICAgICAgICAgDQorICAqICAgICAgICAgIEluIG9yZGVyIHRvIHJlYWNoIGhpZ2hlciBjb21tdW5pY2F0aW9uIGJhdWRyYXRlcywgaXQgaXMgcG9zc2libGUgdG8NCisgICogICAgICAgICAgZW5hYmxlIHRoZSBvdmVyc2FtcGxpbmcgYnkgOCBtb2RlIHVzaW5nIHRoZSBmdW5jdGlvbiBVU0FSVF9PdmVyU2FtcGxpbmc4Q21kKCkuDQorICAqICAgICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBlbmFibGluZyB0aGUgVVNBUlQgY2xvY2sgKFJDQ19BUEJ4UGVyaXBoQ2xvY2tDbWQoKSkNCisgICogICAgICAgICAgYW5kIGJlZm9yZSBjYWxsaW5nIHRoZSBmdW5jdGlvbiBVU0FSVF9Jbml0KCkuDQorICAqICAgICAgICAgIA0KKyAgKiAgQGVuZHZlcmJhdGltDQorICAqICAgICAgICANCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorI2luY2x1ZGUgInN0bTMyZjJ4eF91c2FydC5oIg0KKyNpbmNsdWRlICJzdG0zMmYyeHhfcmNjLmgiDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlQgDQorICAqIEBicmllZiBVU0FSVCBkcml2ZXIgbW9kdWxlcw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLyohPCBVU0FSVCBDUjEgcmVnaXN0ZXIgY2xlYXIgTWFzayAoKH4odWludDE2X3QpMHhFOUYzKSkgKi8NCisjZGVmaW5lIENSMV9DTEVBUl9NQVNLICAgICAgICAgICAgKCh1aW50MTZfdCkoVVNBUlRfQ1IxX00gfCBVU0FSVF9DUjFfUENFIHwgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FSVF9DUjFfUFMgfCBVU0FSVF9DUjFfVEUgfCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQVJUX0NSMV9SRSkpDQorDQorLyohPCBVU0FSVCBDUjIgcmVnaXN0ZXIgY2xvY2sgYml0cyBjbGVhciBNYXNrICgofih1aW50MTZfdCkweEYwRkYpKSAqLw0KKyNkZWZpbmUgQ1IyX0NMT0NLX0NMRUFSX01BU0sgICAgICAoKHVpbnQxNl90KShVU0FSVF9DUjJfQ0xLRU4gfCBVU0FSVF9DUjJfQ1BPTCB8IFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfQ1IyX0NQSEEgfCBVU0FSVF9DUjJfTEJDTCkpDQorDQorLyohPCBVU0FSVCBDUjMgcmVnaXN0ZXIgY2xlYXIgTWFzayAoKH4odWludDE2X3QpMHhGQ0ZGKSkgKi8NCisjZGVmaW5lIENSM19DTEVBUl9NQVNLICAgICAgICAgICAgKCh1aW50MTZfdCkoVVNBUlRfQ1IzX1JUU0UgfCBVU0FSVF9DUjNfQ1RTRSkpDQorDQorLyohPCBVU0FSVCBJbnRlcnJ1cHRzIG1hc2sgKi8NCisjZGVmaW5lIElUX01BU0sgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCkweDAwMUYpDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIFVTQVJUX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBJbml0aWFsaXphdGlvbiBhbmQgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgVVNBUlQgDQorICBpbiBhc3luY2hyb25vdXMgYW5kIGluIHN5bmNocm9ub3VzIG1vZGVzLg0KKyAgIC0gRm9yIHRoZSBhc3luY2hyb25vdXMgbW9kZSBvbmx5IHRoZXNlIHBhcmFtZXRlcnMgY2FuIGJlIGNvbmZpZ3VyZWQ6IA0KKyAgICAgICAgLSBCYXVkIFJhdGUNCisgICAgICAgIC0gV29yZCBMZW5ndGggDQorICAgICAgICAtIFN0b3AgQml0DQorICAgICAgICAtIFBhcml0eTogSWYgdGhlIHBhcml0eSBpcyBlbmFibGVkLCB0aGVuIHRoZSBNU0IgYml0IG9mIHRoZSBkYXRhIHdyaXR0ZW4NCisgICAgICAgICAgaW4gdGhlIGRhdGEgcmVnaXN0ZXIgaXMgdHJhbnNtaXR0ZWQgYnV0IGlzIGNoYW5nZWQgYnkgdGhlIHBhcml0eSBiaXQuDQorICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgZnJhbWUgbGVuZ3RoIGRlZmluZWQgYnkgdGhlIE0gYml0ICg4LWJpdHMgb3IgOS1iaXRzKSwNCisgICAgICAgICAgdGhlIHBvc3NpYmxlIFVTQVJUIGZyYW1lIGZvcm1hdHMgYXJlIGFzIGxpc3RlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlOg0KKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgDQorICAgfCAgIE0gYml0IHwgIFBDRSBiaXQgIHwgICAgICAgICAgICBVU0FSVCBmcmFtZSAgICAgICAgICAgICAgICB8DQorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIA0KKyAgIHwgICAgMCAgICB8ICAgIDAgICAgICB8ICAgIHwgU0IgfCA4IGJpdCBkYXRhIHwgU1RCIHwgICAgICAgICAgfA0KKyAgIHwtLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgDQorICAgfCAgICAwICAgIHwgICAgMSAgICAgIHwgICAgfCBTQiB8IDcgYml0IGRhdGEgfCBQQiB8IFNUQiB8ICAgICB8DQorICAgfC0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICANCisgICB8ICAgIDEgICAgfCAgICAwICAgICAgfCAgICB8IFNCIHwgOSBiaXQgZGF0YSB8IFNUQiB8ICAgICAgICAgIHwNCisgICB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIA0KKyAgIHwgICAgMSAgICB8ICAgIDEgICAgICB8ICAgIHwgU0IgfCA4IGJpdCBkYXRhIHwgUEIgfCBTVEIgfCAgICAgfA0KKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgIA0KKyAgICAgICAgLSBIYXJkd2FyZSBmbG93IGNvbnRyb2wNCisgICAgICAgIC0gUmVjZWl2ZXIvdHJhbnNtaXR0ZXIgbW9kZXMNCisNCisgIFRoZSBVU0FSVF9Jbml0KCkgZnVuY3Rpb24gZm9sbG93cyB0aGUgVVNBUlQgIGFzeW5jaHJvbm91cyBjb25maWd1cmF0aW9uIHByb2NlZHVyZQ0KKyAgKGRldGFpbHMgZm9yIHRoZSBwcm9jZWR1cmUgYXJlIGF2YWlsYWJsZSBpbiByZWZlcmVuY2UgbWFudWFsIChSTTAwMzMpKS4NCisNCisgIC0gRm9yIHRoZSBzeW5jaHJvbm91cyBtb2RlIGluIGFkZGl0aW9uIHRvIHRoZSBhc3luY2hyb25vdXMgbW9kZSBwYXJhbWV0ZXJzIHRoZXNlIA0KKyAgICBwYXJhbWV0ZXJzIHNob3VsZCBiZSBhbHNvIGNvbmZpZ3VyZWQ6DQorICAgICAgICAtIFVTQVJUIENsb2NrIEVuYWJsZWQNCisgICAgICAgIC0gVVNBUlQgcG9sYXJpdHkNCisgICAgICAgIC0gVVNBUlQgcGhhc2UNCisgICAgICAgIC0gVVNBUlQgTGFzdEJpdA0KKyAgDQorICBUaGVzZSBwYXJhbWV0ZXJzIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSBVU0FSVF9DbG9ja0luaXQoKSBmdW5jdGlvbi4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorICANCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBVU0FSVHggcGVyaXBoZXJhbCByZWdpc3RlcnMgdG8gdGhlaXIgZGVmYXVsdCByZXNldCB2YWx1ZXMuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX0RlSW5pdChVU0FSVF9UeXBlRGVmKiBVU0FSVHgpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKw0KKyAgaWYgKFVTQVJUeCA9PSBVU0FSVDEpDQorICB7DQorICAgIFJDQ19BUEIyUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjJQZXJpcGhfVVNBUlQxLCBFTkFCTEUpOw0KKyAgICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1VTQVJUMSwgRElTQUJMRSk7DQorICB9DQorICBlbHNlIGlmIChVU0FSVHggPT0gVVNBUlQyKQ0KKyAgew0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1VTQVJUMiwgRU5BQkxFKTsNCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9VU0FSVDIsIERJU0FCTEUpOw0KKyAgfQ0KKyAgZWxzZSBpZiAoVVNBUlR4ID09IFVTQVJUMykNCisgIHsNCisgICAgUkNDX0FQQjFQZXJpcGhSZXNldENtZChSQ0NfQVBCMVBlcmlwaF9VU0FSVDMsIEVOQUJMRSk7DQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVVNBUlQzLCBESVNBQkxFKTsNCisgIH0gICAgDQorICBlbHNlIGlmIChVU0FSVHggPT0gVUFSVDQpDQorICB7DQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVUFSVDQsIEVOQUJMRSk7DQorICAgIFJDQ19BUEIxUGVyaXBoUmVzZXRDbWQoUkNDX0FQQjFQZXJpcGhfVUFSVDQsIERJU0FCTEUpOw0KKyAgfQ0KKyAgZWxzZSBpZiAoVVNBUlR4ID09IFVBUlQ1KQ0KKyAgew0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1VBUlQ1LCBFTkFCTEUpOw0KKyAgICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1VBUlQ1LCBESVNBQkxFKTsNCisgIH0gICAgIA0KKyAgZWxzZQ0KKyAgew0KKyAgICBpZiAoVVNBUlR4ID09IFVTQVJUNikNCisgICAgeyANCisgICAgICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1VTQVJUNiwgRU5BQkxFKTsNCisgICAgICBSQ0NfQVBCMlBlcmlwaFJlc2V0Q21kKFJDQ19BUEIyUGVyaXBoX1VTQVJUNiwgRElTQUJMRSk7DQorICAgIH0NCisgIH0NCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFVTQVJUeCBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkDQorICAqICAgICAgICAgcGFyYW1ldGVycyBpbiB0aGUgVVNBUlRfSW5pdFN0cnVjdCAuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlRfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIFVTQVJUX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zDQorICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVVNBUlQgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfSW5pdChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIFVTQVJUX0luaXRUeXBlRGVmKiBVU0FSVF9Jbml0U3RydWN0KQ0KK3sNCisgIHVpbnQzMl90IHRtcHJlZyA9IDB4MDAsIGFwYmNsb2NrID0gMHgwMDsNCisgIHVpbnQzMl90IGludGVnZXJkaXZpZGVyID0gMHgwMDsNCisgIHVpbnQzMl90IGZyYWN0aW9uYWxkaXZpZGVyID0gMHgwMDsNCisgIFJDQ19DbG9ja3NUeXBlRGVmIFJDQ19DbG9ja3NTdGF0dXM7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0FMTF9QRVJJUEgoVVNBUlR4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQkFVRFJBVEUoVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfQmF1ZFJhdGUpKTsgIA0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX1dPUkRfTEVOR1RIKFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX1dvcmRMZW5ndGgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9TVE9QQklUUyhVU0FSVF9Jbml0U3RydWN0LT5VU0FSVF9TdG9wQml0cykpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX1BBUklUWShVU0FSVF9Jbml0U3RydWN0LT5VU0FSVF9QYXJpdHkpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9NT0RFKFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX01vZGUpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9IQVJEV0FSRV9GTE9XX0NPTlRST0woVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbCkpOw0KKw0KKyAgLyogVGhlIGhhcmR3YXJlIGZsb3cgY29udHJvbCBpcyBhdmFpbGFibGUgb25seSBmb3IgVVNBUlQxLCBVU0FSVDIsIFVTQVJUMyBhbmQgVVNBUlQ2ICovDQorICBpZiAoVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbCAhPSBVU0FSVF9IYXJkd2FyZUZsb3dDb250cm9sX05vbmUpDQorICB7DQorICAgIGFzc2VydF9wYXJhbShJU19VU0FSVF8xMjM2X1BFUklQSChVU0FSVHgpKTsNCisgIH0NCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQ1IyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgdG1wcmVnID0gVVNBUlR4LT5DUjI7DQorDQorICAvKiBDbGVhciBTVE9QWzEzOjEyXSBiaXRzICovDQorICB0bXByZWcgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KVVTQVJUX0NSMl9TVE9QKTsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgVVNBUlQgU3RvcCBCaXRzLCBDbG9jaywgQ1BPTCwgQ1BIQSBhbmQgTGFzdEJpdCA6DQorICAgICAgU2V0IFNUT1BbMTM6MTJdIGJpdHMgYWNjb3JkaW5nIHRvIFVTQVJUX1N0b3BCaXRzIHZhbHVlICovDQorICB0bXByZWcgfD0gKHVpbnQzMl90KVVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX1N0b3BCaXRzOw0KKyAgDQorICAvKiBXcml0ZSB0byBVU0FSVCBDUjIgKi8NCisgIFVTQVJUeC0+Q1IyID0gKHVpbnQxNl90KXRtcHJlZzsNCisNCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQ1IxIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgdG1wcmVnID0gVVNBUlR4LT5DUjE7DQorDQorICAvKiBDbGVhciBNLCBQQ0UsIFBTLCBURSBhbmQgUkUgYml0cyAqLw0KKyAgdG1wcmVnICY9ICh1aW50MzJfdCl+KCh1aW50MzJfdClDUjFfQ0xFQVJfTUFTSyk7DQorDQorICAvKiBDb25maWd1cmUgdGhlIFVTQVJUIFdvcmQgTGVuZ3RoLCBQYXJpdHkgYW5kIG1vZGU6IA0KKyAgICAgU2V0IHRoZSBNIGJpdHMgYWNjb3JkaW5nIHRvIFVTQVJUX1dvcmRMZW5ndGggdmFsdWUgDQorICAgICBTZXQgUENFIGFuZCBQUyBiaXRzIGFjY29yZGluZyB0byBVU0FSVF9QYXJpdHkgdmFsdWUNCisgICAgIFNldCBURSBhbmQgUkUgYml0cyBhY2NvcmRpbmcgdG8gVVNBUlRfTW9kZSB2YWx1ZSAqLw0KKyAgdG1wcmVnIHw9ICh1aW50MzJfdClVU0FSVF9Jbml0U3RydWN0LT5VU0FSVF9Xb3JkTGVuZ3RoIHwgVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfUGFyaXR5IHwNCisgICAgICAgICAgICBVU0FSVF9Jbml0U3RydWN0LT5VU0FSVF9Nb2RlOw0KKw0KKyAgLyogV3JpdGUgdG8gVVNBUlQgQ1IxICovDQorICBVU0FSVHgtPkNSMSA9ICh1aW50MTZfdCl0bXByZWc7DQorDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVTQVJUIENSMyBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gIA0KKyAgdG1wcmVnID0gVVNBUlR4LT5DUjM7DQorDQorICAvKiBDbGVhciBDVFNFIGFuZCBSVFNFIGJpdHMgKi8NCisgIHRtcHJlZyAmPSAodWludDMyX3QpfigodWludDMyX3QpQ1IzX0NMRUFSX01BU0spOw0KKw0KKyAgLyogQ29uZmlndXJlIHRoZSBVU0FSVCBIRkMgOiANCisgICAgICBTZXQgQ1RTRSBhbmQgUlRTRSBiaXRzIGFjY29yZGluZyB0byBVU0FSVF9IYXJkd2FyZUZsb3dDb250cm9sIHZhbHVlICovDQorICB0bXByZWcgfD0gVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbDsNCisNCisgIC8qIFdyaXRlIHRvIFVTQVJUIENSMyAqLw0KKyAgVVNBUlR4LT5DUjMgPSAodWludDE2X3QpdG1wcmVnOw0KKw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVU0FSVCBCUlIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBDb25maWd1cmUgdGhlIFVTQVJUIEJhdWQgUmF0ZSAqLw0KKyAgUkNDX0dldENsb2Nrc0ZyZXEoJlJDQ19DbG9ja3NTdGF0dXMpOw0KKw0KKyAgaWYgKChVU0FSVHggPT0gVVNBUlQxKSB8fCAoVVNBUlR4ID09IFVTQVJUNikpDQorICB7DQorICAgIGFwYmNsb2NrID0gUkNDX0Nsb2Nrc1N0YXR1cy5QQ0xLMl9GcmVxdWVuY3k7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGFwYmNsb2NrID0gUkNDX0Nsb2Nrc1N0YXR1cy5QQ0xLMV9GcmVxdWVuY3k7DQorICB9DQorICANCisgIC8qIERldGVybWluZSB0aGUgaW50ZWdlciBwYXJ0ICovDQorICBpZiAoKFVTQVJUeC0+Q1IxICYgVVNBUlRfQ1IxX09WRVI4KSAhPSAwKQ0KKyAgew0KKyAgICAvKiBJbnRlZ2VyIHBhcnQgY29tcHV0aW5nIGluIGNhc2UgT3ZlcnNhbXBsaW5nIG1vZGUgaXMgOCBTYW1wbGVzICovDQorICAgIGludGVnZXJkaXZpZGVyID0gKCgyNSAqIGFwYmNsb2NrKSAvICgyICogKFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX0JhdWRSYXRlKSkpOyAgICANCisgIH0NCisgIGVsc2UgLyogaWYgKChVU0FSVHgtPkNSMSAmIFVTQVJUX0NSMV9PVkVSOCkgPT0gMCkgKi8NCisgIHsNCisgICAgLyogSW50ZWdlciBwYXJ0IGNvbXB1dGluZyBpbiBjYXNlIE92ZXJzYW1wbGluZyBtb2RlIGlzIDE2IFNhbXBsZXMgKi8NCisgICAgaW50ZWdlcmRpdmlkZXIgPSAoKDI1ICogYXBiY2xvY2spIC8gKDQgKiAoVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfQmF1ZFJhdGUpKSk7ICAgIA0KKyAgfQ0KKyAgdG1wcmVnID0gKGludGVnZXJkaXZpZGVyIC8gMTAwKSA8PCA0Ow0KKw0KKyAgLyogRGV0ZXJtaW5lIHRoZSBmcmFjdGlvbmFsIHBhcnQgKi8NCisgIGZyYWN0aW9uYWxkaXZpZGVyID0gaW50ZWdlcmRpdmlkZXIgLSAoMTAwICogKHRtcHJlZyA+PiA0KSk7DQorDQorICAvKiBJbXBsZW1lbnQgdGhlIGZyYWN0aW9uYWwgcGFydCBpbiB0aGUgcmVnaXN0ZXIgKi8NCisgIGlmICgoVVNBUlR4LT5DUjEgJiBVU0FSVF9DUjFfT1ZFUjgpICE9IDApDQorICB7DQorICAgIHRtcHJlZyB8PSAoKCgoZnJhY3Rpb25hbGRpdmlkZXIgKiA4KSArIDUwKSAvIDEwMCkpICYgKCh1aW50OF90KTB4MDcpOw0KKyAgfQ0KKyAgZWxzZSAvKiBpZiAoKFVTQVJUeC0+Q1IxICYgVVNBUlRfQ1IxX09WRVI4KSA9PSAwKSAqLw0KKyAgew0KKyAgICB0bXByZWcgfD0gKCgoKGZyYWN0aW9uYWxkaXZpZGVyICogMTYpICsgNTApIC8gMTAwKSkgJiAoKHVpbnQ4X3QpMHgwRik7DQorICB9DQorICANCisgIC8qIFdyaXRlIHRvIFVTQVJUIEJSUiByZWdpc3RlciAqLw0KKyAgVVNBUlR4LT5CUlIgPSAodWludDE2X3QpdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFVTQVJUX0luaXRTdHJ1Y3QgbWVtYmVyIHdpdGggaXRzIGRlZmF1bHQgdmFsdWUuDQorICAqIEBwYXJhbSAgVVNBUlRfSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIFVTQVJUX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB3aGljaCB3aWxsDQorICAqICAgICAgICAgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX1N0cnVjdEluaXQoVVNBUlRfSW5pdFR5cGVEZWYqIFVTQVJUX0luaXRTdHJ1Y3QpDQorew0KKyAgLyogVVNBUlRfSW5pdFN0cnVjdCBtZW1iZXJzIGRlZmF1bHQgdmFsdWUgKi8NCisgIFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX0JhdWRSYXRlID0gOTYwMDsNCisgIFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX1dvcmRMZW5ndGggPSBVU0FSVF9Xb3JkTGVuZ3RoXzhiOw0KKyAgVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfU3RvcEJpdHMgPSBVU0FSVF9TdG9wQml0c18xOw0KKyAgVVNBUlRfSW5pdFN0cnVjdC0+VVNBUlRfUGFyaXR5ID0gVVNBUlRfUGFyaXR5X05vIDsNCisgIFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX01vZGUgPSBVU0FSVF9Nb2RlX1J4IHwgVVNBUlRfTW9kZV9UeDsNCisgIFVTQVJUX0luaXRTdHJ1Y3QtPlVTQVJUX0hhcmR3YXJlRmxvd0NvbnRyb2wgPSBVU0FSVF9IYXJkd2FyZUZsb3dDb250cm9sX05vbmU7ICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIFVTQVJUeCBwZXJpcGhlcmFsIENsb2NrIGFjY29yZGluZyB0byB0aGUgDQorICAqICAgICAgICAgc3BlY2lmaWVkIHBhcmFtZXRlcnMgaW4gdGhlIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdCAuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzIG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdDogcG9pbnRlciB0byBhIFVTQVJUX0Nsb2NrSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQNCisgICogICAgICAgICBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCAgVVNBUlQgcGVyaXBoZXJhbC4NCisgICogQG5vdGUgICBUaGUgU21hcnQgQ2FyZCBhbmQgU3luY2hyb25vdXMgbW9kZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIFVBUlQ0IGFuZCBVQVJUNS4gICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX0Nsb2NrSW5pdChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIFVTQVJUX0Nsb2NrSW5pdFR5cGVEZWYqIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdCkNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAweDAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF8xMjM2X1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9DTE9DSyhVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPlVTQVJUX0Nsb2NrKSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQ1BPTChVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPlVTQVJUX0NQT0wpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9DUEhBKFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+VVNBUlRfQ1BIQSkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0xBU1RCSVQoVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5VU0FSVF9MYXN0Qml0KSk7DQorICANCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNBUlQgQ1IyIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgdG1wcmVnID0gVVNBUlR4LT5DUjI7DQorICAvKiBDbGVhciBDTEtFTiwgQ1BPTCwgQ1BIQSBhbmQgTEJDTCBiaXRzICovDQorICB0bXByZWcgJj0gKHVpbnQzMl90KX4oKHVpbnQzMl90KUNSMl9DTE9DS19DTEVBUl9NQVNLKTsNCisgIC8qIENvbmZpZ3VyZSB0aGUgVVNBUlQgQ2xvY2ssIENQT0wsIENQSEEgYW5kIExhc3RCaXQgLS0tLS0tLS0tLS0tKi8NCisgIC8qIFNldCBDTEtFTiBiaXQgYWNjb3JkaW5nIHRvIFVTQVJUX0Nsb2NrIHZhbHVlICovDQorICAvKiBTZXQgQ1BPTCBiaXQgYWNjb3JkaW5nIHRvIFVTQVJUX0NQT0wgdmFsdWUgKi8NCisgIC8qIFNldCBDUEhBIGJpdCBhY2NvcmRpbmcgdG8gVVNBUlRfQ1BIQSB2YWx1ZSAqLw0KKyAgLyogU2V0IExCQ0wgYml0IGFjY29yZGluZyB0byBVU0FSVF9MYXN0Qml0IHZhbHVlICovDQorICB0bXByZWcgfD0gKHVpbnQzMl90KVVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+VVNBUlRfQ2xvY2sgfCBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPlVTQVJUX0NQT0wgfCANCisgICAgICAgICAgICAgICAgIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+VVNBUlRfQ1BIQSB8IFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+VVNBUlRfTGFzdEJpdDsNCisgIC8qIFdyaXRlIHRvIFVTQVJUIENSMiAqLw0KKyAgVVNBUlR4LT5DUjIgPSAodWludDE2X3QpdG1wcmVnOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBGaWxscyBlYWNoIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgZGVmYXVsdCB2YWx1ZS4NCisgICogQHBhcmFtICBVU0FSVF9DbG9ja0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBVU0FSVF9DbG9ja0luaXRUeXBlRGVmIHN0cnVjdHVyZQ0KKyAgKiAgICAgICAgIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX0Nsb2NrU3RydWN0SW5pdChVU0FSVF9DbG9ja0luaXRUeXBlRGVmKiBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QpDQorew0KKyAgLyogVVNBUlRfQ2xvY2tJbml0U3RydWN0IG1lbWJlcnMgZGVmYXVsdCB2YWx1ZSAqLw0KKyAgVVNBUlRfQ2xvY2tJbml0U3RydWN0LT5VU0FSVF9DbG9jayA9IFVTQVJUX0Nsb2NrX0Rpc2FibGU7DQorICBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPlVTQVJUX0NQT0wgPSBVU0FSVF9DUE9MX0xvdzsNCisgIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdC0+VVNBUlRfQ1BIQSA9IFVTQVJUX0NQSEFfMUVkZ2U7DQorICBVU0FSVF9DbG9ja0luaXRTdHJ1Y3QtPlVTQVJUX0xhc3RCaXQgPSBVU0FSVF9MYXN0Qml0X0Rpc2FibGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHNwZWNpZmllZCBVU0FSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFVTQVJUeCBwZXJpcGhlcmFsLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9DbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgVVNBUlQgYnkgc2V0dGluZyB0aGUgVUUgYml0IGluIHRoZSBDUjEgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjEgfD0gVVNBUlRfQ1IxX1VFOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBzZWxlY3RlZCBVU0FSVCBieSBjbGVhcmluZyB0aGUgVUUgYml0IGluIHRoZSBDUjEgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KVVTQVJUX0NSMV9VRSk7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIHN5c3RlbSBjbG9jayBwcmVzY2FsZXIuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlRfUHJlc2NhbGVyOiBzcGVjaWZpZXMgdGhlIHByZXNjYWxlciBjbG9jay4gDQorICAqIEBub3RlICAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIElyREEgbW9kZSB3aXRoIFVBUlQ0IGFuZCBVQVJUNS4gICANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfU2V0UHJlc2NhbGVyKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDhfdCBVU0FSVF9QcmVzY2FsZXIpDQoreyANCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIA0KKyAgLyogQ2xlYXIgdGhlIFVTQVJUIHByZXNjYWxlciAqLw0KKyAgVVNBUlR4LT5HVFBSICY9IFVTQVJUX0dUUFJfR1Q7DQorICAvKiBTZXQgdGhlIFVTQVJUIHByZXNjYWxlciAqLw0KKyAgVVNBUlR4LT5HVFBSIHw9IFVTQVJUX1ByZXNjYWxlcjsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVVNBUlQncyA4eCBvdmVyc2FtcGxpbmcgbW9kZS4NCisgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgVVNBUlRfSW5pdCgpIGZ1bmN0aW9uDQorICAqICAgICAgICAgaW4gb3JkZXIgdG8gaGF2ZSBjb3JyZWN0IGJhdWRyYXRlIERpdmlkZXIgdmFsdWUuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgVVNBUlQgOHggb3ZlcnNhbXBsaW5nIG1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX092ZXJTYW1wbGluZzhDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgOHggT3ZlcnNhbXBsaW5nIG1vZGUgYnkgc2V0dGluZyB0aGUgT1ZFUjggYml0IGluIHRoZSBDUjEgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjEgfD0gVVNBUlRfQ1IxX09WRVI4Ow0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSA4eCBPdmVyc2FtcGxpbmcgbW9kZSBieSBjbGVhcmluZyB0aGUgT1ZFUjggYml0IGluIHRoZSBDUjEgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KVVTQVJUX0NSMV9PVkVSOCk7DQorICB9DQorfSAgDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVVNBUlQncyBvbmUgYml0IHNhbXBsaW5nIG1ldGhvZC4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBVU0FSVCBvbmUgYml0IHNhbXBsaW5nIG1ldGhvZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfT25lQml0TWV0aG9kQ21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIG9uZSBiaXQgbWV0aG9kIGJ5IHNldHRpbmcgdGhlIE9ORUJJVEUgYml0IGluIHRoZSBDUjMgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjMgfD0gVVNBUlRfQ1IzX09ORUJJVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgb25lIGJpdCBtZXRob2QgYnkgY2xlYXJpbmcgdGhlIE9ORUJJVEUgYml0IGluIHRoZSBDUjMgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjMgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KVVTQVJUX0NSM19PTkVCSVQpOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9Hcm91cDIgRGF0YSB0cmFuc2ZlcnMgZnVuY3Rpb25zDQorICogIEBicmllZiAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgdHJhbnNmZXJzIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBVU0FSVCBkYXRhIA0KKyAgdHJhbnNmZXJzLg0KKyAgDQorICBEdXJpbmcgYW4gVVNBUlQgcmVjZXB0aW9uLCBkYXRhIHNoaWZ0cyBpbiBsZWFzdCBzaWduaWZpY2FudCBiaXQgZmlyc3QgdGhyb3VnaCANCisgIHRoZSBSWCBwaW4uIEluIHRoaXMgbW9kZSwgdGhlIFVTQVJUX0RSIHJlZ2lzdGVyIGNvbnNpc3RzIG9mIGEgYnVmZmVyIChSRFIpIA0KKyAgYmV0d2VlbiB0aGUgaW50ZXJuYWwgYnVzIGFuZCB0aGUgcmVjZWl2ZWQgc2hpZnQgcmVnaXN0ZXIuDQorDQorICBXaGVuIGEgdHJhbnNtaXNzaW9uIGlzIHRha2luZyBwbGFjZSwgYSB3cml0ZSBpbnN0cnVjdGlvbiB0byB0aGUgVVNBUlRfRFIgcmVnaXN0ZXIgDQorICBzdG9yZXMgdGhlIGRhdGEgaW4gdGhlIFREUiByZWdpc3RlciBhbmQgd2hpY2ggaXMgY29waWVkIGluIHRoZSBzaGlmdCByZWdpc3RlciANCisgIGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgdHJhbnNtaXNzaW9uLg0KKw0KKyAgVGhlIHJlYWQgYWNjZXNzIG9mIHRoZSBVU0FSVF9EUiByZWdpc3RlciBjYW4gYmUgZG9uZSB1c2luZyB0aGUgVVNBUlRfUmVjZWl2ZURhdGEoKQ0KKyAgZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIFJEUiBidWZmZXJlZCB2YWx1ZS4gV2hlcmVhcyBhIHdyaXRlIGFjY2VzcyB0byB0aGUgVVNBUlRfRFIgDQorICBjYW4gYmUgZG9uZSB1c2luZyBVU0FSVF9TZW5kRGF0YSgpIGZ1bmN0aW9uIGFuZCBzdG9yZXMgdGhlIHdyaXR0ZW4gZGF0YSBpbnRvIA0KKyAgVERSIGJ1ZmZlci4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgVHJhbnNtaXRzIHNpbmdsZSBkYXRhIHRocm91Z2ggdGhlIFVTQVJUeCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIERhdGE6IHRoZSBkYXRhIHRvIHRyYW5zbWl0Lg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9TZW5kRGF0YShVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IERhdGEpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0RBVEEoRGF0YSkpOyANCisgICAgDQorICAvKiBUcmFuc21pdCBEYXRhICovDQorICBVU0FSVHgtPkRSID0gKERhdGEgJiAodWludDE2X3QpMHgwMUZGKTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgUmV0dXJucyB0aGUgbW9zdCByZWNlbnQgcmVjZWl2ZWQgZGF0YSBieSB0aGUgVVNBUlR4IHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEByZXR2YWwgVGhlIHJlY2VpdmVkIGRhdGEuDQorICAqLw0KK3VpbnQxNl90IFVTQVJUX1JlY2VpdmVEYXRhKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0FMTF9QRVJJUEgoVVNBUlR4KSk7DQorICANCisgIC8qIFJlY2VpdmUgRGF0YSAqLw0KKyAgcmV0dXJuICh1aW50MTZfdCkoVVNBUlR4LT5EUiAmICh1aW50MTZfdCkweDAxRkYpOw0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9Hcm91cDMgTXVsdGlQcm9jZXNzb3IgQ29tbXVuaWNhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgTXVsdGktUHJvY2Vzc29yIENvbW11bmljYXRpb24gZnVuY3Rpb25zIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgIE11bHRpLVByb2Nlc3NvciBDb21tdW5pY2F0aW9uIGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBVU0FSVCANCisgIG11bHRpcHJvY2Vzc29yIGNvbW11bmljYXRpb24uDQorICANCisgIEZvciBpbnN0YW5jZSBvbmUgb2YgdGhlIFVTQVJUcyBjYW4gYmUgdGhlIG1hc3RlciwgaXRzIFRYIG91dHB1dCBpcyBjb25uZWN0ZWQgdG8gDQorICB0aGUgUlggaW5wdXQgb2YgdGhlIG90aGVyIFVTQVJULiBUaGUgb3RoZXJzIGFyZSBzbGF2ZXMsIHRoZWlyIHJlc3BlY3RpdmUgVFggb3V0cHV0cyANCisgIGFyZSBsb2dpY2FsbHkgQU5EZWQgdG9nZXRoZXIgYW5kIGNvbm5lY3RlZCB0byB0aGUgUlggaW5wdXQgb2YgdGhlIG1hc3Rlci4NCisNCisgIFVTQVJUIG11bHRpcHJvY2Vzc29yIGNvbW11bmljYXRpb24gaXMgcG9zc2libGUgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHByb2NlZHVyZToNCisgICAgIDEuIFByb2dyYW0gdGhlIEJhdWQgcmF0ZSwgV29yZCBsZW5ndGggPSA5IGJpdHMsIFN0b3AgYml0cywgUGFyaXR5LCBNb2RlIHRyYW5zbWl0dGVyIA0KKyAgICAgICAgb3IgTW9kZSByZWNlaXZlciBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sIHZhbHVlcyB1c2luZyB0aGUgVVNBUlRfSW5pdCgpDQorICAgICAgICBmdW5jdGlvbi4NCisgICAgIDIuIENvbmZpZ3VyZXMgdGhlIFVTQVJUIGFkZHJlc3MgdXNpbmcgdGhlIFVTQVJUX1NldEFkZHJlc3MoKSBmdW5jdGlvbi4NCisgICAgIDMuIENvbmZpZ3VyZXMgdGhlIHdha2UgdXAgbWV0aG9kIChVU0FSVF9XYWtlVXBfSWRsZUxpbmUgb3IgVVNBUlRfV2FrZVVwX0FkZHJlc3NNYXJrKQ0KKyAgICAgICAgdXNpbmcgVVNBUlRfV2FrZVVwQ29uZmlnKCkgZnVuY3Rpb24gb25seSBmb3IgdGhlIHNsYXZlcy4NCisgICAgIDQuIEVuYWJsZSB0aGUgVVNBUlQgdXNpbmcgdGhlIFVTQVJUX0NtZCgpIGZ1bmN0aW9uLg0KKyAgICAgNS4gRW50ZXIgdGhlIFVTQVJUIHNsYXZlcyBpbiBtdXRlIG1vZGUgdXNpbmcgVVNBUlRfUmVjZWl2ZXJXYWtlVXBDbWQoKSBmdW5jdGlvbi4NCisNCisgIFRoZSBVU0FSVCBTbGF2ZSBleGl0IGZyb20gbXV0ZSBtb2RlIHdoZW4gcmVjZWl2ZSB0aGUgd2FrZSB1cCBjb25kaXRpb24uDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIFVTQVJUIG5vZGUuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlRfQWRkcmVzczogSW5kaWNhdGVzIHRoZSBhZGRyZXNzIG9mIHRoZSBVU0FSVCBub2RlLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9TZXRBZGRyZXNzKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDhfdCBVU0FSVF9BZGRyZXNzKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BRERSRVNTKFVTQVJUX0FkZHJlc3MpKTsgDQorICAgIA0KKyAgLyogQ2xlYXIgdGhlIFVTQVJUIGFkZHJlc3MgKi8NCisgIFVTQVJUeC0+Q1IyICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClVU0FSVF9DUjJfQUREKTsNCisgIC8qIFNldCB0aGUgVVNBUlQgYWRkcmVzcyBub2RlICovDQorICBVU0FSVHgtPkNSMiB8PSBVU0FSVF9BZGRyZXNzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBEZXRlcm1pbmVzIGlmIHRoZSBVU0FSVCBpcyBpbiBtdXRlIG1vZGUgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIFVTQVJUIG11dGUgbW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfUmVjZWl2ZXJXYWtlVXBDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsgDQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIFVTQVJUIG11dGUgbW9kZSAgYnkgc2V0dGluZyB0aGUgUldVIGJpdCBpbiB0aGUgQ1IxIHJlZ2lzdGVyICovDQorICAgIFVTQVJUeC0+Q1IxIHw9IFVTQVJUX0NSMV9SV1U7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIFVTQVJUIG11dGUgbW9kZSBieSBjbGVhcmluZyB0aGUgUldVIGJpdCBpbiB0aGUgQ1IxIHJlZ2lzdGVyICovDQorICAgIFVTQVJUeC0+Q1IxICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClVU0FSVF9DUjFfUldVKTsNCisgIH0NCit9DQorLyoqDQorICAqIEBicmllZiAgU2VsZWN0cyB0aGUgVVNBUlQgV2FrZVVwIG1ldGhvZC4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBVU0FSVF9XYWtlVXA6IHNwZWNpZmllcyB0aGUgVVNBUlQgd2FrZXVwIG1ldGhvZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX1dha2VVcF9JZGxlTGluZTogV2FrZVVwIGJ5IGFuIGlkbGUgbGluZSBkZXRlY3Rpb24NCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX1dha2VVcF9BZGRyZXNzTWFyazogV2FrZVVwIGJ5IGFuIGFkZHJlc3MgbWFyaw0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9XYWtlVXBDb25maWcoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9XYWtlVXApDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX1dBS0VVUChVU0FSVF9XYWtlVXApKTsNCisgIA0KKyAgVVNBUlR4LT5DUjEgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KVVTQVJUX0NSMV9XQUtFKTsNCisgIFVTQVJUeC0+Q1IxIHw9IFVTQVJUX1dha2VVcDsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfR3JvdXA0IExJTiBtb2RlIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBMSU4gbW9kZSBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElOIG1vZGUgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBtYW5hZ2UgdGhlIFVTQVJUIExJTiANCisgIE1vZGUgY29tbXVuaWNhdGlvbi4NCisgIA0KKyAgSW4gTElOIG1vZGUsIDgtYml0IGRhdGEgZm9ybWF0IHdpdGggMSBzdG9wIGJpdCBpcyByZXF1aXJlZCBpbiBhY2NvcmRhbmNlIHdpdGggDQorICB0aGUgTElOIHN0YW5kYXJkLg0KKw0KKyAgT25seSB0aGlzIExJTiBGZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlQgSVA6DQorICAgIC0gTElOIE1hc3RlciBTeW5jaHJvbm91cyBCcmVhayBzZW5kIGNhcGFiaWxpdHkgYW5kIExJTiBzbGF2ZSBicmVhayBkZXRlY3Rpb24NCisgICAgICBjYXBhYmlsaXR5IDogIDEzLWJpdCBicmVhayBnZW5lcmF0aW9uIGFuZCAxMC8xMSBiaXQgYnJlYWsgZGV0ZWN0aW9uDQorDQorDQorICBVU0FSVCBMSU4gTWFzdGVyIHRyYW5zbWl0dGVyIGNvbW11bmljYXRpb24gaXMgcG9zc2libGUgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHByb2NlZHVyZToNCisgICAgIDEuIFByb2dyYW0gdGhlIEJhdWQgcmF0ZSwgV29yZCBsZW5ndGggPSA4Yml0cywgU3RvcCBiaXRzID0gMWJpdCwgUGFyaXR5LCANCisgICAgICAgIE1vZGUgdHJhbnNtaXR0ZXIgb3IgTW9kZSByZWNlaXZlciBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sIHZhbHVlcyB1c2luZyANCisgICAgICAgIHRoZSBVU0FSVF9Jbml0KCkgZnVuY3Rpb24uDQorICAgICAyLiBFbmFibGUgdGhlIFVTQVJUIHVzaW5nIHRoZSBVU0FSVF9DbWQoKSBmdW5jdGlvbi4NCisgICAgIDMuIEVuYWJsZSB0aGUgTElOIG1vZGUgdXNpbmcgdGhlIFVTQVJUX0xJTkNtZCgpIGZ1bmN0aW9uLg0KKyAgICAgNC4gU2VuZCB0aGUgYnJlYWsgY2hhcmFjdGVyIHVzaW5nIFVTQVJUX1NlbmRCcmVhaygpIGZ1bmN0aW9uLg0KKw0KKyAgVVNBUlQgTElOIE1hc3RlciByZWNlaXZlciBjb21tdW5pY2F0aW9uIGlzIHBvc3NpYmxlIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6DQorICAgICAxLiBQcm9ncmFtIHRoZSBCYXVkIHJhdGUsIFdvcmQgbGVuZ3RoID0gOGJpdHMsIFN0b3AgYml0cyA9IDFiaXQsIFBhcml0eSwgDQorICAgICAgICBNb2RlIHRyYW5zbWl0dGVyIG9yIE1vZGUgcmVjZWl2ZXIgYW5kIGhhcmR3YXJlIGZsb3cgY29udHJvbCB2YWx1ZXMgdXNpbmcgDQorICAgICAgICB0aGUgVVNBUlRfSW5pdCgpIGZ1bmN0aW9uLg0KKyAgICAgMi4gRW5hYmxlIHRoZSBVU0FSVCB1c2luZyB0aGUgVVNBUlRfQ21kKCkgZnVuY3Rpb24uDQorICAgICAzLiBDb25maWd1cmVzIHRoZSBicmVhayBkZXRlY3Rpb24gbGVuZ3RoIHVzaW5nIHRoZSBVU0FSVF9MSU5CcmVha0RldGVjdExlbmd0aENvbmZpZygpDQorICAgICAgICBmdW5jdGlvbi4NCisgICAgIDQuIEVuYWJsZSB0aGUgTElOIG1vZGUgdXNpbmcgdGhlIFVTQVJUX0xJTkNtZCgpIGZ1bmN0aW9uLg0KKw0KKw0KK0Bub3RlIEluIExJTiBtb2RlLCB0aGUgZm9sbG93aW5nIGJpdHMgbXVzdCBiZSBrZXB0IGNsZWFyZWQ6DQorICAgICAgICAtIENMS0VOIGluIHRoZSBVU0FSVF9DUjIgcmVnaXN0ZXIsDQorICAgICAgICAtIFNUT1BbMTowXSwgU0NFTiwgSERTRUwgYW5kIElSRU4gaW4gdGhlIFVTQVJUX0NSMyByZWdpc3Rlci4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyB0aGUgVVNBUlQgTElOIEJyZWFrIGRldGVjdGlvbiBsZW5ndGguDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlRfTElOQnJlYWtEZXRlY3RMZW5ndGg6IHNwZWNpZmllcyB0aGUgTElOIGJyZWFrIGRldGVjdGlvbiBsZW5ndGguDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9MSU5CcmVha0RldGVjdExlbmd0aF8xMGI6IDEwLWJpdCBicmVhayBkZXRlY3Rpb24NCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0xJTkJyZWFrRGV0ZWN0TGVuZ3RoXzExYjogMTEtYml0IGJyZWFrIGRldGVjdGlvbg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9MSU5CcmVha0RldGVjdExlbmd0aENvbmZpZyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0xJTkJyZWFrRGV0ZWN0TGVuZ3RoKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9MSU5fQlJFQUtfREVURUNUX0xFTkdUSChVU0FSVF9MSU5CcmVha0RldGVjdExlbmd0aCkpOw0KKyAgDQorICBVU0FSVHgtPkNSMiAmPSAodWludDE2X3QpfigodWludDE2X3QpVVNBUlRfQ1IyX0xCREwpOw0KKyAgVVNBUlR4LT5DUjIgfD0gVVNBUlRfTElOQnJlYWtEZXRlY3RMZW5ndGg7ICANCit9DQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgVVNBUlQncyBMSU4gbW9kZS4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBVU0FSVCBMSU4gbW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOiBFTkFCTEUgb3IgRElTQUJMRS4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfTElOQ21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIExJTiBtb2RlIGJ5IHNldHRpbmcgdGhlIExJTkVOIGJpdCBpbiB0aGUgQ1IyIHJlZ2lzdGVyICovDQorICAgIFVTQVJUeC0+Q1IyIHw9IFVTQVJUX0NSMl9MSU5FTjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgTElOIG1vZGUgYnkgY2xlYXJpbmcgdGhlIExJTkVOIGJpdCBpbiB0aGUgQ1IyIHJlZ2lzdGVyICovDQorICAgIFVTQVJUeC0+Q1IyICY9ICh1aW50MTZfdCl+KCh1aW50MTZfdClVU0FSVF9DUjJfTElORU4pOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBUcmFuc21pdHMgYnJlYWsgY2hhcmFjdGVycy4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfU2VuZEJyZWFrKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0FMTF9QRVJJUEgoVVNBUlR4KSk7DQorICANCisgIC8qIFNlbmQgYnJlYWsgY2hhcmFjdGVycyAqLw0KKyAgVVNBUlR4LT5DUjEgfD0gVVNBUlRfQ1IxX1NCSzsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfR3JvdXA1IEhhbGZkdXBsZXggbW9kZSBmdW5jdGlvbg0KKyAqICBAYnJpZWYgICBIYWxmLWR1cGxleCBtb2RlIGZ1bmN0aW9uIA0KKyAqDQorQHZlcmJhdGltICAgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICAgICAgICAgICAgICAgICAgICAgICAgSGFsZi1kdXBsZXggbW9kZSBmdW5jdGlvbg0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBVU0FSVCANCisgIEhhbGYtZHVwbGV4IGNvbW11bmljYXRpb24uDQorICANCisgIFRoZSBVU0FSVCBjYW4gYmUgY29uZmlndXJlZCB0byBmb2xsb3cgYSBzaW5nbGUtd2lyZSBoYWxmLWR1cGxleCBwcm90b2NvbCB3aGVyZSANCisgIHRoZSBUWCBhbmQgUlggbGluZXMgYXJlIGludGVybmFsbHkgY29ubmVjdGVkLg0KKw0KKyAgVVNBUlQgSGFsZiBkdXBsZXggY29tbXVuaWNhdGlvbiBpcyBwb3NzaWJsZSB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOg0KKyAgICAgMS4gUHJvZ3JhbSB0aGUgQmF1ZCByYXRlLCBXb3JkIGxlbmd0aCwgU3RvcCBiaXRzLCBQYXJpdHksIE1vZGUgdHJhbnNtaXR0ZXIgDQorICAgICAgICBvciBNb2RlIHJlY2VpdmVyIGFuZCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgdmFsdWVzIHVzaW5nIHRoZSBVU0FSVF9Jbml0KCkNCisgICAgICAgIGZ1bmN0aW9uLg0KKyAgICAgMi4gQ29uZmlndXJlcyB0aGUgVVNBUlQgYWRkcmVzcyB1c2luZyB0aGUgVVNBUlRfU2V0QWRkcmVzcygpIGZ1bmN0aW9uLg0KKyAgICAgMy4gRW5hYmxlIHRoZSBVU0FSVCB1c2luZyB0aGUgVVNBUlRfQ21kKCkgZnVuY3Rpb24uDQorICAgICA0LiBFbmFibGUgdGhlIGhhbGYgZHVwbGV4IG1vZGUgdXNpbmcgVVNBUlRfSGFsZkR1cGxleENtZCgpIGZ1bmN0aW9uLg0KKw0KKw0KK0Bub3RlIFRoZSBSWCBwaW4gaXMgbm8gbG9uZ2VyIHVzZWQNCitAbm90ZSBJbiBIYWxmLWR1cGxleCBtb2RlIHRoZSBmb2xsb3dpbmcgYml0cyBtdXN0IGJlIGtlcHQgY2xlYXJlZDoNCisgICAgICAgIC0gTElORU4gYW5kIENMS0VOIGJpdHMgaW4gdGhlIFVTQVJUX0NSMiByZWdpc3Rlci4NCisgICAgICAgIC0gU0NFTiBhbmQgSVJFTiBiaXRzIGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIuDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFVTQVJUJ3MgSGFsZiBEdXBsZXggY29tbXVuaWNhdGlvbi4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBVU0FSVCBDb21tdW5pY2F0aW9uLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9IYWxmRHVwbGV4Q21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICANCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIEhhbGYtRHVwbGV4IG1vZGUgYnkgc2V0dGluZyB0aGUgSERTRUwgYml0IGluIHRoZSBDUjMgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjMgfD0gVVNBUlRfQ1IzX0hEU0VMOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBIYWxmLUR1cGxleCBtb2RlIGJ5IGNsZWFyaW5nIHRoZSBIRFNFTCBiaXQgaW4gdGhlIENSMyByZWdpc3RlciAqLw0KKyAgICBVU0FSVHgtPkNSMyAmPSAodWludDE2X3QpfigodWludDE2X3QpVVNBUlRfQ1IzX0hEU0VMKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfR3JvdXA2IFNtYXJ0Y2FyZCBtb2RlIGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBTbWFydGNhcmQgbW9kZSBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFydGNhcmQgbW9kZSBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorICBUaGlzIHN1YnNlY3Rpb24gcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFsbG93aW5nIHRvIG1hbmFnZSB0aGUgVVNBUlQgDQorICBTbWFydGNhcmQgY29tbXVuaWNhdGlvbi4NCisgIA0KKyAgVGhlIFNtYXJ0Y2FyZCBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gc3VwcG9ydCBhc3luY2hyb25vdXMgcHJvdG9jb2wgU21hcnRjYXJkcyBhcw0KKyAgZGVmaW5lZCBpbiB0aGUgSVNPIDc4MTYtMyBzdGFuZGFyZC4NCisNCisgIFRoZSBVU0FSVCBjYW4gcHJvdmlkZSBhIGNsb2NrIHRvIHRoZSBzbWFydGNhcmQgdGhyb3VnaCB0aGUgU0NMSyBvdXRwdXQuDQorICBJbiBzbWFydGNhcmQgbW9kZSwgU0NMSyBpcyBub3QgYXNzb2NpYXRlZCB0byB0aGUgY29tbXVuaWNhdGlvbiBidXQgaXMgc2ltcGx5IGRlcml2ZWQgDQorICBmcm9tIHRoZSBpbnRlcm5hbCBwZXJpcGhlcmFsIGlucHV0IGNsb2NrIHRocm91Z2ggYSA1LWJpdCBwcmVzY2FsZXIuDQorDQorICBTbWFydGNhcmQgY29tbXVuaWNhdGlvbiBpcyBwb3NzaWJsZSB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlOg0KKyAgICAgMS4gQ29uZmlndXJlcyB0aGUgU21hcnRjYXJkIFByZXNjYWxlciB1c2luZyB0aGUgVVNBUlRfU2V0UHJlc2NhbGVyKCkgZnVuY3Rpb24uDQorICAgICAyLiBDb25maWd1cmVzIHRoZSBTbWFydGNhcmQgR3VhcmQgVGltZSB1c2luZyB0aGUgVVNBUlRfU2V0R3VhcmRUaW1lKCkgZnVuY3Rpb24uDQorICAgICAzLiBQcm9ncmFtIHRoZSBVU0FSVCBjbG9jayB1c2luZyB0aGUgVVNBUlRfQ2xvY2tJbml0KCkgZnVuY3Rpb24gYXMgZm9sbG93aW5nOg0KKyAgICAgICAgLSBVU0FSVCBDbG9jayBlbmFibGVkDQorICAgICAgICAtIFVTQVJUIENQT0wgTG93DQorICAgICAgICAtIFVTQVJUIENQSEEgb24gZmlyc3QgZWRnZQ0KKyAgICAgICAgLSBVU0FSVCBMYXN0IEJpdCBDbG9jayBFbmFibGVkDQorICAgICA0LiBQcm9ncmFtIHRoZSBTbWFydGNhcmQgaW50ZXJmYWNlIHVzaW5nIHRoZSBVU0FSVF9Jbml0KCkgZnVuY3Rpb24gYXMgZm9sbG93aW5nOg0KKyAgICAgICAgLSBXb3JkIExlbmd0aCA9IDkgQml0cw0KKyAgICAgICAgLSAxLjUgU3RvcCBCaXQNCisgICAgICAgIC0gRXZlbiBwYXJpdHkNCisgICAgICAgIC0gQmF1ZFJhdGUgPSAxMjA5NiBiYXVkDQorICAgICAgICAtIEhhcmR3YXJlIGZsb3cgY29udHJvbCBkaXNhYmxlZCAoUlRTIGFuZCBDVFMgc2lnbmFscykNCisgICAgICAgIC0gVHggYW5kIFJ4IGVuYWJsZWQNCisgICAgIDUuIE9wdGlvbmFsbHkgeW91IGNhbiBlbmFibGUgdGhlIHBhcml0eSBlcnJvciBpbnRlcnJ1cHQgdXNpbmcgdGhlIFVTQVJUX0lUQ29uZmlnKCkNCisgICAgICAgIGZ1bmN0aW9uDQorICAgICA2LiBFbmFibGUgdGhlIFVTQVJUIHVzaW5nIHRoZSBVU0FSVF9DbWQoKSBmdW5jdGlvbi4NCisgICAgIDcuIEVuYWJsZSB0aGUgU21hcnRjYXJkIE5BQ0sgdXNpbmcgdGhlIFVTQVJUX1NtYXJ0Q2FyZE5BQ0tDbWQoKSBmdW5jdGlvbi4NCisgICAgIDguIEVuYWJsZSB0aGUgU21hcnRjYXJkIGludGVyZmFjZSB1c2luZyB0aGUgVVNBUlRfU21hcnRDYXJkQ21kKCkgZnVuY3Rpb24uDQorDQorICBQbGVhc2UgcmVmZXIgdG8gdGhlIElTTyA3ODE2LTMgc3BlY2lmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKw0KK0Bub3RlIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hvb3NlIDAuNSBzdG9wIGJpdCBmb3IgcmVjZWl2aW5nIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCANCisgICAgICB0byB1c2UgMS41IHN0b3AgYml0cyBmb3IgYm90aCB0cmFuc21pdHRpbmcgYW5kIHJlY2VpdmluZyB0byBhdm9pZCBzd2l0Y2hpbmcgDQorICAgICAgYmV0d2VlbiB0aGUgdHdvIGNvbmZpZ3VyYXRpb25zLg0KK0Bub3RlIEluIHNtYXJ0Y2FyZCBtb2RlLCB0aGUgZm9sbG93aW5nIGJpdHMgbXVzdCBiZSBrZXB0IGNsZWFyZWQ6DQorICAgICAgICAtIExJTkVOIGJpdCBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyLg0KKyAgICAgICAgLSBIRFNFTCBhbmQgSVJFTiBiaXRzIGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIuDQorQG5vdGUgU21hcnRjYXJkIG1vZGUgaXMgYXZhaWxhYmxlIG9uIFVTQVJUIHBlcmlwaGVyYWxzIG9ubHkgKG5vdCBhdmFpbGFibGUgb24gVUFSVDQgDQorICAgICAgYW5kIFVBUlQ1IHBlcmlwaGVyYWxzKS4NCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyB0aGUgc3BlY2lmaWVkIFVTQVJUIGd1YXJkIHRpbWUuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzIG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlRfR3VhcmRUaW1lOiBzcGVjaWZpZXMgdGhlIGd1YXJkIHRpbWUuICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX1NldEd1YXJkVGltZShVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQ4X3QgVVNBUlRfR3VhcmRUaW1lKQ0KK3sgICAgDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUXzEyMzZfUEVSSVBIKFVTQVJUeCkpOw0KKyAgDQorICAvKiBDbGVhciB0aGUgVVNBUlQgR3VhcmQgdGltZSAqLw0KKyAgVVNBUlR4LT5HVFBSICY9IFVTQVJUX0dUUFJfUFNDOw0KKyAgLyogU2V0IHRoZSBVU0FSVCBndWFyZCB0aW1lICovDQorICBVU0FSVHgtPkdUUFIgfD0gKHVpbnQxNl90KSgodWludDE2X3QpVVNBUlRfR3VhcmRUaW1lIDw8IDB4MDgpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBVU0FSVCdzIFNtYXJ0IENhcmQgbW9kZS4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBTbWFydCBDYXJkIG1vZGUuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuICAgICAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX1NtYXJ0Q2FyZENtZChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUXzEyMzZfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIFNDIG1vZGUgYnkgc2V0dGluZyB0aGUgU0NFTiBiaXQgaW4gdGhlIENSMyByZWdpc3RlciAqLw0KKyAgICBVU0FSVHgtPkNSMyB8PSBVU0FSVF9DUjNfU0NFTjsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgU0MgbW9kZSBieSBjbGVhcmluZyB0aGUgU0NFTiBiaXQgaW4gdGhlIENSMyByZWdpc3RlciAqLw0KKyAgICBVU0FSVHgtPkNSMyAmPSAodWludDE2X3QpfigodWludDE2X3QpVVNBUlRfQ1IzX1NDRU4pOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIE5BQ0sgdHJhbnNtaXNzaW9uLg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMyBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIE5ld1N0YXRlOiBuZXcgc3RhdGUgb2YgdGhlIE5BQ0sgdHJhbnNtaXNzaW9uLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLiAgDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX1NtYXJ0Q2FyZE5BQ0tDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCBGdW5jdGlvbmFsU3RhdGUgTmV3U3RhdGUpDQorew0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF8xMjM2X1BFUklQSChVU0FSVHgpKTsgDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOw0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgTkFDSyB0cmFuc21pc3Npb24gYnkgc2V0dGluZyB0aGUgTkFDSyBiaXQgaW4gdGhlIENSMyByZWdpc3RlciAqLw0KKyAgICBVU0FSVHgtPkNSMyB8PSBVU0FSVF9DUjNfTkFDSzsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLyogRGlzYWJsZSB0aGUgTkFDSyB0cmFuc21pc3Npb24gYnkgY2xlYXJpbmcgdGhlIE5BQ0sgYml0IGluIHRoZSBDUjMgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjMgJj0gKHVpbnQxNl90KX4oKHVpbnQxNl90KVVTQVJUX0NSM19OQUNLKTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgVVNBUlRfR3JvdXA3IElyREEgbW9kZSBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSXJEQSBtb2RlIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJckRBIG1vZGUgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KKyAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBtYW5hZ2UgdGhlIFVTQVJUIA0KKyAgSXJEQSBjb21tdW5pY2F0aW9uLg0KKyAgDQorICBJckRBIGlzIGEgaGFsZiBkdXBsZXggY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gSWYgdGhlIFRyYW5zbWl0dGVyIGlzIGJ1c3ksIGFueSBkYXRhDQorICBvbiB0aGUgSXJEQSByZWNlaXZlIGxpbmUgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBJckRBIGRlY29kZXIgYW5kIGlmIHRoZSBSZWNlaXZlciANCisgIGlzIGJ1c3ksIGRhdGEgb24gdGhlIFRYIGZyb20gdGhlIFVTQVJUIHRvIElyREEgd2lsbCBub3QgYmUgZW5jb2RlZCBieSBJckRBLg0KKyAgV2hpbGUgcmVjZWl2aW5nIGRhdGEsIHRyYW5zbWlzc2lvbiBzaG91bGQgYmUgYXZvaWRlZCBhcyB0aGUgZGF0YSB0byBiZSB0cmFuc21pdHRlZA0KKyAgY291bGQgYmUgY29ycnVwdGVkLg0KKw0KKyAgSXJEQSBjb21tdW5pY2F0aW9uIGlzIHBvc3NpYmxlIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6DQorICAgICAxLiBQcm9ncmFtIHRoZSBCYXVkIHJhdGUsIFdvcmQgbGVuZ3RoID0gOCBiaXRzLCBTdG9wIGJpdHMsIFBhcml0eSwgVHJhbnNtaXR0ZXIvUmVjZWl2ZXIgDQorICAgICAgICBtb2RlcyBhbmQgaGFyZHdhcmUgZmxvdyBjb250cm9sIHZhbHVlcyB1c2luZyB0aGUgVVNBUlRfSW5pdCgpIGZ1bmN0aW9uLg0KKyAgICAgMi4gRW5hYmxlIHRoZSBVU0FSVCB1c2luZyB0aGUgVVNBUlRfQ21kKCkgZnVuY3Rpb24uDQorICAgICAzLiBDb25maWd1cmVzIHRoZSBJckRBIHB1bHNlIHdpZHRoIGJ5IGNvbmZpZ3VyaW5nIHRoZSBwcmVzY2FsZXIgdXNpbmcgIA0KKyAgICAgICAgdGhlIFVTQVJUX1NldFByZXNjYWxlcigpIGZ1bmN0aW9uLg0KKyAgICAgNC4gQ29uZmlndXJlcyB0aGUgSXJEQSAgVVNBUlRfSXJEQU1vZGVfTG93UG93ZXIgb3IgVVNBUlRfSXJEQU1vZGVfTm9ybWFsIG1vZGUNCisgICAgICAgIHVzaW5nIHRoZSBVU0FSVF9JckRBQ29uZmlnKCkgZnVuY3Rpb24uDQorICAgICA1LiBFbmFibGUgdGhlIElyREEgdXNpbmcgdGhlIFVTQVJUX0lyREFDbWQoKSBmdW5jdGlvbi4NCisNCitAbm90ZSBBIHB1bHNlIG9mIHdpZHRoIGxlc3MgdGhhbiB0d28gYW5kIGdyZWF0ZXIgdGhhbiBvbmUgUFNDIHBlcmlvZChzKSBtYXkgb3IgbWF5DQorICAgICAgbm90IGJlIHJlamVjdGVkLg0KK0Bub3RlIFRoZSByZWNlaXZlciBzZXQgdXAgdGltZSBzaG91bGQgYmUgbWFuYWdlZCBieSBzb2Z0d2FyZS4gVGhlIElyREEgcGh5c2ljYWwgbGF5ZXINCisgICAgICBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIG1pbmltdW0gb2YgMTAgbXMgZGVsYXkgYmV0d2VlbiB0cmFuc21pc3Npb24gYW5kIA0KKyAgICAgIHJlY2VwdGlvbiAoSXJEQSBpcyBhIGhhbGYgZHVwbGV4IHByb3RvY29sKS4NCitAbm90ZSBJbiBJckRBIG1vZGUsIHRoZSBmb2xsb3dpbmcgYml0cyBtdXN0IGJlIGtlcHQgY2xlYXJlZDoNCisgICAgICAgIC0gTElORU4sIFNUT1AgYW5kIENMS0VOIGJpdHMgaW4gdGhlIFVTQVJUX0NSMiByZWdpc3Rlci4NCisgICAgICAgIC0gU0NFTiBhbmQgSERTRUwgYml0cyBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLg0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBDb25maWd1cmVzIHRoZSBVU0FSVCdzIElyREEgaW50ZXJmYWNlLg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFVTQVJUX0lyREFNb2RlOiBzcGVjaWZpZXMgdGhlIElyREEgbW9kZS4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lyREFNb2RlX0xvd1Bvd2VyDQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JckRBTW9kZV9Ob3JtYWwNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgVVNBUlRfSXJEQUNvbmZpZyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0lyREFNb2RlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9JUkRBX01PREUoVVNBUlRfSXJEQU1vZGUpKTsNCisgICAgDQorICBVU0FSVHgtPkNSMyAmPSAodWludDE2X3QpfigodWludDE2X3QpVVNBUlRfQ1IzX0lSTFApOw0KKyAgVVNBUlR4LT5DUjMgfD0gVVNBUlRfSXJEQU1vZGU7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFVTQVJUJ3MgSXJEQSBpbnRlcmZhY2UuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgTmV3U3RhdGU6IG5ldyBzdGF0ZSBvZiB0aGUgSXJEQSBtb2RlLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLg0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9JckRBQ21kKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKE5ld1N0YXRlKSk7DQorICAgIA0KKyAgaWYgKE5ld1N0YXRlICE9IERJU0FCTEUpDQorICB7DQorICAgIC8qIEVuYWJsZSB0aGUgSXJEQSBtb2RlIGJ5IHNldHRpbmcgdGhlIElSRU4gYml0IGluIHRoZSBDUjMgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjMgfD0gVVNBUlRfQ1IzX0lSRU47DQorICB9DQorICBlbHNlDQorICB7DQorICAgIC8qIERpc2FibGUgdGhlIElyREEgbW9kZSBieSBjbGVhcmluZyB0aGUgSVJFTiBiaXQgaW4gdGhlIENSMyByZWdpc3RlciAqLw0KKyAgICBVU0FSVHgtPkNSMyAmPSAodWludDE2X3QpfigodWludDE2X3QpVVNBUlRfQ1IzX0lSRU4pOw0KKyAgfQ0KK30NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBkZWZncm91cCBVU0FSVF9Hcm91cDggRE1BIHRyYW5zZmVycyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyAqICBAYnJpZWYgICBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICAgICBETUEgdHJhbnNmZXJzIG1hbmFnZW1lbnQgZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisgIA0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFVTQVJUJ3MgRE1BIGludGVyZmFjZS4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBVU0FSVF9ETUFSZXE6IHNwZWNpZmllcyB0aGUgRE1BIHJlcXVlc3QuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9ETUFSZXFfVHg6IFVTQVJUIERNQSB0cmFuc21pdCByZXF1ZXN0DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9ETUFSZXFfUng6IFVTQVJUIERNQSByZWNlaXZlIHJlcXVlc3QNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBETUEgUmVxdWVzdCBzb3VyY2VzLg0KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6IEVOQUJMRSBvciBESVNBQkxFLiAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9ETUFDbWQoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9ETUFSZXEsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0FMTF9QRVJJUEgoVVNBUlR4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfRE1BUkVRKFVTQVJUX0RNQVJlcSkpOyAgDQorICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShOZXdTdGF0ZSkpOyANCisNCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAvKiBFbmFibGUgdGhlIERNQSB0cmFuc2ZlciBmb3Igc2VsZWN0ZWQgcmVxdWVzdHMgYnkgc2V0dGluZyB0aGUgRE1BVCBhbmQvb3INCisgICAgICAgRE1BUiBiaXRzIGluIHRoZSBVU0FSVCBDUjMgcmVnaXN0ZXIgKi8NCisgICAgVVNBUlR4LT5DUjMgfD0gVVNBUlRfRE1BUmVxOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBEaXNhYmxlIHRoZSBETUEgdHJhbnNmZXIgZm9yIHNlbGVjdGVkIHJlcXVlc3RzIGJ5IGNsZWFyaW5nIHRoZSBETUFUIGFuZC9vcg0KKyAgICAgICBETUFSIGJpdHMgaW4gdGhlIFVTQVJUIENSMyByZWdpc3RlciAqLw0KKyAgICBVU0FSVHgtPkNSMyAmPSAodWludDE2X3QpflVTQVJUX0RNQVJlcTsNCisgIH0NCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKyAgDQorLyoqIEBkZWZncm91cCBVU0FSVF9Hcm91cDkgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIGFuZCBmbGFncyBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICANCisNCisgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gY29uZmlndXJlIHRoZSBVU0FSVCANCisgIEludGVycnVwdHMgc291cmNlcywgRE1BIGNoYW5uZWxzIHJlcXVlc3RzIGFuZCBjaGVjayBvciBjbGVhciB0aGUgZmxhZ3Mgb3IgDQorICBwZW5kaW5nIGJpdHMgc3RhdHVzLg0KKyAgVGhlIHVzZXIgc2hvdWxkIGlkZW50aWZ5IHdoaWNoIG1vZGUgd2lsbCBiZSB1c2VkIGluIGhpcyBhcHBsaWNhdGlvbiB0byBtYW5hZ2UgDQorICB0aGUgY29tbXVuaWNhdGlvbjogUG9sbGluZyBtb2RlLCBJbnRlcnJ1cHQgbW9kZSBvciBETUEgbW9kZS4gDQorICAgIA0KKyAgUG9sbGluZyBNb2RlDQorICA9PT09PT09PT09PT09DQorICBJbiBQb2xsaW5nIE1vZGUsIHRoZSBTUEkgY29tbXVuaWNhdGlvbiBjYW4gYmUgbWFuYWdlZCBieSAxMCBmbGFnczoNCisgICAgIDEuIFVTQVJUX0ZMQUdfVFhFIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXQgYnVmZmVyIHJlZ2lzdGVyDQorICAgICAyLiBVU0FSVF9GTEFHX1JYTkUgOiB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIHRoZSByZWNlaXZlIGJ1ZmZlciByZWdpc3Rlcg0KKyAgICAgMy4gVVNBUlRfRkxBR19UQyA6IHRvIGluZGljYXRlIHRoZSBzdGF0dXMgb2YgdGhlIHRyYW5zbWl0IG9wZXJhdGlvbg0KKyAgICAgNC4gVVNBUlRfRkxBR19JRExFIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgSWRsZSBMaW5lICAgICAgICAgICAgIA0KKyAgICAgNS4gVVNBUlRfRkxBR19DVFMgOiB0byBpbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIHRoZSBuQ1RTIGlucHV0DQorICAgICA2LiBVU0FSVF9GTEFHX0xCRCA6IHRvIGluZGljYXRlIHRoZSBzdGF0dXMgb2YgdGhlIExJTiBicmVhayBkZXRlY3Rpb24NCisgICAgIDcuIFVTQVJUX0ZMQUdfTkUgOiB0byBpbmRpY2F0ZSBpZiBhIG5vaXNlIGVycm9yIG9jY3VyDQorICAgICA4LiBVU0FSVF9GTEFHX0ZFIDogdG8gaW5kaWNhdGUgaWYgYSBmcmFtZSBlcnJvciBvY2N1cg0KKyAgICAgOS4gVVNBUlRfRkxBR19QRSA6IHRvIGluZGljYXRlIGlmIGEgcGFyaXR5IGVycm9yIG9jY3VyDQorICAgICAxMC4gVVNBUlRfRkxBR19PUkUgOiB0byBpbmRpY2F0ZSBpZiBhbiBPdmVycnVuIGVycm9yIG9jY3VyDQorDQorICBJbiB0aGlzIE1vZGUgaXQgaXMgYWR2aXNlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQorICAgICAgLSBGbGFnU3RhdHVzIFVTQVJUX0dldEZsYWdTdGF0dXMoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9GTEFHKTsNCisgICAgICAtIHZvaWQgVVNBUlRfQ2xlYXJGbGFnKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfRkxBRyk7DQorDQorICBJbnRlcnJ1cHQgTW9kZQ0KKyAgPT09PT09PT09PT09PT09DQorICBJbiBJbnRlcnJ1cHQgTW9kZSwgdGhlIFVTQVJUIGNvbW11bmljYXRpb24gY2FuIGJlIG1hbmFnZWQgYnkgOCBpbnRlcnJ1cHQgc291cmNlcw0KKyAgYW5kIDEwIHBlbmRpbmcgYml0czogDQorDQorICBQZW5kaW5nIEJpdHM6DQorICAtLS0tLS0tLS0tLS0tIA0KKyAgICAgMS4gVVNBUlRfSVRfVFhFIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXQgYnVmZmVyIHJlZ2lzdGVyDQorICAgICAyLiBVU0FSVF9JVF9SWE5FIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgcmVjZWl2ZSBidWZmZXIgcmVnaXN0ZXINCisgICAgIDMuIFVTQVJUX0lUX1RDIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXQgb3BlcmF0aW9uDQorICAgICA0LiBVU0FSVF9JVF9JRExFIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgSWRsZSBMaW5lICAgICAgICAgICAgIA0KKyAgICAgNS4gVVNBUlRfSVRfQ1RTIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgbkNUUyBpbnB1dA0KKyAgICAgNi4gVVNBUlRfSVRfTEJEIDogdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgTElOIGJyZWFrIGRldGVjdGlvbg0KKyAgICAgNy4gVVNBUlRfSVRfTkUgOiB0byBpbmRpY2F0ZSBpZiBhIG5vaXNlIGVycm9yIG9jY3VyDQorICAgICA4LiBVU0FSVF9JVF9GRSA6IHRvIGluZGljYXRlIGlmIGEgZnJhbWUgZXJyb3Igb2NjdXINCisgICAgIDkuIFVTQVJUX0lUX1BFIDogdG8gaW5kaWNhdGUgaWYgYSBwYXJpdHkgZXJyb3Igb2NjdXINCisgICAgIDEwLiBVU0FSVF9JVF9PUkUgOiB0byBpbmRpY2F0ZSBpZiBhbiBPdmVycnVuIGVycm9yIG9jY3VyDQorDQorICBJbnRlcnJ1cHQgU291cmNlOg0KKyAgLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgIDEuIFVTQVJUX0lUX1RYRSA6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIFR4IGJ1ZmZlciBlbXB0eSANCisgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC4gDQorICAgICAyLiBVU0FSVF9JVF9SWE5FIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgUnggYnVmZmVyIG5vdCANCisgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBpbnRlcnJ1cHQuDQorICAgICAzLiBVU0FSVF9JVF9UQyA6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIFRyYW5zbWl0IGNvbXBsZXRlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiANCisgICAgIDQuIFVTQVJUX0lUX0lETEUgOiBzcGVjaWZpZXMgdGhlIGludGVycnVwdCBzb3VyY2UgZm9yIHRoZSBJZGxlIExpbmUgaW50ZXJydXB0LiAgICAgICAgICAgICANCisgICAgIDUuIFVTQVJUX0lUX0NUUyA6IHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSBmb3IgdGhlIENUUyBpbnRlcnJ1cHQuIA0KKyAgICAgNi4gVVNBUlRfSVRfTEJEIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgTElOIGJyZWFrIGRldGVjdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiANCisgICAgIDcuIFVTQVJUX0lUX1BFIDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgcGFyaXR5IGVycm9yIGludGVycnVwdC4gDQorICAgICA4LiBVU0FSVF9JVF9FUlIgOiAgc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIGZvciB0aGUgZXJyb3JzIGludGVycnVwdC4NCisNCitAbm90ZSBTb21lIHBhcmFtZXRlcnMgYXJlIGNvZGVkIGluIG9yZGVyIHRvIHVzZSB0aGVtIGFzIGludGVycnVwdCBzb3VyY2Ugb3IgYXMgcGVuZGluZyBiaXRzLg0KKw0KKyAgSW4gdGhpcyBNb2RlIGl0IGlzIGFkdmlzZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOg0KKyAgICAgLSB2b2lkIFVTQVJUX0lUQ29uZmlnKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQorICAgICAtIElUU3RhdHVzIFVTQVJUX0dldElUU3RhdHVzKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfSVQpOw0KKyAgICAgLSB2b2lkIFVTQVJUX0NsZWFySVRQZW5kaW5nQml0KFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfSVQpOw0KKw0KKyAgRE1BIE1vZGUNCisgID09PT09PT09DQorICBJbiBETUEgTW9kZSwgdGhlIFVTQVJUIGNvbW11bmljYXRpb24gY2FuIGJlIG1hbmFnZWQgYnkgMiBETUEgQ2hhbm5lbCByZXF1ZXN0czoNCisgICAgIDEuIFVTQVJUX0RNQVJlcV9UeDogc3BlY2lmaWVzIHRoZSBUeCBidWZmZXIgRE1BIHRyYW5zZmVyIHJlcXVlc3QNCisgICAgIDIuIFVTQVJUX0RNQVJlcV9SeDogc3BlY2lmaWVzIHRoZSBSeCBidWZmZXIgRE1BIHRyYW5zZmVyIHJlcXVlc3QNCisNCisgIEluIHRoaXMgTW9kZSBpdCBpcyBhZHZpc2VkIHRvIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOg0KKyAgICAgLSB2b2lkIFVTQVJUX0RNQUNtZChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0RNQVJlcSwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCisNCitAZW5kdmVyYmF0aW0NCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEBicmllZiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgc3BlY2lmaWVkIFVTQVJUIGludGVycnVwdHMuDQorICAqIEBwYXJhbSAgVVNBUlR4OiB3aGVyZSB4IGNhbiBiZSAxLCAyLCAzLCA0LCA1IG9yIDYgdG8gc2VsZWN0IHRoZSBVU0FSVCBvciANCisgICogICAgICAgICBVQVJUIHBlcmlwaGVyYWwuDQorICAqIEBwYXJhbSAgVVNBUlRfSVQ6IHNwZWNpZmllcyB0aGUgVVNBUlQgaW50ZXJydXB0IHNvdXJjZXMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX0NUUzogIENUUyBjaGFuZ2UgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JVF9MQkQ6ICBMSU4gQnJlYWsgZGV0ZWN0aW9uIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfVFhFOiAgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBlbXB0eSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX1RDOiAgIFRyYW5zbWlzc2lvbiBjb21wbGV0ZSBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX1JYTkU6IFJlY2VpdmUgRGF0YSByZWdpc3RlciBub3QgZW1wdHkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JVF9JRExFOiBJZGxlIGxpbmUgZGV0ZWN0aW9uIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfUEU6ICAgUGFyaXR5IEVycm9yIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfRVJSOiAgRXJyb3IgaW50ZXJydXB0KEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikNCisgICogQHBhcmFtICBOZXdTdGF0ZTogbmV3IHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgVVNBUlR4IGludGVycnVwdHMuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZTogRU5BQkxFIG9yIERJU0FCTEUuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFVTQVJUX0lUQ29uZmlnKFVTQVJUX1R5cGVEZWYqIFVTQVJUeCwgdWludDE2X3QgVVNBUlRfSVQsIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSkNCit7DQorICB1aW50MzJfdCB1c2FydHJlZyA9IDB4MDAsIGl0cG9zID0gMHgwMCwgaXRtYXNrID0gMHgwMDsNCisgIHVpbnQzMl90IHVzYXJ0eGJhc2UgPSAweDAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0NPTkZJR19JVChVU0FSVF9JVCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoTmV3U3RhdGUpKTsNCisNCisgIC8qIFRoZSBDVFMgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUgZm9yIFVBUlQ0IGFuZCBVQVJUNSAqLw0KKyAgaWYgKFVTQVJUX0lUID09IFVTQVJUX0lUX0NUUykNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUXzEyMzZfUEVSSVBIKFVTQVJUeCkpOw0KKyAgfSANCisgICAgDQorICB1c2FydHhiYXNlID0gKHVpbnQzMl90KVVTQVJUeDsNCisNCisgIC8qIEdldCB0aGUgVVNBUlQgcmVnaXN0ZXIgaW5kZXggKi8NCisgIHVzYXJ0cmVnID0gKCgodWludDhfdClVU0FSVF9JVCkgPj4gMHgwNSk7DQorDQorICAvKiBHZXQgdGhlIGludGVycnVwdCBwb3NpdGlvbiAqLw0KKyAgaXRwb3MgPSBVU0FSVF9JVCAmIElUX01BU0s7DQorICBpdG1hc2sgPSAoKCh1aW50MzJfdCkweDAxKSA8PCBpdHBvcyk7DQorICAgIA0KKyAgaWYgKHVzYXJ0cmVnID09IDB4MDEpIC8qIFRoZSBJVCBpcyBpbiBDUjEgcmVnaXN0ZXIgKi8NCisgIHsNCisgICAgdXNhcnR4YmFzZSArPSAweDBDOw0KKyAgfQ0KKyAgZWxzZSBpZiAodXNhcnRyZWcgPT0gMHgwMikgLyogVGhlIElUIGlzIGluIENSMiByZWdpc3RlciAqLw0KKyAgew0KKyAgICB1c2FydHhiYXNlICs9IDB4MTA7DQorICB9DQorICBlbHNlIC8qIFRoZSBJVCBpcyBpbiBDUjMgcmVnaXN0ZXIgKi8NCisgIHsNCisgICAgdXNhcnR4YmFzZSArPSAweDE0OyANCisgIH0NCisgIGlmIChOZXdTdGF0ZSAhPSBESVNBQkxFKQ0KKyAgew0KKyAgICAqKF9fSU8gdWludDMyX3QqKXVzYXJ0eGJhc2UgIHw9IGl0bWFzazsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgKihfX0lPIHVpbnQzMl90Kil1c2FydHhiYXNlICY9IH5pdG1hc2s7DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVNBUlQgZmxhZyBpcyBzZXQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFVTQVJUX0ZMQUc6IHNwZWNpZmllcyB0aGUgZmxhZyB0byBjaGVjay4NCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfQ1RTOiAgQ1RTIENoYW5nZSBmbGFnIChub3QgYXZhaWxhYmxlIGZvciBVQVJUNCBhbmQgVUFSVDUpDQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9GTEFHX0xCRDogIExJTiBCcmVhayBkZXRlY3Rpb24gZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfRkxBR19UWEU6ICBUcmFuc21pdCBkYXRhIHJlZ2lzdGVyIGVtcHR5IGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfVEM6ICAgVHJhbnNtaXNzaW9uIENvbXBsZXRlIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfUlhORTogUmVjZWl2ZSBkYXRhIHJlZ2lzdGVyIG5vdCBlbXB0eSBmbGFnDQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9GTEFHX0lETEU6IElkbGUgTGluZSBkZXRlY3Rpb24gZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfRkxBR19PUkU6ICBPdmVyUnVuIEVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfTkU6ICAgTm9pc2UgRXJyb3IgZmxhZw0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfRkxBR19GRTogICBGcmFtaW5nIEVycm9yIGZsYWcNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfUEU6ICAgUGFyaXR5IEVycm9yIGZsYWcNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFVTQVJUX0ZMQUcgKFNFVCBvciBSRVNFVCkuDQorICAqLw0KK0ZsYWdTdGF0dXMgVVNBUlRfR2V0RmxhZ1N0YXR1cyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0ZMQUcpDQorew0KKyAgRmxhZ1N0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9GTEFHKFVTQVJUX0ZMQUcpKTsNCisNCisgIC8qIFRoZSBDVFMgZmxhZyBpcyBub3QgYXZhaWxhYmxlIGZvciBVQVJUNCBhbmQgVUFSVDUgKi8NCisgIGlmIChVU0FSVF9GTEFHID09IFVTQVJUX0ZMQUdfQ1RTKQ0KKyAgew0KKyAgICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfMTIzNl9QRVJJUEgoVVNBUlR4KSk7DQorICB9IA0KKyAgICANCisgIGlmICgoVVNBUlR4LT5TUiAmIFVTQVJUX0ZMQUcpICE9ICh1aW50MTZfdClSRVNFVCkNCisgIHsNCisgICAgYml0c3RhdHVzID0gU0VUOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBSRVNFVDsNCisgIH0NCisgIHJldHVybiBiaXRzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgVVNBUlR4J3MgcGVuZGluZyBmbGFncy4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBVU0FSVF9GTEFHOiBzcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9GTEFHX0NUUzogIENUUyBDaGFuZ2UgZmxhZyAobm90IGF2YWlsYWJsZSBmb3IgVUFSVDQgYW5kIFVBUlQ1KS4NCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfTEJEOiAgTElOIEJyZWFrIGRldGVjdGlvbiBmbGFnLg0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfRkxBR19UQzogICBUcmFuc21pc3Npb24gQ29tcGxldGUgZmxhZy4NCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0ZMQUdfUlhORTogUmVjZWl2ZSBkYXRhIHJlZ2lzdGVyIG5vdCBlbXB0eSBmbGFnLg0KKyAgKiAgIA0KKyAgKiBAbm90ZSAgIFBFIChQYXJpdHkgZXJyb3IpLCBGRSAoRnJhbWluZyBlcnJvciksIE5FIChOb2lzZSBlcnJvciksIE9SRSAoT3ZlclJ1biANCisgICogICAgICAgICAgZXJyb3IpIGFuZCBJRExFIChJZGxlIGxpbmUgZGV0ZWN0ZWQpIGZsYWdzIGFyZSBjbGVhcmVkIGJ5IHNvZnR3YXJlIA0KKyAgKiAgICAgICAgICBzZXF1ZW5jZTogYSByZWFkIG9wZXJhdGlvbiB0byBVU0FSVF9TUiByZWdpc3RlciAoVVNBUlRfR2V0RmxhZ1N0YXR1cygpKSANCisgICogICAgICAgICAgZm9sbG93ZWQgYnkgYSByZWFkIG9wZXJhdGlvbiB0byBVU0FSVF9EUiByZWdpc3RlciAoVVNBUlRfUmVjZWl2ZURhdGEoKSkuDQorICAqIEBub3RlICAgUlhORSBmbGFnIGNhbiBiZSBhbHNvIGNsZWFyZWQgYnkgYSByZWFkIHRvIHRoZSBVU0FSVF9EUiByZWdpc3RlciANCisgICogICAgICAgICAgKFVTQVJUX1JlY2VpdmVEYXRhKCkpLg0KKyAgKiBAbm90ZSAgIFRDIGZsYWcgY2FuIGJlIGFsc28gY2xlYXJlZCBieSBzb2Z0d2FyZSBzZXF1ZW5jZTogYSByZWFkIG9wZXJhdGlvbiB0byANCisgICogICAgICAgICAgVVNBUlRfU1IgcmVnaXN0ZXIgKFVTQVJUX0dldEZsYWdTdGF0dXMoKSkgZm9sbG93ZWQgYnkgYSB3cml0ZSBvcGVyYXRpb24NCisgICogICAgICAgICAgdG8gVVNBUlRfRFIgcmVnaXN0ZXIgKFVTQVJUX1NlbmREYXRhKCkpLg0KKyAgKiBAbm90ZSAgIFRYRSBmbGFnIGlzIGNsZWFyZWQgb25seSBieSBhIHdyaXRlIHRvIHRoZSBVU0FSVF9EUiByZWdpc3RlciANCisgICogICAgICAgICAgKFVTQVJUX1NlbmREYXRhKCkpLg0KKyAgKiAgIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9DbGVhckZsYWcoVVNBUlRfVHlwZURlZiogVVNBUlR4LCB1aW50MTZfdCBVU0FSVF9GTEFHKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQUxMX1BFUklQSChVU0FSVHgpKTsNCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9DTEVBUl9GTEFHKFVTQVJUX0ZMQUcpKTsNCisNCisgIC8qIFRoZSBDVFMgZmxhZyBpcyBub3QgYXZhaWxhYmxlIGZvciBVQVJUNCBhbmQgVUFSVDUgKi8NCisgIGlmICgoVVNBUlRfRkxBRyAmIFVTQVJUX0ZMQUdfQ1RTKSA9PSBVU0FSVF9GTEFHX0NUUykNCisgIHsNCisgICAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUXzEyMzZfUEVSSVBIKFVTQVJUeCkpOw0KKyAgfSANCisgICAgICAgDQorICBVU0FSVHgtPlNSID0gKHVpbnQxNl90KX5VU0FSVF9GTEFHOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVTQVJUIGludGVycnVwdCBoYXMgb2NjdXJyZWQgb3Igbm90Lg0KKyAgKiBAcGFyYW0gIFVTQVJUeDogd2hlcmUgeCBjYW4gYmUgMSwgMiwgMywgNCwgNSBvciA2IHRvIHNlbGVjdCB0aGUgVVNBUlQgb3IgDQorICAqICAgICAgICAgVUFSVCBwZXJpcGhlcmFsLg0KKyAgKiBAcGFyYW0gIFVTQVJUX0lUOiBzcGVjaWZpZXMgdGhlIFVTQVJUIGludGVycnVwdCBzb3VyY2UgdG8gY2hlY2suDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JVF9DVFMgICAgOiBDVFMgY2hhbmdlIGludGVycnVwdCAobm90IGF2YWlsYWJsZSBmb3IgVUFSVDQgYW5kIFVBUlQ1KQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfTEJEICAgIDogTElOIEJyZWFrIGRldGVjdGlvbiBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX1RYRSAgICA6IFRyYW5zbWl0IERhdGEgUmVnaXN0ZXIgZW1wdHkgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JVF9UQyAgICAgOiBUcmFuc21pc3Npb24gY29tcGxldGUgaW50ZXJydXB0DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JVF9SWE5FICAgOiBSZWNlaXZlIERhdGEgcmVnaXN0ZXIgbm90IGVtcHR5IGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfSURMRSAgIDogSWRsZSBsaW5lIGRldGVjdGlvbiBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX09SRV9SWCA6IE92ZXJSdW4gRXJyb3IgaW50ZXJydXB0IGlmIHRoZSBSWE5FSUUgYml0IGlzIHNldA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfT1JFX0VSIDogT3ZlclJ1biBFcnJvciBpbnRlcnJ1cHQgaWYgdGhlIEVJRSBiaXQgaXMgc2V0ICANCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX05FICAgICA6IE5vaXNlIEVycm9yIGludGVycnVwdA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfRkUgICAgIDogRnJhbWluZyBFcnJvciBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX1BFICAgICA6IFBhcml0eSBFcnJvciBpbnRlcnJ1cHQNCisgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIFVTQVJUX0lUIChTRVQgb3IgUkVTRVQpLg0KKyAgKi8NCitJVFN0YXR1cyBVU0FSVF9HZXRJVFN0YXR1cyhVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0lUKQ0KK3sNCisgIHVpbnQzMl90IGJpdHBvcyA9IDB4MDAsIGl0bWFzayA9IDB4MDAsIHVzYXJ0cmVnID0gMHgwMDsNCisgIElUU3RhdHVzIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19VU0FSVF9BTExfUEVSSVBIKFVTQVJUeCkpOw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0dFVF9JVChVU0FSVF9JVCkpOyANCisNCisgIC8qIFRoZSBDVFMgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUgZm9yIFVBUlQ0IGFuZCBVQVJUNSAqLyANCisgIGlmIChVU0FSVF9JVCA9PSBVU0FSVF9JVF9DVFMpDQorICB7DQorICAgIGFzc2VydF9wYXJhbShJU19VU0FSVF8xMjM2X1BFUklQSChVU0FSVHgpKTsNCisgIH0gDQorICAgIA0KKyAgLyogR2V0IHRoZSBVU0FSVCByZWdpc3RlciBpbmRleCAqLw0KKyAgdXNhcnRyZWcgPSAoKCh1aW50OF90KVVTQVJUX0lUKSA+PiAweDA1KTsNCisgIC8qIEdldCB0aGUgaW50ZXJydXB0IHBvc2l0aW9uICovDQorICBpdG1hc2sgPSBVU0FSVF9JVCAmIElUX01BU0s7DQorICBpdG1hc2sgPSAodWludDMyX3QpMHgwMSA8PCBpdG1hc2s7DQorICANCisgIGlmICh1c2FydHJlZyA9PSAweDAxKSAvKiBUaGUgSVQgIGlzIGluIENSMSByZWdpc3RlciAqLw0KKyAgew0KKyAgICBpdG1hc2sgJj0gVVNBUlR4LT5DUjE7DQorICB9DQorICBlbHNlIGlmICh1c2FydHJlZyA9PSAweDAyKSAvKiBUaGUgSVQgIGlzIGluIENSMiByZWdpc3RlciAqLw0KKyAgew0KKyAgICBpdG1hc2sgJj0gVVNBUlR4LT5DUjI7DQorICB9DQorICBlbHNlIC8qIFRoZSBJVCAgaXMgaW4gQ1IzIHJlZ2lzdGVyICovDQorICB7DQorICAgIGl0bWFzayAmPSBVU0FSVHgtPkNSMzsNCisgIH0NCisgIA0KKyAgYml0cG9zID0gVVNBUlRfSVQgPj4gMHgwODsNCisgIGJpdHBvcyA9ICh1aW50MzJfdCkweDAxIDw8IGJpdHBvczsNCisgIGJpdHBvcyAmPSBVU0FSVHgtPlNSOw0KKyAgaWYgKChpdG1hc2sgIT0gKHVpbnQxNl90KVJFU0VUKSYmKGJpdHBvcyAhPSAodWludDE2X3QpUkVTRVQpKQ0KKyAgew0KKyAgICBiaXRzdGF0dXMgPSBTRVQ7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KKyAgfQ0KKyAgDQorICByZXR1cm4gYml0c3RhdHVzOyAgDQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENsZWFycyB0aGUgVVNBUlR4J3MgaW50ZXJydXB0IHBlbmRpbmcgYml0cy4NCisgICogQHBhcmFtICBVU0FSVHg6IHdoZXJlIHggY2FuIGJlIDEsIDIsIDMsIDQsIDUgb3IgNiB0byBzZWxlY3QgdGhlIFVTQVJUIG9yIA0KKyAgKiAgICAgICAgIFVBUlQgcGVyaXBoZXJhbC4NCisgICogQHBhcmFtICBVU0FSVF9JVDogc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgcGVuZGluZyBiaXQgdG8gY2xlYXIuDQorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6DQorICAqICAgICAgICAgICAgQGFyZyBVU0FSVF9JVF9DVFM6ICBDVFMgY2hhbmdlIGludGVycnVwdCAobm90IGF2YWlsYWJsZSBmb3IgVUFSVDQgYW5kIFVBUlQ1KQ0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfTEJEOiAgTElOIEJyZWFrIGRldGVjdGlvbiBpbnRlcnJ1cHQNCisgICogICAgICAgICAgICBAYXJnIFVTQVJUX0lUX1RDOiAgIFRyYW5zbWlzc2lvbiBjb21wbGV0ZSBpbnRlcnJ1cHQuIA0KKyAgKiAgICAgICAgICAgIEBhcmcgVVNBUlRfSVRfUlhORTogUmVjZWl2ZSBEYXRhIHJlZ2lzdGVyIG5vdCBlbXB0eSBpbnRlcnJ1cHQuDQorICAqDQorICAqIEBub3RlICAgUEUgKFBhcml0eSBlcnJvciksIEZFIChGcmFtaW5nIGVycm9yKSwgTkUgKE5vaXNlIGVycm9yKSwgT1JFIChPdmVyUnVuIA0KKyAgKiAgICAgICAgICBlcnJvcikgYW5kIElETEUgKElkbGUgbGluZSBkZXRlY3RlZCkgcGVuZGluZyBiaXRzIGFyZSBjbGVhcmVkIGJ5IA0KKyAgKiAgICAgICAgICBzb2Z0d2FyZSBzZXF1ZW5jZTogYSByZWFkIG9wZXJhdGlvbiB0byBVU0FSVF9TUiByZWdpc3RlciANCisgICogICAgICAgICAgKFVTQVJUX0dldElUU3RhdHVzKCkpIGZvbGxvd2VkIGJ5IGEgcmVhZCBvcGVyYXRpb24gdG8gVVNBUlRfRFIgcmVnaXN0ZXIgDQorICAqICAgICAgICAgIChVU0FSVF9SZWNlaXZlRGF0YSgpKS4NCisgICogQG5vdGUgICBSWE5FIHBlbmRpbmcgYml0IGNhbiBiZSBhbHNvIGNsZWFyZWQgYnkgYSByZWFkIHRvIHRoZSBVU0FSVF9EUiByZWdpc3RlciANCisgICogICAgICAgICAgKFVTQVJUX1JlY2VpdmVEYXRhKCkpLg0KKyAgKiBAbm90ZSAgIFRDIHBlbmRpbmcgYml0IGNhbiBiZSBhbHNvIGNsZWFyZWQgYnkgc29mdHdhcmUgc2VxdWVuY2U6IGEgcmVhZCANCisgICogICAgICAgICAgb3BlcmF0aW9uIHRvIFVTQVJUX1NSIHJlZ2lzdGVyIChVU0FSVF9HZXRJVFN0YXR1cygpKSBmb2xsb3dlZCBieSBhIHdyaXRlIA0KKyAgKiAgICAgICAgICBvcGVyYXRpb24gdG8gVVNBUlRfRFIgcmVnaXN0ZXIgKFVTQVJUX1NlbmREYXRhKCkpLg0KKyAgKiBAbm90ZSAgIFRYRSBwZW5kaW5nIGJpdCBpcyBjbGVhcmVkIG9ubHkgYnkgYSB3cml0ZSB0byB0aGUgVVNBUlRfRFIgcmVnaXN0ZXIgDQorICAqICAgICAgICAgIChVU0FSVF9TZW5kRGF0YSgpKS4NCisgICogIA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBVU0FSVF9DbGVhcklUUGVuZGluZ0JpdChVU0FSVF9UeXBlRGVmKiBVU0FSVHgsIHVpbnQxNl90IFVTQVJUX0lUKQ0KK3sNCisgIHVpbnQxNl90IGJpdHBvcyA9IDB4MDAsIGl0bWFzayA9IDB4MDA7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1VTQVJUX0FMTF9QRVJJUEgoVVNBUlR4KSk7DQorICBhc3NlcnRfcGFyYW0oSVNfVVNBUlRfQ0xFQVJfSVQoVVNBUlRfSVQpKTsgDQorDQorICAvKiBUaGUgQ1RTIGludGVycnVwdCBpcyBub3QgYXZhaWxhYmxlIGZvciBVQVJUNCBhbmQgVUFSVDUgKi8NCisgIGlmIChVU0FSVF9JVCA9PSBVU0FSVF9JVF9DVFMpDQorICB7DQorICAgIGFzc2VydF9wYXJhbShJU19VU0FSVF8xMjM2X1BFUklQSChVU0FSVHgpKTsNCisgIH0gDQorICAgIA0KKyAgYml0cG9zID0gVVNBUlRfSVQgPj4gMHgwODsNCisgIGl0bWFzayA9ICgodWludDE2X3QpMHgwMSA8PCAodWludDE2X3QpYml0cG9zKTsNCisgIFVTQVJUeC0+U1IgPSAodWludDE2X3Qpfml0bWFzazsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF93d2RnLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9zcmMvc3RtMzJmMnh4X3d3ZGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODkzZmIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N0bTMyZjJ4eF93d2RnLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN0bTMyZjJ4eF93d2RnLmMNCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCisgICogQHZlcnNpb24gVjEuMS4yDQorICAqIEBkYXRlICAgIDA1LU1hcmNoLTIwMTIgDQorICAqIEBicmllZiAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcgDQorICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgV2luZG93IHdhdGNoZG9nIChXV0RHKSBwZXJpcGhlcmFsOiAgICAgICAgICAgDQorICAqICAgICAgICAgICAtIFByZXNjYWxlciwgUmVmcmVzaCB3aW5kb3cgYW5kIENvdW50ZXIgY29uZmlndXJhdGlvbg0KKyAgKiAgICAgICAgICAgLSBXV0RHIGFjdGl2YXRpb24NCisgICogICAgICAgICAgIC0gSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudA0KKyAgKiAgICAgICAgICAgICANCisgICogIEB2ZXJiYXRpbQ0KKyAgKiAgICANCisgICogICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXV0RHIGZlYXR1cmVzDQorICAqICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIE9uY2UgZW5hYmxlZCB0aGUgV1dERyBnZW5lcmF0ZXMgYSBzeXN0ZW0gcmVzZXQgb24gZXhwaXJ5IG9mIGEgcHJvZ3JhbW1lZA0KKyAgKiAgICAgICAgICB0aW1lIHBlcmlvZCwgdW5sZXNzIHRoZSBwcm9ncmFtIHJlZnJlc2hlcyB0aGUgY291bnRlciAoZG93bmNvdW50ZXIpIA0KKyAgKiAgICAgICAgICBiZWZvcmUgdG8gcmVhY2ggMHgzRiB2YWx1ZSAoaS5lLiBhIHJlc2V0IGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBjb3VudGVyDQorICAqICAgICAgICAgIHZhbHVlIHJvbGxzIG92ZXIgZnJvbSAweDQwIHRvIDB4M0YpLiANCisgICogICAgICAgICAgQW4gTUNVIHJlc2V0IGlzIGFsc28gZ2VuZXJhdGVkIGlmIHRoZSBjb3VudGVyIHZhbHVlIGlzIHJlZnJlc2hlZA0KKyAgKiAgICAgICAgICBiZWZvcmUgdGhlIGNvdW50ZXIgaGFzIHJlYWNoZWQgdGhlIHJlZnJlc2ggd2luZG93IHZhbHVlLiBUaGlzIA0KKyAgKiAgICAgICAgICBpbXBsaWVzIHRoYXQgdGhlIGNvdW50ZXIgbXVzdCBiZSByZWZyZXNoZWQgaW4gYSBsaW1pdGVkIHdpbmRvdy4NCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgT25jZSBlbmFibGVkIHRoZSBXV0RHIGNhbm5vdCBiZSBkaXNhYmxlZCBleGNlcHQgYnkgYSBzeXN0ZW0gcmVzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgDQorICAqICAgICAgICAgIFdXREdSU1QgZmxhZyBpbiBSQ0NfQ1NSIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIHRvIGluZm9ybSB3aGVuIGEgV1dERw0KKyAgKiAgICAgICAgICByZXNldCBvY2N1cnMuDQorICAqICAgICAgICAgICAgDQorICAqICAgICAgICAgIFRoZSBXV0RHIGNvdW50ZXIgaW5wdXQgY2xvY2sgaXMgZGVyaXZlZCBmcm9tIHRoZSBBUEIgY2xvY2sgZGl2aWRlZCANCisgICogICAgICAgICAgYnkgYSBwcm9ncmFtbWFibGUgcHJlc2NhbGVyLg0KKyAgKiAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIFdXREcgY291bnRlciBjbG9jayA9IFBDTEsxIC8gUHJlc2NhbGVyDQorICAqICAgICAgICAgIFdXREcgdGltZW91dCA9IChXV0RHIGNvdW50ZXIgY2xvY2spICogKGNvdW50ZXIgdmFsdWUpDQorICAqICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICBNaW4tbWF4IHRpbWVvdXQgdmFsdWUgQDMwIE1IeihQQ0xLMSk6IH4xMzYuNSB1cyAvIH42OS45IG1zDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIHVzZSB0aGlzIGRyaXZlcg0KKyAgKiAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IA0KKyAgKiAgICAgICAgICAxLiBFbmFibGUgV1dERyBjbG9jayB1c2luZyBSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKFJDQ19BUEIxUGVyaXBoX1dXREcsIEVOQUJMRSkgZnVuY3Rpb24NCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgMi4gQ29uZmlndXJlIHRoZSBXV0RHIHByZXNjYWxlciB1c2luZyBXV0RHX1NldFByZXNjYWxlcigpIGZ1bmN0aW9uDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDMuIENvbmZpZ3VyZSB0aGUgV1dERyByZWZyZXNoIHdpbmRvdyB1c2luZyBXV0RHX1NldFdpbmRvd1ZhbHVlKCkgZnVuY3Rpb24NCisgICogICAgICAgICAgICANCisgICogICAgICAgICAgNC4gU2V0IHRoZSBXV0RHIGNvdW50ZXIgdmFsdWUgYW5kIHN0YXJ0IGl0IHVzaW5nIFdXREdfRW5hYmxlKCkgZnVuY3Rpb24uDQorICAqICAgICAgICAgICAgIFdoZW4gdGhlIFdXREcgaXMgZW5hYmxlZCB0aGUgY291bnRlciB2YWx1ZSBzaG91bGQgYmUgY29uZmlndXJlZCB0byANCisgICogICAgICAgICAgICAgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMHg0MCB0byBwcmV2ZW50IGdlbmVyYXRpbmcgYW4gaW1tZWRpYXRlIHJlc2V0LiAgICAgDQorICAqICAgICAgICAgICAgDQorICAqICAgICAgICAgIDUuIE9wdGlvbmFsbHkgeW91IGNhbiBlbmFibGUgdGhlIEVhcmx5IHdha2V1cCBpbnRlcnJ1cHQgd2hpY2ggaXMgDQorICAqICAgICAgICAgICAgIGdlbmVyYXRlZCB3aGVuIHRoZSBjb3VudGVyIHJlYWNoIDB4NDAuDQorICAqICAgICAgICAgICAgIE9uY2UgZW5hYmxlZCB0aGlzIGludGVycnVwdCBjYW5ub3QgYmUgZGlzYWJsZWQgZXhjZXB0IGJ5IGEgc3lzdGVtIHJlc2V0Lg0KKyAgKiAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgIDYuIFRoZW4gdGhlIGFwcGxpY2F0aW9uIHByb2dyYW0gbXVzdCByZWZyZXNoIHRoZSBXV0RHIGNvdW50ZXIgYXQgcmVndWxhcg0KKyAgKiAgICAgICAgICAgICBpbnRlcnZhbHMgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBNQ1UgcmVzZXQsIHVzaW5nDQorICAqICAgICAgICAgICAgIFdXREdfU2V0Q291bnRlcigpIGZ1bmN0aW9uLiBUaGlzIG9wZXJhdGlvbiBtdXN0IG9jY3VyIG9ubHkgd2hlbg0KKyAgKiAgICAgICAgICAgICB0aGUgY291bnRlciB2YWx1ZSBpcyBsb3dlciB0aGFuIHRoZSByZWZyZXNoIHdpbmRvdyB2YWx1ZSwgDQorICAqICAgICAgICAgICAgIHByb2dyYW1tZWQgdXNpbmcgV1dER19TZXRXaW5kb3dWYWx1ZSgpLiAgICAgICAgIA0KKyAgKg0KKyAgKiAgQGVuZHZlcmJhdGltICANCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBhdHRlbnRpb24NCisgICoNCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEyIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQorICAqDQorICAqIExpY2Vuc2VkIHVuZGVyIE1DRC1TVCBMaWJlcnR5IFNXIExpY2Vuc2UgQWdyZWVtZW50IFYyLCAodGhlICJMaWNlbnNlIik7DQorICAqIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Og0KKyAgKg0KKyAgKiAgICAgICAgaHR0cDovL3d3dy5zdC5jb20vc29mdHdhcmVfbGljZW5zZV9hZ3JlZW1lbnRfbGliZXJ0eV92Mg0KKyAgKg0KKyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIA0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCANCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqDQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgICovDQorDQorLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisjaW5jbHVkZSAic3RtMzJmMnh4X3d3ZGcuaCINCisjaW5jbHVkZSAic3RtMzJmMnh4X3JjYy5oIg0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlcg0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFdXREcgDQorICAqIEBicmllZiBXV0RHIGRyaXZlciBtb2R1bGVzDQorICAqIEB7DQorICAqLw0KKw0KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiAtLS0tLS0tLS0tLSBXV0RHIHJlZ2lzdGVycyBiaXQgYWRkcmVzcyBpbiB0aGUgYWxpYXMgcmVnaW9uIC0tLS0tLS0tLS0tICovDQorI2RlZmluZSBXV0RHX09GRlNFVCAgICAgICAoV1dER19CQVNFIC0gUEVSSVBIX0JBU0UpDQorLyogQWxpYXMgd29yZCBhZGRyZXNzIG9mIEVXSSBiaXQgKi8NCisjZGVmaW5lIENGUl9PRkZTRVQgICAgICAgIChXV0RHX09GRlNFVCArIDB4MDQpDQorI2RlZmluZSBFV0lfQml0TnVtYmVyICAgICAweDA5DQorI2RlZmluZSBDRlJfRVdJX0JCICAgICAgICAoUEVSSVBIX0JCX0JBU0UgKyAoQ0ZSX09GRlNFVCAqIDMyKSArIChFV0lfQml0TnVtYmVyICogNCkpDQorDQorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdXREcgcmVnaXN0ZXJzIGJpdCBtYXNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KKy8qIENGUiByZWdpc3RlciBiaXQgbWFzayAqLw0KKyNkZWZpbmUgQ0ZSX1dER1RCX01BU0sgICAgKCh1aW50MzJfdCkweEZGRkZGRTdGKQ0KKyNkZWZpbmUgQ0ZSX1dfTUFTSyAgICAgICAgKCh1aW50MzJfdCkweEZGRkZGRjgwKQ0KKyNkZWZpbmUgQklUX01BU0sgICAgICAgICAgKCh1aW50OF90KTB4N0YpDQorDQorLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisvKiogQGRlZmdyb3VwIFdXREdfUHJpdmF0ZV9GdW5jdGlvbnMNCisgICogQHsNCisgICovDQorDQorLyoqIEBkZWZncm91cCBXV0RHX0dyb3VwMSBQcmVzY2FsZXIsIFJlZnJlc2ggd2luZG93IGFuZCBDb3VudGVyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorICogIEBicmllZiAgIFByZXNjYWxlciwgUmVmcmVzaCB3aW5kb3cgYW5kIENvdW50ZXIgY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICBQcmVzY2FsZXIsIFJlZnJlc2ggd2luZG93IGFuZCBDb3VudGVyIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zDQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIA0KKw0KK0BlbmR2ZXJiYXRpbQ0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQGJyaWVmICBEZWluaXRpYWxpemVzIHRoZSBXV0RHIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgV1dER19EZUluaXQodm9pZCkNCit7DQorICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1dXREcsIEVOQUJMRSk7DQorICBSQ0NfQVBCMVBlcmlwaFJlc2V0Q21kKFJDQ19BUEIxUGVyaXBoX1dXREcsIERJU0FCTEUpOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXRzIHRoZSBXV0RHIFByZXNjYWxlci4NCisgICogQHBhcmFtICBXV0RHX1ByZXNjYWxlcjogc3BlY2lmaWVzIHRoZSBXV0RHIFByZXNjYWxlci4NCisgICogICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOg0KKyAgKiAgICAgQGFyZyBXV0RHX1ByZXNjYWxlcl8xOiBXV0RHIGNvdW50ZXIgY2xvY2sgPSAoUENMSzEvNDA5NikvMQ0KKyAgKiAgICAgQGFyZyBXV0RHX1ByZXNjYWxlcl8yOiBXV0RHIGNvdW50ZXIgY2xvY2sgPSAoUENMSzEvNDA5NikvMg0KKyAgKiAgICAgQGFyZyBXV0RHX1ByZXNjYWxlcl80OiBXV0RHIGNvdW50ZXIgY2xvY2sgPSAoUENMSzEvNDA5NikvNA0KKyAgKiAgICAgQGFyZyBXV0RHX1ByZXNjYWxlcl84OiBXV0RHIGNvdW50ZXIgY2xvY2sgPSAoUENMSzEvNDA5NikvOA0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBXV0RHX1NldFByZXNjYWxlcih1aW50MzJfdCBXV0RHX1ByZXNjYWxlcikNCit7DQorICB1aW50MzJfdCB0bXByZWcgPSAwOw0KKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCisgIGFzc2VydF9wYXJhbShJU19XV0RHX1BSRVNDQUxFUihXV0RHX1ByZXNjYWxlcikpOw0KKyAgLyogQ2xlYXIgV0RHVEJbMTowXSBiaXRzICovDQorICB0bXByZWcgPSBXV0RHLT5DRlIgJiBDRlJfV0RHVEJfTUFTSzsNCisgIC8qIFNldCBXREdUQlsxOjBdIGJpdHMgYWNjb3JkaW5nIHRvIFdXREdfUHJlc2NhbGVyIHZhbHVlICovDQorICB0bXByZWcgfD0gV1dER19QcmVzY2FsZXI7DQorICAvKiBTdG9yZSB0aGUgbmV3IHZhbHVlICovDQorICBXV0RHLT5DRlIgPSB0bXByZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHMgdGhlIFdXREcgd2luZG93IHZhbHVlLg0KKyAgKiBAcGFyYW0gIFdpbmRvd1ZhbHVlOiBzcGVjaWZpZXMgdGhlIHdpbmRvdyB2YWx1ZSB0byBiZSBjb21wYXJlZCB0byB0aGUgZG93bmNvdW50ZXIuDQorICAqICAgVGhpcyBwYXJhbWV0ZXIgdmFsdWUgbXVzdCBiZSBsb3dlciB0aGFuIDB4ODAuDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFdXREdfU2V0V2luZG93VmFsdWUodWludDhfdCBXaW5kb3dWYWx1ZSkNCit7DQorICBfX0lPIHVpbnQzMl90IHRtcHJlZyA9IDA7DQorDQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1dXREdfV0lORE9XX1ZBTFVFKFdpbmRvd1ZhbHVlKSk7DQorICAvKiBDbGVhciBXWzY6MF0gYml0cyAqLw0KKw0KKyAgdG1wcmVnID0gV1dERy0+Q0ZSICYgQ0ZSX1dfTUFTSzsNCisNCisgIC8qIFNldCBXWzY6MF0gYml0cyBhY2NvcmRpbmcgdG8gV2luZG93VmFsdWUgdmFsdWUgKi8NCisgIHRtcHJlZyB8PSBXaW5kb3dWYWx1ZSAmICh1aW50MzJfdCkgQklUX01BU0s7DQorDQorICAvKiBTdG9yZSB0aGUgbmV3IHZhbHVlICovDQorICBXV0RHLT5DRlIgPSB0bXByZWc7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgdGhlIFdXREcgRWFybHkgV2FrZXVwIGludGVycnVwdChFV0kpLg0KKyAgKiBAbm90ZSAgIE9uY2UgZW5hYmxlZCB0aGlzIGludGVycnVwdCBjYW5ub3QgYmUgZGlzYWJsZWQgZXhjZXB0IGJ5IGEgc3lzdGVtIHJlc2V0Lg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgV1dER19FbmFibGVJVCh2b2lkKQ0KK3sNCisgICooX19JTyB1aW50MzJfdCAqKSBDRlJfRVdJX0JCID0gKHVpbnQzMl90KUVOQUJMRTsNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgU2V0cyB0aGUgV1dERyBjb3VudGVyIHZhbHVlLg0KKyAgKiBAcGFyYW0gIENvdW50ZXI6IHNwZWNpZmllcyB0aGUgd2F0Y2hkb2cgY291bnRlciB2YWx1ZS4NCisgICogICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMHg0MCBhbmQgMHg3RiAodG8gcHJldmVudCBnZW5lcmF0aW5nDQorICAqICAgYW4gaW1tZWRpYXRlIHJlc2V0KSANCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgV1dER19TZXRDb3VudGVyKHVpbnQ4X3QgQ291bnRlcikNCit7DQorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KKyAgYXNzZXJ0X3BhcmFtKElTX1dXREdfQ09VTlRFUihDb3VudGVyKSk7DQorICAvKiBXcml0ZSB0byBUWzY6MF0gYml0cyB0byBjb25maWd1cmUgdGhlIGNvdW50ZXIgdmFsdWUsIG5vIG5lZWQgdG8gZG8NCisgICAgIGEgcmVhZC1tb2RpZnktd3JpdGU7IHdyaXRpbmcgYSAwIHRvIFdER0EgYml0IGRvZXMgbm90aGluZyAqLw0KKyAgV1dERy0+Q1IgPSBDb3VudGVyICYgQklUX01BU0s7DQorfQ0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKiogQGRlZmdyb3VwIFdXREdfR3JvdXAyIFdXREcgYWN0aXZhdGlvbiBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgV1dERyBhY3RpdmF0aW9uIGZ1bmN0aW9ucyANCisgKg0KK0B2ZXJiYXRpbSAgIA0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAgICAgICAgICAgICAgICAgICAgICBXV0RHIGFjdGl2YXRpb24gZnVuY3Rpb24NCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIEVuYWJsZXMgV1dERyBhbmQgbG9hZCB0aGUgY291bnRlciB2YWx1ZS4gICAgICAgICAgICAgICAgICANCisgICogQHBhcmFtICBDb3VudGVyOiBzcGVjaWZpZXMgdGhlIHdhdGNoZG9nIGNvdW50ZXIgdmFsdWUuDQorICAqICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDB4NDAgYW5kIDB4N0YgKHRvIHByZXZlbnQgZ2VuZXJhdGluZw0KKyAgKiAgIGFuIGltbWVkaWF0ZSByZXNldCkNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgV1dER19FbmFibGUodWludDhfdCBDb3VudGVyKQ0KK3sNCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQorICBhc3NlcnRfcGFyYW0oSVNfV1dER19DT1VOVEVSKENvdW50ZXIpKTsNCisgIFdXREctPkNSID0gV1dER19DUl9XREdBIHwgQ291bnRlcjsNCit9DQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAZGVmZ3JvdXAgV1dER19Hcm91cDMgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgKiAgQGJyaWVmICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMgDQorICoNCitAdmVyYmF0aW0gICANCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhbmQgZmxhZ3MgbWFuYWdlbWVudCBmdW5jdGlvbnMNCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgDQorDQorQGVuZHZlcmJhdGltDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBFYXJseSBXYWtldXAgaW50ZXJydXB0IGZsYWcgaXMgc2V0IG9yIG5vdC4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiB0aGUgRWFybHkgV2FrZXVwIGludGVycnVwdCBmbGFnIChTRVQgb3IgUkVTRVQpDQorICAqLw0KK0ZsYWdTdGF0dXMgV1dER19HZXRGbGFnU3RhdHVzKHZvaWQpDQorew0KKyAgRmxhZ1N0YXR1cyBiaXRzdGF0dXMgPSBSRVNFVDsNCisgICAgDQorICBpZiAoKFdXREctPlNSKSAhPSAodWludDMyX3QpUkVTRVQpDQorICB7DQorICAgIGJpdHN0YXR1cyA9IFNFVDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgYml0c3RhdHVzID0gUkVTRVQ7DQorICB9DQorICByZXR1cm4gYml0c3RhdHVzOw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBDbGVhcnMgRWFybHkgV2FrZXVwIGludGVycnVwdCBmbGFnLg0KKyAgKiBAcGFyYW0gIE5vbmUNCisgICogQHJldHZhbCBOb25lDQorICAqLw0KK3ZvaWQgV1dER19DbGVhckZsYWcodm9pZCkNCit7DQorICBXV0RHLT5TUiA9ICh1aW50MzJfdClSRVNFVDsNCit9DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvU1RNMzJGMnh4X1N0ZFBlcmlwaF9Ecml2ZXIvc3JjL3N5c3RlbV9zdG0zMmYyeHguYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zeXN0ZW1fc3RtMzJmMnh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjNTdmYgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L1NUTTMyRjJ4eF9TdGRQZXJpcGhfRHJpdmVyL3NyYy9zeXN0ZW1fc3RtMzJmMnh4LmMKQEAgLTAsMCArMSw1NDIgQEAKKy8qKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqIEBmaWxlICAgIHN5c3RlbV9zdG0zMmYyeHguYw0KKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKyAgKiBAdmVyc2lvbiBWMS4xLjMNCisgICogQGRhdGUgICAgMDUtTWFyY2gtMjAxMg0KKyAgKiBAYnJpZWYgICBDTVNJUyBDb3J0ZXgtTTMgRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIFN5c3RlbSBTb3VyY2UgRmlsZS4NCisgICogICAgICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY2xvY2sgY29uZmlndXJhdGlvbiBmb3IgU1RNMzJGMnh4IGRldmljZXMsDQorICAqICAgICAgICAgIGFuZCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb24gdG9vbA0KKyAgKiAgICAgICAgICAiU1RNMzJmMnh4X0Nsb2NrX0NvbmZpZ3VyYXRpb25fVjEuMC4wLnhscyINCisgICogICAgICAgICAgICAgDQorICAqIDEuICBUaGlzIGZpbGUgcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBhbmQgb25lIGdsb2JhbCB2YXJpYWJsZSB0byBiZSBjYWxsZWQgZnJvbSANCisgICogICAgIHVzZXIgYXBwbGljYXRpb246DQorICAqICAgICAgLSBTeXN0ZW1Jbml0KCk6IFNldHVwcyB0aGUgc3lzdGVtIGNsb2NrIChTeXN0ZW0gY2xvY2sgc291cmNlLCBQTEwgTXVsdGlwbGllcg0KKyAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgRGl2aWRlciBmYWN0b3JzLCBBSEIvQVBCeCBwcmVzY2FsZXJzIGFuZCBGbGFzaCBzZXR0aW5ncyksDQorICAqICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbiBtYWRlIGluIHRoZSBjbG9jayB4bHMgdG9vbC4gDQorICAqICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAganVzdCBhZnRlciByZXNldCBhbmQgDQorICAqICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBicmFuY2ggdG8gbWFpbiBwcm9ncmFtLiBUaGlzIGNhbGwgaXMgbWFkZSBpbnNpZGUNCisgICogICAgICAgICAgICAgICAgICAgICAgdGhlICJzdGFydHVwX3N0bTMyZjJ4eC5zIiBmaWxlLg0KKyAgKg0KKyAgKiAgICAgIC0gU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlOiBDb250YWlucyB0aGUgY29yZSBjbG9jayAoSENMSyksIGl0IGNhbiBiZSB1c2VkDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIHNldHVwIHRoZSBTeXNUaWNrIA0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lciBvciBjb25maWd1cmUgb3RoZXIgcGFyYW1ldGVycy4NCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgLSBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUoKTogVXBkYXRlcyB0aGUgdmFyaWFibGUgU3lzdGVtQ29yZUNsb2NrIGFuZCBtdXN0DQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBjb3JlIGNsb2NrIGlzIGNoYW5nZWQNCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24uDQorICAqDQorICAqIDIuIEFmdGVyIGVhY2ggZGV2aWNlIHJlc2V0IHRoZSBIU0kgKDE2IE1IeikgaXMgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgc291cmNlLg0KKyAgKiAgICBUaGVuIFN5c3RlbUluaXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQsIGluICJzdGFydHVwX3N0bTMyZjJ4eC5zIiBmaWxlLCB0bw0KKyAgKiAgICBjb25maWd1cmUgdGhlIHN5c3RlbSBjbG9jayBiZWZvcmUgdG8gYnJhbmNoIHRvIG1haW4gcHJvZ3JhbS4NCisgICoNCisgICogMy4gSWYgdGhlIHN5c3RlbSBjbG9jayBzb3VyY2Ugc2VsZWN0ZWQgYnkgdXNlciBmYWlscyB0byBzdGFydHVwLCB0aGUgU3lzdGVtSW5pdCgpDQorICAqICAgIGZ1bmN0aW9uIHdpbGwgZG8gbm90aGluZyBhbmQgSFNJIHN0aWxsIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZS4gVXNlciBjYW4gDQorICAqICAgIGFkZCBzb21lIGNvZGUgdG8gZGVhbCB3aXRoIHRoaXMgaXNzdWUgaW5zaWRlIHRoZSBTZXRTeXNDbG9jaygpIGZ1bmN0aW9uLg0KKyAgKg0KKyAgKiA0LiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBIU0UgY3J5c3RhbCBpcyBzZXQgdG8gMjVNSHosIHJlZmVyIHRvICJIU0VfVkFMVUUiIGRlZmluZQ0KKyAgKiAgICBpbiAic3RtMzJmMnh4LmgiIGZpbGUuIFdoZW4gSFNFIGlzIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSwgZGlyZWN0bHkgb3INCisgICogICAgdGhyb3VnaCBQTEwsIGFuZCB5b3UgYXJlIHVzaW5nIGRpZmZlcmVudCBjcnlzdGFsIHlvdSBoYXZlIHRvIGFkYXB0IHRoZSBIU0UNCisgICogICAgdmFsdWUgdG8geW91ciBvd24gY29uZmlndXJhdGlvbi4NCisgICoNCisgICogNS4gVGhpcyBmaWxlIGNvbmZpZ3VyZXMgdGhlIHN5c3RlbSBjbG9jayBhcyBmb2xsb3dzOg0KKyAgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogICAgICAgIFN1cHBvcnRlZCBTVE0zMkYyeHggZGV2aWNlIHJldmlzaW9uICAgIHwgUmV2IEIgYW5kIFkNCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgU3lzdGVtIENsb2NrIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgfCBQTEwgKEhTRSkNCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgU1lTQ0xLKEh6KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjAwMDAwMDANCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgSENMSyhIeikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjAwMDAwMDANCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgQUhCIFByZXNjYWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxDQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgIEFQQjEgUHJlc2NhbGVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgNA0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAqICAgICAgICBBUEIyIFByZXNjYWxlciAgICAgICAgICAgICAgICAgICAgICAgICB8IDINCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgSFNFIEZyZXF1ZW5jeShIeikgICAgICAgICAgICAgICAgICAgICAgfCAyNTAwMDAwMA0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAqICAgICAgICBQTExfTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI1DQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgIFBMTF9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjQwDQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgIFBMTF9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMg0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAqICAgICAgICBQTExfUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDUNCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgUExMSTJTX04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOQQ0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAqICAgICAgICBQTExJMlNfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5BDQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgIEkyUyBpbnB1dCBjbG9jayAgICAgICAgICAgICAgICAgICAgICAgIHwgTkENCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgVkREKFYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLjMNCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgRmxhc2ggTGF0ZW5jeShXUykgICAgICAgICAgICAgICAgICAgICAgfCAzDQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgIFByZWZldGNoIEJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgIHwgT04NCisgICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgKiAgICAgICAgSW5zdHJ1Y3Rpb24gY2FjaGUgICAgICAgICAgICAgICAgICAgICAgfCBPTg0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAqICAgICAgICBEYXRhIGNhY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9ODQorICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICogICAgICAgIFJlcXVpcmUgNDhNSHogZm9yIFVTQiBPVEcgRlMsICAgICAgICAgIHwgRW5hYmxlZA0KKyAgKiAgICAgICAgU0RJTyBhbmQgUk5HIGNsb2NrICAgICAgICAgICAgICAgICAgICAgfA0KKyAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAgKiBAYXR0ZW50aW9uDQorICAqDQorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDT1BZUklHSFQgMjAxMiBTVE1pY3JvZWxlY3Ryb25pY3M8L2NlbnRlcj48L2gyPg0KKyAgKg0KKyAgKiBMaWNlbnNlZCB1bmRlciBNQ0QtU1QgTGliZXJ0eSBTVyBMaWNlbnNlIEFncmVlbWVudCBWMiwgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoNCisgICoNCisgICogICAgICAgIGh0dHA6Ly93d3cuc3QuY29tL3NvZnR3YXJlX2xpY2Vuc2VfYWdyZWVtZW50X2xpYmVydHlfdjINCisgICoNCisgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSANCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgDQorICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAgKg0KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBDTVNJUw0KKyAgKiBAew0KKyAgKi8NCisNCisvKiogQGFkZHRvZ3JvdXAgc3RtMzJmMnh4X3N5c3RlbQ0KKyAgKiBAew0KKyAgKi8gIA0KKyAgDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TeXN0ZW1fUHJpdmF0ZV9JbmNsdWRlcw0KKyAgKiBAew0KKyAgKi8NCisNCisjaW5jbHVkZSAic3RtMzJmMnh4LmgiDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3lzdGVtX1ByaXZhdGVfVHlwZXNEZWZpbml0aW9ucw0KKyAgKiBAew0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TeXN0ZW1fUHJpdmF0ZV9EZWZpbmVzDQorICAqIEB7DQorICAqLw0KKw0KKy8qITwgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3UgbmVlZCB0byB1c2UgZXh0ZXJuYWwgU1JBTSBtb3VudGVkDQorICAgICBvbiBTVE0zMjJ4R19FVkFMIGJvYXJkIGFzIGRhdGEgbWVtb3J5ICAqLw0KKy8qICNkZWZpbmUgREFUQV9JTl9FeHRTUkFNICovDQorDQorLyohPCBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSBuZWVkIHRvIHJlbG9jYXRlIHlvdXIgdmVjdG9yIFRhYmxlIGluDQorICAgICBJbnRlcm5hbCBTUkFNLiAqLw0KKy8qICNkZWZpbmUgVkVDVF9UQUJfU1JBTSAqLw0KKyNkZWZpbmUgVkVDVF9UQUJfT0ZGU0VUICAweDAwIC8qITwgVmVjdG9yIFRhYmxlIGJhc2Ugb2Zmc2V0IGZpZWxkLiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDB4MjAwLiAqLw0KKw0KKw0KKy8qIFBMTF9WQ08gPSAoSFNFX1ZBTFVFIG9yIEhTSV9WQUxVRSAvIFBMTF9NKSAqIFBMTF9OICovDQorI2RlZmluZSBQTExfTSAgICAgIDI1DQorI2RlZmluZSBQTExfTiAgICAgIDI0MA0KKw0KKy8qIFNZU0NMSyA9IFBMTF9WQ08gLyBQTExfUCAqLw0KKyNkZWZpbmUgUExMX1AgICAgICAyDQorDQorLyogVVNCIE9URyBGUywgU0RJTyBhbmQgUk5HIENsb2NrID0gIFBMTF9WQ08gLyBQTExRICovDQorI2RlZmluZSBQTExfUSAgICAgIDUNCisNCisvKioNCisgICogQH0NCisgICovDQorDQorLyoqIEBhZGR0b2dyb3VwIFNUTTMyRjJ4eF9TeXN0ZW1fUHJpdmF0ZV9NYWNyb3MNCisgICogQHsNCisgICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3lzdGVtX1ByaXZhdGVfVmFyaWFibGVzDQorICAqIEB7DQorICAqLw0KKw0KKyAgdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrID0gMTIwMDAwMDAwOw0KKw0KKyAgX19JIHVpbnQ4X3QgQUhCUHJlc2NUYWJsZVsxNl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMiwgMywgNCwgNiwgNywgOCwgOX07DQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3lzdGVtX1ByaXZhdGVfRnVuY3Rpb25Qcm90b3R5cGVzDQorICAqIEB7DQorICAqLw0KKw0KK3N0YXRpYyB2b2lkIFNldFN5c0Nsb2NrKHZvaWQpOw0KKyNpZmRlZiBEQVRBX0lOX0V4dFNSQU0NCisgIHN0YXRpYyB2b2lkIFN5c3RlbUluaXRfRXh0TWVtQ3RsKHZvaWQpOyANCisjZW5kaWYgLyogREFUQV9JTl9FeHRTUkFNICovDQorDQorLyoqDQorICAqIEB9DQorICAqLw0KKw0KKy8qKiBAYWRkdG9ncm91cCBTVE0zMkYyeHhfU3lzdGVtX1ByaXZhdGVfRnVuY3Rpb25zDQorICAqIEB7DQorICAqLw0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHVwIHRoZSBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtDQorICAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgRW1iZWRkZWQgRmxhc2ggSW50ZXJmYWNlLCB0aGUgUExMIGFuZCB1cGRhdGUgdGhlIA0KKyAgKiAgICAgICAgIFN5c3RlbUZyZXF1ZW5jeSB2YXJpYWJsZS4NCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFN5c3RlbUluaXQodm9pZCkNCit7DQorICAvKiBSZXNldCB0aGUgUkNDIGNsb2NrIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRlZmF1bHQgcmVzZXQgc3RhdGUgLS0tLS0tLS0tLS0tKi8NCisgIC8qIFNldCBIU0lPTiBiaXQgKi8NCisgIFJDQy0+Q1IgfD0gKHVpbnQzMl90KTB4MDAwMDAwMDE7DQorDQorICAvKiBSZXNldCBDRkdSIHJlZ2lzdGVyICovDQorICBSQ0MtPkNGR1IgPSAweDAwMDAwMDAwOw0KKw0KKyAgLyogUmVzZXQgSFNFT04sIENTU09OIGFuZCBQTExPTiBiaXRzICovDQorICBSQ0MtPkNSICY9ICh1aW50MzJfdCkweEZFRjZGRkZGOw0KKw0KKyAgLyogUmVzZXQgUExMQ0ZHUiByZWdpc3RlciAqLw0KKyAgUkNDLT5QTExDRkdSID0gMHgyNDAwMzAxMDsNCisNCisgIC8qIFJlc2V0IEhTRUJZUCBiaXQgKi8NCisgIFJDQy0+Q1IgJj0gKHVpbnQzMl90KTB4RkZGQkZGRkY7DQorDQorICAvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovDQorICBSQ0MtPkNJUiA9IDB4MDAwMDAwMDA7DQorDQorI2lmZGVmIERBVEFfSU5fRXh0U1JBTQ0KKyAgU3lzdGVtSW5pdF9FeHRNZW1DdGwoKTsgDQorI2VuZGlmIC8qIERBVEFfSU5fRXh0U1JBTSAqLw0KKyAgICAgICAgIA0KKyAgLyogQ29uZmlndXJlIHRoZSBTeXN0ZW0gY2xvY2sgc291cmNlLCBQTEwgTXVsdGlwbGllciBhbmQgRGl2aWRlciBmYWN0b3JzLCANCisgICAgIEFIQi9BUEJ4IHByZXNjYWxlcnMgYW5kIEZsYXNoIHNldHRpbmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyAgU2V0U3lzQ2xvY2soKTsNCisNCisgIC8qIENvbmZpZ3VyZSB0aGUgVmVjdG9yIFRhYmxlIGxvY2F0aW9uIGFkZCBvZmZzZXQgYWRkcmVzcyAtLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZmRlZiBWRUNUX1RBQl9TUkFNDQorICBTQ0ItPlZUT1IgPSBTUkFNX0JBU0UgfCBWRUNUX1RBQl9PRkZTRVQ7IC8qIFZlY3RvciBUYWJsZSBSZWxvY2F0aW9uIGluIEludGVybmFsIFNSQU0gKi8NCisjZWxzZQ0KKyAgU0NCLT5WVE9SID0gRkxBU0hfQkFTRSB8IFZFQ1RfVEFCX09GRlNFVDsgLyogVmVjdG9yIFRhYmxlIFJlbG9jYXRpb24gaW4gSW50ZXJuYWwgRkxBU0ggKi8NCisjZW5kaWYNCit9DQorDQorLyoqDQorICAqIEBicmllZiAgVXBkYXRlIFN5c3RlbUNvcmVDbG9jayB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gQ2xvY2sgUmVnaXN0ZXIgVmFsdWVzLg0KKyAgKiAgICAgICAgIFRoZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUgY29udGFpbnMgdGhlIGNvcmUgY2xvY2sgKEhDTEspLCBpdCBjYW4NCisgICogICAgICAgICBiZSB1c2VkIGJ5IHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIHNldHVwIHRoZSBTeXNUaWNrIHRpbWVyIG9yIGNvbmZpZ3VyZQ0KKyAgKiAgICAgICAgIG90aGVyIHBhcmFtZXRlcnMuDQorICAqICAgICAgICAgICANCisgICogQG5vdGUgICBFYWNoIHRpbWUgdGhlIGNvcmUgY2xvY2sgKEhDTEspIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQNCisgICogICAgICAgICB0byB1cGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlIHZhbHVlLiBPdGhlcndpc2UsIGFueSBjb25maWd1cmF0aW9uDQorICAqICAgICAgICAgYmFzZWQgb24gdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGluY29ycmVjdC4gICAgICAgICANCisgICogICAgIA0KKyAgKiBAbm90ZSAgIC0gVGhlIHN5c3RlbSBmcmVxdWVuY3kgY29tcHV0ZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBub3QgdGhlIHJlYWwgDQorICAqICAgICAgICAgICBmcmVxdWVuY3kgaW4gdGhlIGNoaXAuIEl0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHByZWRlZmluZWQgDQorICAqICAgICAgICAgICBjb25zdGFudCBhbmQgdGhlIHNlbGVjdGVkIGNsb2NrIHNvdXJjZToNCisgICogICAgICAgICAgICAgDQorICAqICAgICAgICAgICAtIElmIFNZU0NMSyBzb3VyY2UgaXMgSFNJLCBTeXN0ZW1Db3JlQ2xvY2sgd2lsbCBjb250YWluIHRoZSBIU0lfVkFMVUUoKikNCisgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgICAtIElmIFNZU0NMSyBzb3VyY2UgaXMgSFNFLCBTeXN0ZW1Db3JlQ2xvY2sgd2lsbCBjb250YWluIHRoZSBIU0VfVkFMVUUoKiopDQorICAqICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICogICAgICAgICAgIC0gSWYgU1lTQ0xLIHNvdXJjZSBpcyBQTEwsIFN5c3RlbUNvcmVDbG9jayB3aWxsIGNvbnRhaW4gdGhlIEhTRV9WQUxVRSgqKikgDQorICAqICAgICAgICAgICAgIG9yIEhTSV9WQUxVRSgqKSBtdWx0aXBsaWVkL2RpdmlkZWQgYnkgdGhlIFBMTCBmYWN0b3JzLg0KKyAgKiAgICAgICAgIA0KKyAgKiAgICAgICAgICgqKSBIU0lfVkFMVUUgaXMgYSBjb25zdGFudCBkZWZpbmVkIGluIHN0bTMyZjJ4eC5oIGZpbGUgKGRlZmF1bHQgdmFsdWUNCisgICogICAgICAgICAgICAgMTYgTUh6KSBidXQgdGhlIHJlYWwgdmFsdWUgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB2YXJpYXRpb25zDQorICAqICAgICAgICAgICAgIGluIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlLiAgIA0KKyAgKiAgICANCisgICogICAgICAgICAoKiopIEhTRV9WQUxVRSBpcyBhIGNvbnN0YW50IGRlZmluZWQgaW4gc3RtMzJmMnh4LmggZmlsZSAoZGVmYXVsdCB2YWx1ZQ0KKyAgKiAgICAgICAgICAgICAgMjUgTUh6KSwgdXNlciBoYXMgdG8gZW5zdXJlIHRoYXQgSFNFX1ZBTFVFIGlzIHNhbWUgYXMgdGhlIHJlYWwNCisgICogICAgICAgICAgICAgIGZyZXF1ZW5jeSBvZiB0aGUgY3J5c3RhbCB1c2VkLiBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gbWF5DQorICAqICAgICAgICAgICAgICBoYXZlIHdyb25nIHJlc3VsdC4NCisgICogICAgICAgICAgICAgICAgDQorICAqICAgICAgICAgLSBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gY291bGQgYmUgbm90IGNvcnJlY3Qgd2hlbiB1c2luZyBmcmFjdGlvbmFsDQorICAqICAgICAgICAgICB2YWx1ZSBmb3IgSFNFIGNyeXN0YWwuDQorICAqICAgICANCisgICogQHBhcmFtICBOb25lDQorICAqIEByZXR2YWwgTm9uZQ0KKyAgKi8NCit2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSh2b2lkKQ0KK3sNCisgIHVpbnQzMl90IHRtcCA9IDAsIHBsbHZjbyA9IDAsIHBsbHAgPSAyLCBwbGxzb3VyY2UgPSAwLCBwbGxtID0gMjsNCisgIA0KKyAgLyogR2V0IFNZU0NMSyBzb3VyY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICB0bXAgPSBSQ0MtPkNGR1IgJiBSQ0NfQ0ZHUl9TV1M7DQorDQorICBzd2l0Y2ggKHRtcCkNCisgIHsNCisgICAgY2FzZSAweDAwOiAgLyogSFNJIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSAqLw0KKyAgICAgIFN5c3RlbUNvcmVDbG9jayA9IEhTSV9WQUxVRTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAweDA0OiAgLyogSFNFIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSAqLw0KKyAgICAgIFN5c3RlbUNvcmVDbG9jayA9IEhTRV9WQUxVRTsNCisgICAgICBicmVhazsNCisgICAgY2FzZSAweDA4OiAgLyogUExMIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSAqLw0KKw0KKyAgICAgIC8qIFBMTF9WQ08gPSAoSFNFX1ZBTFVFIG9yIEhTSV9WQUxVRSAvIFBMTF9NKSAqIFBMTF9ODQorICAgICAgICAgU1lTQ0xLID0gUExMX1ZDTyAvIFBMTF9QDQorICAgICAgICAgKi8gICAgDQorICAgICAgcGxsc291cmNlID0gKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTFNSQykgPj4gMjI7DQorICAgICAgcGxsbSA9IFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTE07DQorICAgICAgDQorICAgICAgaWYgKHBsbHNvdXJjZSAhPSAwKQ0KKyAgICAgIHsNCisgICAgICAgIC8qIEhTRSB1c2VkIGFzIFBMTCBjbG9jayBzb3VyY2UgKi8NCisgICAgICAgIHBsbHZjbyA9IChIU0VfVkFMVUUgLyBwbGxtKSAqICgoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMTikgPj4gNik7DQorICAgICAgfQ0KKyAgICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICAvKiBIU0kgdXNlZCBhcyBQTEwgY2xvY2sgc291cmNlICovDQorICAgICAgICBwbGx2Y28gPSAoSFNJX1ZBTFVFIC8gcGxsbSkgKiAoKFJDQy0+UExMQ0ZHUiAmIFJDQ19QTExDRkdSX1BMTE4pID4+IDYpOyAgICAgIA0KKyAgICAgIH0NCisNCisgICAgICBwbGxwID0gKCgoUkNDLT5QTExDRkdSICYgUkNDX1BMTENGR1JfUExMUCkgPj4xNikgKyAxICkgKjI7DQorICAgICAgU3lzdGVtQ29yZUNsb2NrID0gcGxsdmNvL3BsbHA7DQorICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQorICAgICAgU3lzdGVtQ29yZUNsb2NrID0gSFNJX1ZBTFVFOw0KKyAgICAgIGJyZWFrOw0KKyAgfQ0KKyAgLyogQ29tcHV0ZSBIQ0xLIGZyZXF1ZW5jeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorICAvKiBHZXQgSENMSyBwcmVzY2FsZXIgKi8NCisgIHRtcCA9IEFIQlByZXNjVGFibGVbKChSQ0MtPkNGR1IgJiBSQ0NfQ0ZHUl9IUFJFKSA+PiA0KV07DQorICAvKiBIQ0xLIGZyZXF1ZW5jeSAqLw0KKyAgU3lzdGVtQ29yZUNsb2NrID4+PSB0bXA7DQorfQ0KKw0KKy8qKg0KKyAgKiBAYnJpZWYgIENvbmZpZ3VyZXMgdGhlIFN5c3RlbSBjbG9jayBzb3VyY2UsIFBMTCBNdWx0aXBsaWVyIGFuZCBEaXZpZGVyIGZhY3RvcnMsIA0KKyAgKiAgICAgICAgIEFIQi9BUEJ4IHByZXNjYWxlcnMgYW5kIEZsYXNoIHNldHRpbmdzDQorICAqIEBOb3RlICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSB0aGUgUkNDIGNsb2NrIGNvbmZpZ3VyYXRpb24gIA0KKyAgKiAgICAgICAgIGlzIHJlc2V0IHRvIHRoZSBkZWZhdWx0IHJlc2V0IHN0YXRlIChkb25lIGluIFN5c3RlbUluaXQoKSBmdW5jdGlvbikuICAgDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQorc3RhdGljIHZvaWQgU2V0U3lzQ2xvY2sodm9pZCkNCit7DQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisvKiAgICAgICAgICAgIFBMTCAoY2xvY2tlZCBieSBIU0UpIHVzZWQgYXMgU3lzdGVtIGNsb2NrIHNvdXJjZSAgICAgICAgICAgICAgICAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorICBfX0lPIHVpbnQzMl90IFN0YXJ0VXBDb3VudGVyID0gMCwgSFNFU3RhdHVzID0gMDsNCisgIA0KKyAgLyogRW5hYmxlIEhTRSAqLw0KKyAgUkNDLT5DUiB8PSAoKHVpbnQzMl90KVJDQ19DUl9IU0VPTik7DQorIA0KKyAgLyogV2FpdCB0aWxsIEhTRSBpcyByZWFkeSBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovDQorICBkbw0KKyAgew0KKyAgICBIU0VTdGF0dXMgPSBSQ0MtPkNSICYgUkNDX0NSX0hTRVJEWTsNCisgICAgU3RhcnRVcENvdW50ZXIrKzsNCisgIH0gd2hpbGUoKEhTRVN0YXR1cyA9PSAwKSAmJiAoU3RhcnRVcENvdW50ZXIgIT0gSFNFX1NUQVJUVVBfVElNRU9VVCkpOw0KKw0KKyAgaWYgKChSQ0MtPkNSICYgUkNDX0NSX0hTRVJEWSkgIT0gUkVTRVQpDQorICB7DQorICAgIEhTRVN0YXR1cyA9ICh1aW50MzJfdCkweDAxOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBIU0VTdGF0dXMgPSAodWludDMyX3QpMHgwMDsNCisgIH0NCisNCisgIGlmIChIU0VTdGF0dXMgPT0gKHVpbnQzMl90KTB4MDEpDQorICB7DQorICAgIC8qIEhDTEsgPSBTWVNDTEsgLyAxKi8NCisgICAgUkNDLT5DRkdSIHw9IFJDQ19DRkdSX0hQUkVfRElWMTsNCisgICAgICANCisgICAgLyogUENMSzIgPSBIQ0xLIC8gMiovDQorICAgIFJDQy0+Q0ZHUiB8PSBSQ0NfQ0ZHUl9QUFJFMl9ESVYyOw0KKyAgICANCisgICAgLyogUENMSzEgPSBIQ0xLIC8gNCovDQorICAgIFJDQy0+Q0ZHUiB8PSBSQ0NfQ0ZHUl9QUFJFMV9ESVY0Ow0KKw0KKyAgICAvKiBDb25maWd1cmUgdGhlIG1haW4gUExMICovDQorICAgIFJDQy0+UExMQ0ZHUiA9IFBMTF9NIHwgKFBMTF9OIDw8IDYpIHwgKCgoUExMX1AgPj4gMSkgLTEpIDw8IDE2KSB8DQorICAgICAgICAgICAgICAgICAgIChSQ0NfUExMQ0ZHUl9QTExTUkNfSFNFKSB8IChQTExfUSA8PCAyNCk7DQorDQorICAgIC8qIEVuYWJsZSB0aGUgbWFpbiBQTEwgKi8NCisgICAgUkNDLT5DUiB8PSBSQ0NfQ1JfUExMT047DQorDQorICAgIC8qIFdhaXQgdGlsbCB0aGUgbWFpbiBQTEwgaXMgcmVhZHkgKi8NCisgICAgd2hpbGUoKFJDQy0+Q1IgJiBSQ0NfQ1JfUExMUkRZKSA9PSAwKQ0KKyAgICB7DQorICAgIH0NCisgICANCisgICAgLyogQ29uZmlndXJlIEZsYXNoIHByZWZldGNoLCBJbnN0cnVjdGlvbiBjYWNoZSwgRGF0YSBjYWNoZSBhbmQgd2FpdCBzdGF0ZSAqLw0KKyAgICBGTEFTSC0+QUNSID0gRkxBU0hfQUNSX1BSRlRFTiB8IEZMQVNIX0FDUl9JQ0VOIHwgRkxBU0hfQUNSX0RDRU4gfCBGTEFTSF9BQ1JfTEFURU5DWV8zV1M7DQorDQorICAgIC8qIFNlbGVjdCB0aGUgbWFpbiBQTEwgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSAqLw0KKyAgICBSQ0MtPkNGR1IgJj0gKHVpbnQzMl90KSgodWludDMyX3QpfihSQ0NfQ0ZHUl9TVykpOw0KKyAgICBSQ0MtPkNGR1IgfD0gUkNDX0NGR1JfU1dfUExMOw0KKw0KKyAgICAvKiBXYWl0IHRpbGwgdGhlIG1haW4gUExMIGlzIHVzZWQgYXMgc3lzdGVtIGNsb2NrIHNvdXJjZSAqLw0KKyAgICB3aGlsZSAoKFJDQy0+Q0ZHUiAmICh1aW50MzJfdClSQ0NfQ0ZHUl9TV1MgKSAhPSBSQ0NfQ0ZHUl9TV1NfUExMKTsNCisgICAgew0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7IC8qIElmIEhTRSBmYWlscyB0byBzdGFydC11cCwgdGhlIGFwcGxpY2F0aW9uIHdpbGwgaGF2ZSB3cm9uZyBjbG9jaw0KKyAgICAgICAgIGNvbmZpZ3VyYXRpb24uIFVzZXIgY2FuIGFkZCBoZXJlIHNvbWUgY29kZSB0byBkZWFsIHdpdGggdGhpcyBlcnJvciAqLw0KKyAgfQ0KKw0KK30NCisNCisvKioNCisgICogQGJyaWVmICBTZXR1cCB0aGUgZXh0ZXJuYWwgbWVtb3J5IGNvbnRyb2xsZXIuIENhbGxlZCBpbiBzdGFydHVwX3N0bTMyZjJ4eC5zDQorICAqICAgICAgICAgYmVmb3JlIGp1bXAgdG8gX19tYWluDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQorI2lmZGVmIERBVEFfSU5fRXh0U1JBTQ0KKy8qKg0KKyAgKiBAYnJpZWYgIFNldHVwIHRoZSBleHRlcm5hbCBtZW1vcnkgY29udHJvbGxlci4NCisgICogICAgICAgICBDYWxsZWQgaW4gc3RhcnR1cF9zdG0zMmYyeHgucyBiZWZvcmUganVtcCB0byBtYWluLg0KKyAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgZXh0ZXJuYWwgU1JBTSBtb3VudGVkIG9uIFNUTTMyMnhHX0VWQUwgYm9hcmQNCisgICogICAgICAgICBUaGlzIFNSQU0gd2lsbCBiZSB1c2VkIGFzIHByb2dyYW0gZGF0YSBtZW1vcnkgKGluY2x1ZGluZyBoZWFwIGFuZCBzdGFjaykuDQorICAqIEBwYXJhbSAgTm9uZQ0KKyAgKiBAcmV0dmFsIE5vbmUNCisgICovDQordm9pZCBTeXN0ZW1Jbml0X0V4dE1lbUN0bCh2b2lkKQ0KK3sNCisvKi0tIEdQSU9zIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qDQorICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rDQorICsgICAgICAgICAgICAgICAgICAgICAgIFNSQU0gcGlucyBhc3NpZ25tZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsNCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCBQRDAgIDwtPiBGU01DX0QyICB8IFBFMCAgPC0+IEZTTUNfTkJMMCB8IFBGMCAgPC0+IEZTTUNfQTAgfCBQRzAgPC0+IEZTTUNfQTEwIHwNCisgfCBQRDEgIDwtPiBGU01DX0QzICB8IFBFMSAgPC0+IEZTTUNfTkJMMSB8IFBGMSAgPC0+IEZTTUNfQTEgfCBQRzEgPC0+IEZTTUNfQTExIHwNCisgfCBQRDQgIDwtPiBGU01DX05PRSB8IFBFNyAgPC0+IEZTTUNfRDQgICB8IFBGMiAgPC0+IEZTTUNfQTIgfCBQRzIgPC0+IEZTTUNfQTEyIHwNCisgfCBQRDUgIDwtPiBGU01DX05XRSB8IFBFOCAgPC0+IEZTTUNfRDUgICB8IFBGMyAgPC0+IEZTTUNfQTMgfCBQRzMgPC0+IEZTTUNfQTEzIHwNCisgfCBQRDggIDwtPiBGU01DX0QxMyB8IFBFOSAgPC0+IEZTTUNfRDYgICB8IFBGNCAgPC0+IEZTTUNfQTQgfCBQRzQgPC0+IEZTTUNfQTE0IHwNCisgfCBQRDkgIDwtPiBGU01DX0QxNCB8IFBFMTAgPC0+IEZTTUNfRDcgICB8IFBGNSAgPC0+IEZTTUNfQTUgfCBQRzUgPC0+IEZTTUNfQTE1IHwNCisgfCBQRDEwIDwtPiBGU01DX0QxNSB8IFBFMTEgPC0+IEZTTUNfRDggICB8IFBGMTIgPC0+IEZTTUNfQTYgfCBQRzkgPC0+IEZTTUNfTkUyIHwNCisgfCBQRDExIDwtPiBGU01DX0ExNiB8IFBFMTIgPC0+IEZTTUNfRDkgICB8IFBGMTMgPC0+IEZTTUNfQTcgfC0tLS0tLS0tLS0tLS0tLS0tLSsNCisgfCBQRDEyIDwtPiBGU01DX0ExNyB8IFBFMTMgPC0+IEZTTUNfRDEwICB8IFBGMTQgPC0+IEZTTUNfQTggfCANCisgfCBQRDE0IDwtPiBGU01DX0QwICB8IFBFMTQgPC0+IEZTTUNfRDExICB8IFBGMTUgPC0+IEZTTUNfQTkgfCANCisgfCBQRDE1IDwtPiBGU01DX0QxICB8IFBFMTUgPC0+IEZTTUNfRDEyICB8LS0tLS0tLS0tLS0tLS0tLS0tKw0KKyArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsNCisqLw0KKyAgIC8qIEVuYWJsZSBHUElPRCwgR1BJT0UsIEdQSU9GIGFuZCBHUElPRyBpbnRlcmZhY2UgY2xvY2sgKi8NCisgIFJDQy0+QUhCMUVOUiAgID0gMHgwMDAwMDA3ODsNCisgIA0KKyAgLyogQ29ubmVjdCBQRHggcGlucyB0byBGU01DIEFsdGVybmF0ZSBmdW5jdGlvbiAqLw0KKyAgR1BJT0QtPkFGUlswXSAgPSAweDAwY2MwMGNjOw0KKyAgR1BJT0QtPkFGUlsxXSAgPSAweGNjMGNjY2NjOw0KKyAgLyogQ29uZmlndXJlIFBEeCBwaW5zIGluIEFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlICovICANCisgIEdQSU9ELT5NT0RFUiAgID0gMHhhMmFhMGEwYTsNCisgIC8qIENvbmZpZ3VyZSBQRHggcGlucyBzcGVlZCB0byAxMDAgTUh6ICovICANCisgIEdQSU9ELT5PU1BFRURSID0gMHhmM2ZmMGYwZjsNCisgIC8qIENvbmZpZ3VyZSBQRHggcGlucyBPdXRwdXQgdHlwZSB0byBwdXNoLXB1bGwgKi8gIA0KKyAgR1BJT0QtPk9UWVBFUiAgPSAweDAwMDAwMDAwOw0KKyAgLyogTm8gcHVsbC11cCwgcHVsbC1kb3duIGZvciBQRHggcGlucyAqLyANCisgIEdQSU9ELT5QVVBEUiAgID0gMHgwMDAwMDAwMDsNCisNCisgIC8qIENvbm5lY3QgUEV4IHBpbnMgdG8gRlNNQyBBbHRlcm5hdGUgZnVuY3Rpb24gKi8NCisgIEdQSU9FLT5BRlJbMF0gID0gMHhjMDAwMDBjYzsNCisgIEdQSU9FLT5BRlJbMV0gID0gMHhjY2NjY2NjYzsNCisgIC8qIENvbmZpZ3VyZSBQRXggcGlucyBpbiBBbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSAqLyANCisgIEdQSU9FLT5NT0RFUiAgID0gMHhhYWFhODAwYTsNCisgIC8qIENvbmZpZ3VyZSBQRXggcGlucyBzcGVlZCB0byAxMDAgTUh6ICovIA0KKyAgR1BJT0UtPk9TUEVFRFIgPSAweGZmZmZjMDBmOw0KKyAgLyogQ29uZmlndXJlIFBFeCBwaW5zIE91dHB1dCB0eXBlIHRvIHB1c2gtcHVsbCAqLyAgDQorICBHUElPRS0+T1RZUEVSICA9IDB4MDAwMDAwMDA7DQorICAvKiBObyBwdWxsLXVwLCBwdWxsLWRvd24gZm9yIFBFeCBwaW5zICovIA0KKyAgR1BJT0UtPlBVUERSICAgPSAweDAwMDAwMDAwOw0KKw0KKyAgLyogQ29ubmVjdCBQRnggcGlucyB0byBGU01DIEFsdGVybmF0ZSBmdW5jdGlvbiAqLw0KKyAgR1BJT0YtPkFGUlswXSAgPSAweDAwY2NjY2NjOw0KKyAgR1BJT0YtPkFGUlsxXSAgPSAweGNjY2MwMDAwOw0KKyAgLyogQ29uZmlndXJlIFBGeCBwaW5zIGluIEFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlICovICAgDQorICBHUElPRi0+TU9ERVIgICA9IDB4YWEwMDBhYWE7DQorICAvKiBDb25maWd1cmUgUEZ4IHBpbnMgc3BlZWQgdG8gMTAwIE1IeiAqLyANCisgIEdQSU9GLT5PU1BFRURSID0gMHhmZjAwMGZmZjsNCisgIC8qIENvbmZpZ3VyZSBQRnggcGlucyBPdXRwdXQgdHlwZSB0byBwdXNoLXB1bGwgKi8gIA0KKyAgR1BJT0YtPk9UWVBFUiAgPSAweDAwMDAwMDAwOw0KKyAgLyogTm8gcHVsbC11cCwgcHVsbC1kb3duIGZvciBQRnggcGlucyAqLyANCisgIEdQSU9GLT5QVVBEUiAgID0gMHgwMDAwMDAwMDsNCisNCisgIC8qIENvbm5lY3QgUEd4IHBpbnMgdG8gRlNNQyBBbHRlcm5hdGUgZnVuY3Rpb24gKi8NCisgIEdQSU9HLT5BRlJbMF0gID0gMHgwMGNjY2NjYzsNCisgIEdQSU9HLT5BRlJbMV0gID0gMHgwMDAwMDBjMDsNCisgIC8qIENvbmZpZ3VyZSBQR3ggcGlucyBpbiBBbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSAqLyANCisgIEdQSU9HLT5NT0RFUiAgID0gMHgwMDA4MGFhYTsNCisgIC8qIENvbmZpZ3VyZSBQR3ggcGlucyBzcGVlZCB0byAxMDAgTUh6ICovIA0KKyAgR1BJT0ctPk9TUEVFRFIgPSAweDAwMGMwZmZmOw0KKyAgLyogQ29uZmlndXJlIFBHeCBwaW5zIE91dHB1dCB0eXBlIHRvIHB1c2gtcHVsbCAqLyAgDQorICBHUElPRy0+T1RZUEVSICA9IDB4MDAwMDAwMDA7DQorICAvKiBObyBwdWxsLXVwLCBwdWxsLWRvd24gZm9yIFBHeCBwaW5zICovIA0KKyAgR1BJT0ctPlBVUERSICAgPSAweDAwMDAwMDAwOw0KKyAgDQorLyotLSBGU01DIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisgIC8qIEVuYWJsZSB0aGUgRlNNQyBpbnRlcmZhY2UgY2xvY2sgKi8NCisgIFJDQy0+QUhCM0VOUiAgICAgICAgID0gMHgwMDAwMDAwMTsNCisNCisgIC8qIENvbmZpZ3VyZSBhbmQgZW5hYmxlIEJhbmsxX1NSQU0yICovDQorICBGU01DX0JhbmsxLT5CVENSWzJdICA9IDB4MDAwMDEwMTU7DQorICBGU01DX0JhbmsxLT5CVENSWzNdICA9IDB4MDAwMTA0MDA7DQorICBGU01DX0JhbmsxRS0+QldUUlsyXSA9IDB4MGZmZmZmZmY7DQorLyoNCisgIEJhbmsxX1NSQU0yIGlzIGNvbmZpZ3VyZWQgYXMgZm9sbG93Og0KKw0KKyAgcC5GU01DX0FkZHJlc3NTZXR1cFRpbWUgPSAwOw0KKyAgcC5GU01DX0FkZHJlc3NIb2xkVGltZSA9IDA7DQorICBwLkZTTUNfRGF0YVNldHVwVGltZSA9IDQ7DQorICBwLkZTTUNfQnVzVHVybkFyb3VuZER1cmF0aW9uID0gMTsNCisgIHAuRlNNQ19DTEtEaXZpc2lvbiA9IDA7DQorICBwLkZTTUNfRGF0YUxhdGVuY3kgPSAwOw0KKyAgcC5GU01DX0FjY2Vzc01vZGUgPSBGU01DX0FjY2Vzc01vZGVfQTsNCisNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19CYW5rID0gRlNNQ19CYW5rMV9OT1JTUkFNMjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19EYXRhQWRkcmVzc011eCA9IEZTTUNfRGF0YUFkZHJlc3NNdXhfRGlzYWJsZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19NZW1vcnlUeXBlID0gRlNNQ19NZW1vcnlUeXBlX1BTUkFNOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdHVyZS5GU01DX01lbW9yeURhdGFXaWR0aCA9IEZTTUNfTWVtb3J5RGF0YVdpZHRoXzE2YjsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19CdXJzdEFjY2Vzc01vZGUgPSBGU01DX0J1cnN0QWNjZXNzTW9kZV9EaXNhYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdHVyZS5GU01DX0FzeW5jaHJvbm91c1dhaXQgPSBGU01DX0FzeW5jaHJvbm91c1dhaXRfRGlzYWJsZTsgIA0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdHVyZS5GU01DX1dhaXRTaWduYWxQb2xhcml0eSA9IEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5X0xvdzsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19XcmFwTW9kZSA9IEZTTUNfV3JhcE1vZGVfRGlzYWJsZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19XYWl0U2lnbmFsQWN0aXZlID0gRlNNQ19XYWl0U2lnbmFsQWN0aXZlX0JlZm9yZVdhaXRTdGF0ZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19Xcml0ZU9wZXJhdGlvbiA9IEZTTUNfV3JpdGVPcGVyYXRpb25fRW5hYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdHVyZS5GU01DX1dhaXRTaWduYWwgPSBGU01DX1dhaXRTaWduYWxfRGlzYWJsZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19FeHRlbmRlZE1vZGUgPSBGU01DX0V4dGVuZGVkTW9kZV9EaXNhYmxlOw0KKyAgRlNNQ19OT1JTUkFNSW5pdFN0cnVjdHVyZS5GU01DX1dyaXRlQnVyc3QgPSBGU01DX1dyaXRlQnVyc3RfRGlzYWJsZTsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19SZWFkV3JpdGVUaW1pbmdTdHJ1Y3QgPSAmcDsNCisgIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3R1cmUuRlNNQ19Xcml0ZVRpbWluZ1N0cnVjdCA9ICZwOw0KKyovDQorICANCit9DQorI2VuZGlmIC8qIERBVEFfSU5fRXh0U1JBTSAqLw0KKw0KKw0KKy8qKg0KKyAgKiBAfQ0KKyAgKi8NCisNCisvKioNCisgICogQH0NCisgICovDQorICANCisvKioNCisgICogQH0NCisgICovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8NCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9kZWJ1Zy5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjZkZjQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvZGVidWcuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRyYXZpcyBHZWlzZWxicmVjaHQKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKKyAqICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCisgKiBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICogcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCisgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8cmVnLmg+CisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGtlcm5lbC90aHJlYWQuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFyY2gvb3BzLmg+CisjaW5jbHVkZSA8ZGV2L3VhcnQuaD4KKyNpbmNsdWRlIDx0YXJnZXQvZGVidWdjb25maWcuaD4KKyNpbmNsdWRlIDxzdG0zMmYyeHhfcmNjLmg+CisjaW5jbHVkZSA8c3RtMzJmMnh4X3VzYXJ0Lmg+CisjaW5jbHVkZSA8YXJjaC9hcm0vY20uaD4KKwordm9pZCBzdG0zMl9kZWJ1Z19lYXJseV9pbml0KHZvaWQpCit7CisJdWFydF9pbml0X2Vhcmx5KCk7Cit9CisKKy8qIGxhdGVyIGluIHRoZSBpbml0IHByb2Nlc3MgKi8KK3ZvaWQgc3RtMzJfZGVidWdfaW5pdCh2b2lkKQoreworCXVhcnRfaW5pdCgpOworfQorCit2b2lkIHBsYXRmb3JtX2RwdXRjKGNoYXIgYykKK3sKKwlpZiAoYyA9PSAnXG4nKQorCQl1YXJ0X3B1dGMoREVCVUdfVUFSVCwgJ1xyJyk7CisJdWFydF9wdXRjKERFQlVHX1VBUlQsIGMpOworfQorCitpbnQgcGxhdGZvcm1fZGdldGMoY2hhciAqYywgYm9vbCB3YWl0KQoreworCWludCByZXQgPSB1YXJ0X2dldGMoREVCVUdfVUFSVCwgd2FpdCk7CisJaWYgKHJldCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCSpjID0gcmV0OworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9ncGlvLmMgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlNTkwNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2dwaW8uYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUcmF2aXMgR2Vpc2VsYnJlY2h0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCisgKiAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAorICogaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKKyAqIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGV2L2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9zdG0zMi5oPgorI2luY2x1ZGUgPHBsYXRmb3JtL2dwaW8uaD4KKyNpbmNsdWRlIDxzdG0zMmYyeHhfZ3Bpby5oPgorI2luY2x1ZGUgPHN0bTMyZjJ4eF9yY2MuaD4KKworc3RhdGljIEdQSU9fVHlwZURlZiAqcG9ydF90b19wb2ludGVyKHVuc2lnbmVkIGludCBwb3J0KQoreworCXN3aXRjaCAocG9ydCkgeworCQlkZWZhdWx0OgorCQljYXNlIEdQSU9fUE9SVF9BOgorCQkJcmV0dXJuIEdQSU9BOworCQljYXNlIEdQSU9fUE9SVF9COgorCQkJcmV0dXJuIEdQSU9COworCQljYXNlIEdQSU9fUE9SVF9DOgorCQkJcmV0dXJuIEdQSU9DOworCQljYXNlIEdQSU9fUE9SVF9EOgorCQkJcmV0dXJuIEdQSU9EOworCQljYXNlIEdQSU9fUE9SVF9FOgorCQkJcmV0dXJuIEdQSU9FOworCQljYXNlIEdQSU9fUE9SVF9GOgorCQkJcmV0dXJuIEdQSU9GOworCQljYXNlIEdQSU9fUE9SVF9HOgorCQkJcmV0dXJuIEdQSU9HOworCQljYXNlIEdQSU9fUE9SVF9IOgorCQkJcmV0dXJuIEdQSU9IOworCQljYXNlIEdQSU9fUE9SVF9JOgorCQkJcmV0dXJuIEdQSU9JOworCX0KK30KKworc3RhdGljIHZvaWQgZW5hYmxlX3BvcnQodW5zaWduZWQgaW50IHBvcnQpCit7CisJREVCVUdfQVNTRVJUKHBvcnQgPD0gR1BJT19QT1JUX0kpOworCisJLyogaGFwcGVucyB0byBiZSB0aGUgUkNDIGlkcyBhcmUgc2VxdWVudGlhbCBiaXRzLCBzbyB3ZSBjYW4gc3RhcnQgZnJvbSBBIGFuZCBzaGlmdCAqLworCVJDQ19BSEIxUGVyaXBoQ2xvY2tDbWQoUkNDX0FIQjFQZXJpcGhfR1BJT0EgPDwgcG9ydCwgRU5BQkxFKTsKK30KKwordm9pZCBzdG0zMl9ncGlvX2Vhcmx5X2luaXQodm9pZCkKK3sKK30KKworaW50IGdwaW9fY29uZmlnKHVuc2lnbmVkIG5yLCB1bnNpZ25lZCBmbGFncykKK3sKKworCXVpbnQgcG9ydCA9IEdQSU9fUE9SVChucik7CisJdWludCBwaW4gPSBHUElPX1BJTihucik7CisKKwllbmFibGVfcG9ydChwb3J0KTsKKworCUdQSU9fSW5pdFR5cGVEZWYgaW5pdDsKKwlpbml0LkdQSU9fU3BlZWQgPSBHUElPX1NwZWVkXzUwTUh6OworCWluaXQuR1BJT19QaW4gPSAoMSA8PCBwaW4pOworCWluaXQuR1BJT19QdVBkID0gR1BJT19QdVBkX05PUFVMTDsKKworCWlmIChmbGFncyAmIEdQSU9fSU5QVVQpIHsKKwkJaW5pdC5HUElPX01vZGUgPSBHUElPX01vZGVfSU47CisJfSBlbHNlIGlmICAoZmxhZ3MgJiBHUElPX09VVFBVVCkgeworCQlpbml0LkdQSU9fTW9kZSA9IEdQSU9fTW9kZV9PVVQ7CisJfSBlbHNlIGlmICAoZmxhZ3MgJiBHUElPX1NUTTMyX0FGKSB7CisJCWluaXQuR1BJT19Nb2RlID0gR1BJT19Nb2RlX0FGOworCQlHUElPX1BpbkFGQ29uZmlnKHBvcnRfdG9fcG9pbnRlcihwb3J0KSwgcGluLCBHUElPX0FGTlVNKGZsYWdzKSk7CisJfQorCisJaWYgKGZsYWdzICYgR1BJT19QVUxMVVApIHsKKwkJaW5pdC5HUElPX1B1UGQgPSBHUElPX1B1UGRfVVA7CisJfSBlbHNlIGlmIChmbGFncyAmIEdQSU9fUFVMTERPV04pIHsKKwkJaW5pdC5HUElPX1B1UGQgPSBHUElPX1B1UGRfRE9XTjsKKwl9CisKKwlpZiAoZmxhZ3MgJiBHUElPX1NUTTMyX09EKSB7CisJCWluaXQuR1BJT19PVHlwZSA9IEdQSU9fT1R5cGVfT0Q7CisJfSBlbHNlIHsKKwkJaW5pdC5HUElPX09UeXBlID0gR1BJT19PVHlwZV9QUDsKKwl9CisKKwlHUElPX0luaXQocG9ydF90b19wb2ludGVyKHBvcnQpLCAmaW5pdCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBncGlvX3NldCh1bnNpZ25lZCBuciwgdW5zaWduZWQgb24pCit7CisJR1BJT19Xcml0ZUJpdChwb3J0X3RvX3BvaW50ZXIoR1BJT19QT1JUKG5yKSksIDEgPDwgR1BJT19QSU4obnIpLCBvbik7Cit9CisKK2ludCBncGlvX2dldCh1bnNpZ25lZCBucikKK3sKKwlyZXR1cm4gR1BJT19SZWFkSW5wdXREYXRhQml0KHBvcnRfdG9fcG9pbnRlcihHUElPX1BPUlQobnIpKSwgMSA8PCBHUElPX1BJTihucikpOworfQorCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9pbmNsdWRlL3BsYXRmb3JtL2dwaW8uaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2luY2x1ZGUvcGxhdGZvcm0vZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzFkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9pbmNsdWRlL3BsYXRmb3JtL2dwaW8uaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9fUExBVEZPUk1fU1RNMzJfR1BJT19ICisjZGVmaW5lIF9fUExBVEZPUk1fU1RNMzJfR1BJT19ICisKKy8qIGhlbHBlciBkZWZpbmVzIGZvciBTVE0zMiBwbGF0Zm9ybXMgKi8KKworLyogZmxhZyB0byBncGlvX2NvbmZpZ3VyZSAqLworI2RlZmluZSBHUElPX1NUTTMyX0FGICgweDEgPDwgMTYpCisjZGVmaW5lIEdQSU9fU1RNMzJfT0QgKDB4MiA8PCAxNikKKyNkZWZpbmUgR1BJT19TVE0zMl9BRm4obikgKChuKSA8PCAyNCkKKworLyogZ3BpbyBwb3J0L3BpbiBpcyBwYWNrZWQgaW50byBhIHNpbmdsZSB1bnNpZ25lZCBpbnQgaW4gMTZ4Ojhwb3J0OjhwaW4gZm9ybWF0ICovCisjZGVmaW5lIEdQSU8ocG9ydCwgcGluKSAoKHVuc2lnbmVkIGludCkoKChwb3J0KSA8PCA4KSB8IChwaW4pKSkKKworI2RlZmluZSBHUElPX1BPUlQoZ3BpbykgKCgoZ3BpbykgPj4gOCkgJiAweGZmKQorI2RlZmluZSBHUElPX1BJTihncGlvKSAoKGdwaW8pICYgMHhmZikKKyNkZWZpbmUgR1BJT19BRk5VTShncGlvKSAoKChncGlvKSA+PiAyNCkgJiAweGYpCisKKyNkZWZpbmUgR1BJT19QT1JUX0EgMAorI2RlZmluZSBHUElPX1BPUlRfQiAxCisjZGVmaW5lIEdQSU9fUE9SVF9DIDIKKyNkZWZpbmUgR1BJT19QT1JUX0QgMworI2RlZmluZSBHUElPX1BPUlRfRSA0CisjZGVmaW5lIEdQSU9fUE9SVF9GIDUKKyNkZWZpbmUgR1BJT19QT1JUX0cgNgorI2RlZmluZSBHUElPX1BPUlRfSCA3CisjZGVmaW5lIEdQSU9fUE9SVF9JIDgKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2luY2x1ZGUvcGxhdGZvcm0vcGxhdGZvcm1fY20uaCBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2luY2x1ZGUvcGxhdGZvcm0vcGxhdGZvcm1fY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZiNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvaW5jbHVkZS9wbGF0Zm9ybS9wbGF0Zm9ybV9jbS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVHJhdmlzIEdlaXNlbGJyZWNodAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcworICogKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKKyAqIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsCisgKiBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKKyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19QTEFURk9STV9DTV9ICisjZGVmaW5lIF9fUExBVEZPUk1fQ01fSAorCisjaW5jbHVkZSA8c3RtMzJmMnh4Lmg+CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9pbmNsdWRlL3BsYXRmb3JtL3N0bTMyLmggYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9pbmNsdWRlL3BsYXRmb3JtL3N0bTMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MzM2NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2luY2x1ZGUvcGxhdGZvcm0vc3RtMzIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRyYXZpcyBHZWlzZWxicmVjaHQKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKKyAqICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCisgKiBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICogcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCisgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fUExBVEZPUk1fU1RNMzJfSAorI2RlZmluZSBfX1BMQVRGT1JNX1NUTTMyX0gKKwordm9pZCBzdG0zMl9kZWJ1Z19lYXJseV9pbml0KHZvaWQpOwordm9pZCBzdG0zMl9kZWJ1Z19pbml0KHZvaWQpOwordm9pZCBzdG0zMl90aW1lcl9lYXJseV9pbml0KHZvaWQpOwordm9pZCBzdG0zMl90aW1lcl9pbml0KHZvaWQpOwordm9pZCBzdG0zMl9ncGlvX2Vhcmx5X2luaXQodm9pZCk7Cit2b2lkIHN0bTMyX2ZsYXNoX25vcl9lYXJseV9pbml0KHZvaWQpOwordm9pZCBzdG0zMl9mbGFzaF9ub3JfaW5pdCh2b2lkKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2luaXQuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDNiMDNiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvaW5pdC5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVHJhdmlzIEdlaXNlbGJyZWNodAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcworICogKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKKyAqIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsCisgKiBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKKyAqIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxkZWJ1Zy5oPgorI2luY2x1ZGUgPGRldi91YXJ0Lmg+CisjaW5jbHVkZSA8cGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9zdG0zMi5oPgorI2luY2x1ZGUgPGFyY2gvYXJtL2NtLmg+CisjaW5jbHVkZSA8c3RtMzJmMnh4X3JjYy5oPgorI2luY2x1ZGUgInN5c3RlbV9zdG0zMmYyeHguaCIKKwordm9pZCBwbGF0Zm9ybV9lYXJseV9pbml0KHZvaWQpCit7CisJLy8gQ3JhbmsgdXAgdGhlIGNsb2NrIGJlZm9yZSBpbml0aW5nIHRpbWVycy4KKwlTeXN0ZW1Jbml0KCk7CisKKwkvLyBzdGFydCB0aGUgc3lzdGljayB0aW1lcgorCVJDQ19DbG9ja3NUeXBlRGVmIGNsb2NrczsKKwlSQ0NfR2V0Q2xvY2tzRnJlcSgmY2xvY2tzKTsKKwlhcm1fY21fc3lzdGlja19pbml0KGNsb2Nrcy5TWVNDTEtfRnJlcXVlbmN5KTsKKworCXN0bTMyX3RpbWVyX2Vhcmx5X2luaXQoKTsKKwlzdG0zMl9ncGlvX2Vhcmx5X2luaXQoKTsKK30KKwordm9pZCBwbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJc3RtMzJfdGltZXJfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvcnVsZXMubWsgYi9zcmMvYnNwL2xrL3BsYXRmb3JtL3N0bTMyZjJ4eC9ydWxlcy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFkYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvcnVsZXMubWsKQEAgLTAsMCArMSw2OCBAQAorTE9DQUxfRElSIDo9ICQoR0VUX0xPQ0FMX0RJUikKKworTU9EVUxFIDo9ICQoTE9DQUxfRElSKQorCisjIFJPTUJBU0UsIE1FTUJBU0UsIGFuZCBNRU1TSVpFIGFyZSByZXF1aXJlZCBmb3IgdGhlIGxpbmtlciBzY3JpcHQKK1JPTUJBU0UgOj0gMHgwODAwMDAwMAorTUVNQkFTRSA6PSAweDIwMDAwMDAwCisjIGRlZmF1bHQgbWVtc2l6ZSwgc3BlY2lmaWMgU1RNMzJfQ0hJUCBtYXkgb3ZlcnJpZGUgdGhpcworIyBhbmQgdGFyZ2V0L3Byb2plY3QgbWF5IGhhdmUgYWxyZWFkeSBvdmVycmlkZGVuCitNRU1TSVpFID89IDEzMTA3MgorCitBUkNIIDo9IGFybQorQVJNX0NQVSA6PSBjb3J0ZXgtbTMKKworaWZlcSAoJChTVE0zMl9DSElQKSxzdG0zMmYyMDcpCitHTE9CQUxfREVGSU5FUyArPSBcCisJU1RNMzJGMjA3PTEJXAorCVNUTTMyRjJYWD0xCitGT1VORF9DSElQIDo9IHRydWUKK2VuZGlmCitpZmVxICgkKFNUTTMyX0NISVApLHN0bTMyZjQwNykKK0dMT0JBTF9ERUZJTkVTICs9IFwKKwlTVE0zMkY0MDc9MQlcCisJU1RNMzJGNFhYPTEKK0ZPVU5EX0NISVAgOj0gdHJ1ZQorQVJNX0NQVSA6PSBjb3J0ZXgtbTQKK2VuZGlmCisKK2lmZXEgKCQoRk9VTkRfQ0hJUCksKQorJChlcnJvciB1bmtub3duIFNUTTMyRjJ4eCBjaGlwICQoU1RNMzJfQ0hJUCkpCitlbmRpZgorCitHTE9CQUxfREVGSU5FUyArPSBcCisJTUVNU0laRT0kKE1FTVNJWkUpCisKK01PRFVMRV9TUkNTICs9IFwKKwkkKExPQ0FMX0RJUikvaW5pdC5jIFwKKwkkKExPQ0FMX0RJUikvdmVjdGFiLmMgXAorCSQoTE9DQUxfRElSKS9ncGlvLmMgXAorCSQoTE9DQUxfRElSKS90aW1lci5jIFwKKwkkKExPQ0FMX0RJUikvZGVidWcuYyBcCisJJChMT0NBTF9ESVIpL3VhcnQuYyBcCisKKyMJJChMT0NBTF9ESVIpL2ZsYXNoX25vci5jIFwKKwkkKExPQ0FMX0RJUikvaW50ZXJydXB0cy5jIFwKKwkkKExPQ0FMX0RJUikvcGxhdGZvcm1fZWFybHkuYyBcCisJJChMT0NBTF9ESVIpL3BsYXRmb3JtLmMgXAorCSQoTE9DQUxfRElSKS90aW1lci5jIFwKKwkkKExPQ0FMX0RJUikvaW5pdF9jbG9jay5jIFwKKwkkKExPQ0FMX0RJUikvaW5pdF9jbG9ja180OG1oei5jIFwKKwkkKExPQ0FMX0RJUikvbXV4LmMgXAorCSQoTE9DQUxfRElSKS9lbWFjX2Rldi5jCisKKyMgdXNlIGEgdHdvIHNlZ21lbnQgbWVtb3J5IGxheW91dCwgd2hlcmUgYWxsIG9mIHRoZSByZWFkLW9ubHkgc2VjdGlvbnMgCisjIG9mIHRoZSBiaW5hcnkgcmVzaWRlIGluIHJvbSwgYW5kIHRoZSByZWFkL3dyaXRlIGFyZSBpbiBtZW1vcnkuIFRoZSAKKyMgUk9NQkFTRSwgTUVNQkFTRSwgYW5kIE1FTVNJWkUgbWFrZSB2YXJpYWJsZXMgYXJlIHJlcXVpcmVkIHRvIGJlIHNldCAKKyMgZm9yIHRoZSBsaW5rZXIgc2NyaXB0IHRvIGJlIGdlbmVyYXRlZCBwcm9wZXJseS4KKyMKK0xJTktFUl9TQ1JJUFQgKz0gXAorCSQoQlVJTERESVIpL3N5c3RlbS10d29zZWdtZW50LmxkCisKK01PRFVMRV9ERVBTICs9IFwKKwlhcmNoL2FybS9hcm0tbS9zeXN0aWNrIFwKKwlsaWIvY2J1ZgorCitpbmNsdWRlICQoTE9DQUxfRElSKS9TVE0zMkYyeHhfU3RkUGVyaXBoX0RyaXZlci9ydWxlcy5tayAkKExPQ0FMX0RJUikvQ01TSVMvcnVsZXMubWsKKworaW5jbHVkZSBtYWtlL21vZHVsZS5tawpkaWZmIC0tZ2l0IGEvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvdGltZXIuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MTkxNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L3RpbWVyLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMiBUcmF2aXMgR2Vpc2VsYnJlY2h0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCisgKiAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAorICogaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKKyAqIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8dHJhY2UuaD4KKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxrZXJuZWwvdGhyZWFkLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS90aW1lci5oPgorI2luY2x1ZGUgPHN0bTMyZjJ4eF9yY2MuaD4KKyNpbmNsdWRlIDxzdG0zMmYyeHhfdGltLmg+CisjaW5jbHVkZSA8bWlzYy5oPgorI2luY2x1ZGUgPGFyY2gvYXJtL2NtLmg+CisKKyNkZWZpbmUgTE9DQUxfVFJBQ0UgMAorCitzdGF0aWMgdm9pZCBzdG0zMl90aW1faXJxKHVpbnQgbnVtKQoreworCVRSQUNFRigidGltIGlycSAlZFxuIiwgbnVtKTsKKwlQQU5JQ19VTklNUExFTUVOVEVEOworfQorCit2b2lkIHN0bTMyX1RJTTNfSVJRKHZvaWQpCit7CisJc3RtMzJfdGltX2lycSgzKTsKK30KKwordm9pZCBzdG0zMl9USU00X0lSUSh2b2lkKQoreworCXN0bTMyX3RpbV9pcnEoNCk7Cit9CisKK3ZvaWQgc3RtMzJfVElNNV9JUlEodm9pZCkKK3sKKwlzdG0zMl90aW1faXJxKDUpOworfQorCit2b2lkIHN0bTMyX1RJTTZfSVJRKHZvaWQpCit7CisJc3RtMzJfdGltX2lycSg2KTsKK30KKwordm9pZCBzdG0zMl9USU03X0lSUSh2b2lkKQoreworCXN0bTMyX3RpbV9pcnEoNyk7Cit9CisKKy8qIHRpbWUgYmFzZSAqLwordm9pZCBzdG0zMl9USU0yX0lSUSh2b2lkKQoreworCXN0bTMyX3RpbV9pcnEoMik7Cit9CisKK3ZvaWQgc3RtMzJfdGltZXJfZWFybHlfaW5pdCh2b2lkKQoreworfQorCit2b2lkIHN0bTMyX3RpbWVyX2luaXQodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L3VhcnQuYyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDI4OTI4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvdWFydC5jCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIEtlbnQgUnlob3JjaHVrCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCisgKiAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAorICogaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKKyAqIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHJlZy5oPgorI2luY2x1ZGUgPGRlYnVnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaWIvY2J1Zi5oPgorI2luY2x1ZGUgPGtlcm5lbC90aHJlYWQuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFyY2gvb3BzLmg+CisjaW5jbHVkZSA8ZGV2L3VhcnQuaD4KKyNpbmNsdWRlIDx0YXJnZXQvZGVidWdjb25maWcuaD4KKyNpbmNsdWRlIDxzdG0zMmYyeHhfcmNjLmg+CisjaW5jbHVkZSA8c3RtMzJmMnh4X3VzYXJ0Lmg+CisjaW5jbHVkZSA8YXJjaC9hcm0vY20uaD4KKworI2RlZmluZSBSWEJVRl9TSVpFIDE2CisKKyNpZmRlZiBFTkFCTEVfVUFSVDEKK2NidWZfdCB1YXJ0MV9yeF9idWY7CisjaWZuZGVmIFVBUlQxX0ZMT1dDT05UUk9MCisjZGVmaW5lIFVBUlQxX0ZMT1dDT05UUk9MIFVTQVJUX0hhcmR3YXJlRmxvd0NvbnRyb2xfTm9uZQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9VQVJUMgorY2J1Zl90IHVhcnQyX3J4X2J1ZjsKKyNpZm5kZWYgVUFSVDJfRkxPV0NPTlRST0wKKyNkZWZpbmUgVUFSVDJfRkxPV0NPTlRST0wgVVNBUlRfSGFyZHdhcmVGbG93Q29udHJvbF9Ob25lCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX1VBUlQzCitjYnVmX3QgdWFydDNfcnhfYnVmOworI2lmbmRlZiBVQVJUM19GTE9XQ09OVFJPTAorI2RlZmluZSBVQVJUM19GTE9XQ09OVFJPTCBVU0FSVF9IYXJkd2FyZUZsb3dDb250cm9sX05vbmUKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfVUFSVDEKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9VQVJUMgorI2VuZGlmCisjaWZkZWYgRU5BQkxFX1VBUlQzCisjZW5kaWYKKworc3RhdGljIHZvaWQgdXNhcnRfaW5pdDFfZWFybHkoVVNBUlRfVHlwZURlZiAqdXNhcnQsIHVpbnQxNl90IGZsb3djb250cm9sLCBpbnQgaXJxbikKK3sKKwlVU0FSVF9Jbml0VHlwZURlZiBpbml0OworCisJaW5pdC5VU0FSVF9CYXVkUmF0ZSA9IDExNTIwMDsKKwlpbml0LlVTQVJUX1dvcmRMZW5ndGggPSBVU0FSVF9Xb3JkTGVuZ3RoXzhiOworCWluaXQuVVNBUlRfU3RvcEJpdHMgPSBVU0FSVF9TdG9wQml0c18xOworCWluaXQuVVNBUlRfUGFyaXR5ID0gVVNBUlRfUGFyaXR5X05vOworCWluaXQuVVNBUlRfTW9kZSA9IFVTQVJUX01vZGVfVHh8VVNBUlRfTW9kZV9SeDsKKwlpbml0LlVTQVJUX0hhcmR3YXJlRmxvd0NvbnRyb2wgPSBmbG93Y29udHJvbDsKKworCVVTQVJUX0luaXQodXNhcnQsICZpbml0KTsKKwlVU0FSVF9JVENvbmZpZyh1c2FydCwgVVNBUlRfSVRfUlhORSwgRElTQUJMRSk7CisJTlZJQ19EaXNhYmxlSVJRKGlycW4pOworCVVTQVJUX0NtZCh1c2FydCwgRU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgdXNhcnRfaW5pdDEoVVNBUlRfVHlwZURlZiAqdXNhcnQsIGludCBpcnFuLCBjYnVmX3QgKnJ4YnVmKQoreworCWNidWZfaW5pdGlhbGl6ZShyeGJ1ZiwgUlhCVUZfU0laRSk7CisJVVNBUlRfSVRDb25maWcodXNhcnQsIFVTQVJUX0lUX1JYTkUsIEVOQUJMRSk7CisJTlZJQ19FbmFibGVJUlEoaXJxbik7CisJVVNBUlRfQ21kKHVzYXJ0LCBFTkFCTEUpOworfQorCit2b2lkIHVhcnRfaW5pdF9lYXJseSh2b2lkKQoreworI2lmZGVmIEVOQUJMRV9VQVJUMQorCVJDQ19BUEIyUGVyaXBoQ2xvY2tDbWQoUkNDX0FQQjJQZXJpcGhfVVNBUlQxLCBFTkFCTEUpOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1VBUlQyCisJUkNDX0FQQjFQZXJpcGhDbG9ja0NtZChSQ0NfQVBCMVBlcmlwaF9VU0FSVDIsIEVOQUJMRSk7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfVUFSVDMKKwlSQ0NfQVBCMVBlcmlwaENsb2NrQ21kKFJDQ19BUEIxUGVyaXBoX1VTQVJUMywgRU5BQkxFKTsKKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX1VBUlQxCisJdXNhcnRfaW5pdDFfZWFybHkoVVNBUlQxLCBVQVJUMV9GTE9XQ09OVFJPTCwgVVNBUlQxX0lSUW4pOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1VBUlQyCisJdXNhcnRfaW5pdDFfZWFybHkoVVNBUlQyLCBVQVJUMl9GTE9XQ09OVFJPTCwgVVNBUlQyX0lSUW4pOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1VBUlQzCisJdXNhcnRfaW5pdDFfZWFybHkoVVNBUlQzLCBVQVJUM19GTE9XQ09OVFJPTCwgVVNBUlQzX0lSUW4pOworI2VuZGlmCit9CisKK3ZvaWQgdWFydF9pbml0KHZvaWQpCit7CisjaWZkZWYgRU5BQkxFX1VBUlQxCisJdXNhcnRfaW5pdDEoVVNBUlQxLCBVU0FSVDFfSVJRbiwgJnVhcnQxX3J4X2J1Zik7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfVUFSVDIKKwl1c2FydF9pbml0MShVU0FSVDIsIFVTQVJUMl9JUlFuLCAmdWFydDJfcnhfYnVmKTsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9VQVJUMworCXVzYXJ0X2luaXQxKFVTQVJUMywgVVNBUlQzX0lSUW4sICZ1YXJ0M19yeF9idWYpOworI2VuZGlmCit9CisKK3ZvaWQgdWFydF9yeF9pcnEoVVNBUlRfVHlwZURlZiAqdXNhcnQsIGNidWZfdCAqcnhidWYpCit7CisJYXJtX2NtX2lycV9lbnRyeSgpOworCisJYm9vbCByZXNjaGVkID0gZmFsc2U7CisJd2hpbGUgKFVTQVJUX0dldEZsYWdTdGF0dXModXNhcnQsIFVTQVJUX0ZMQUdfUlhORSkpIHsKKwkJaWYgKCFjYnVmX3NwYWNlX2F2YWlsKHJ4YnVmKSkgeworCQkJLy8gT3ZlcmZsb3cgLSBsZXQgZmxvdyBjb250cm9sIGRvIGl0cyB0aGluZyBieSBub3QKKwkJCS8vIHJlYWRpbmcgdGhlIGZyb20gdGhlIEZJRk8uCisJCQlVU0FSVF9JVENvbmZpZyh1c2FydCwgVVNBUlRfSVRfUlhORSwgRElTQUJMRSk7CisJCQlicmVhazsKKwkJfQorCisJCWNoYXIgYyA9IFVTQVJUX1JlY2VpdmVEYXRhKHVzYXJ0KTsKKwkJY2J1Zl93cml0ZV9jaGFyKHJ4YnVmLCBjLCBmYWxzZSk7CisJCXJlc2NoZWQgPSB0cnVlOworCX0KKworCWFybV9jbV9pcnFfZXhpdChyZXNjaGVkKTsKK30KKworI2lmZGVmIEVOQUJMRV9VQVJUMQordm9pZCBzdG0zMl9VU0FSVDFfSVJRKHZvaWQpCit7CisJdWFydF9yeF9pcnEoVVNBUlQxLCAmdWFydDFfcnhfYnVmKTsKK30KKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX1VBUlQyCit2b2lkIHN0bTMyX1VTQVJUMl9JUlEodm9pZCkKK3sKKwl1YXJ0X3J4X2lycShVU0FSVDIsICZ1YXJ0Ml9yeF9idWYpOworfQorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfVUFSVDMKK3ZvaWQgc3RtMzJfVVNBUlQzX0lSUSh2b2lkKQoreworCXVhcnRfcnhfaXJxKFVTQVJUMywgJnVhcnQzX3J4X2J1Zik7Cit9CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCB1c2FydF9wdXRjKFVTQVJUX1R5cGVEZWYgKnVzYXJ0LCBjaGFyIGMpCit7CisJd2hpbGUgKFVTQVJUX0dldEZsYWdTdGF0dXModXNhcnQsIFVTQVJUX0ZMQUdfVFhFKSA9PSAwKTsKKwlVU0FSVF9TZW5kRGF0YSh1c2FydCwgYyk7CisJd2hpbGUgKFVTQVJUX0dldEZsYWdTdGF0dXModXNhcnQsIFVTQVJUX0ZMQUdfVEMpID09IDApOworfQorCitzdGF0aWMgaW50IHVzYXJ0X2dldGMoVVNBUlRfVHlwZURlZiAqdXNhcnQsIGNidWZfdCAqcnhidWYsIGJvb2wgd2FpdCkKK3sKKwljaGFyIGM7CisJY2J1Zl9yZWFkX2NoYXIocnhidWYsICZjLCB3YWl0KTsKKwlpZiAoY2J1Zl9zcGFjZV9hdmFpbChyeGJ1ZikgPiBSWEJVRl9TSVpFLzIpCisJCVVTQVJUX0lUQ29uZmlnKHVzYXJ0LCBVU0FSVF9JVF9SWE5FLCBFTkFCTEUpOworCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBVU0FSVF9UeXBlRGVmICpnZXRfdXNhcnQoaW50IHBvcnQpCit7CisJc3dpdGNoIChwb3J0KSB7CisjaWZkZWYgRU5BQkxFX1VBUlQxCisJCWNhc2UgMToKKwkJCXJldHVybiBVU0FSVDE7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfVUFSVDIKKwkJY2FzZSAyOgorCQkJcmV0dXJuIFVTQVJUMjsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9VQVJUMworCQljYXNlIDM6CisJCQlyZXR1cm4gVVNBUlQzOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlBU1NFUlQoZmFsc2UpOworCQkJcmV0dXJuIDA7CisJfQorCit9CisKK3N0YXRpYyBjYnVmX3QgKmdldF9yeGJ1ZihpbnQgcG9ydCkKK3sKKwlzd2l0Y2ggKHBvcnQpIHsKKyNpZmRlZiBFTkFCTEVfVUFSVDEKKwkJY2FzZSAxOgorCQkJcmV0dXJuICZ1YXJ0MV9yeF9idWY7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfVUFSVDIKKwkJY2FzZSAyOgorCQkJcmV0dXJuICZ1YXJ0Ml9yeF9idWY7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfVUFSVDMKKwkJY2FzZSAzOgorCQkJcmV0dXJuICZ1YXJ0M19yeF9idWY7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCUFTU0VSVChmYWxzZSk7CisJCQlyZXR1cm4gMDsKKwl9CisKK30KKworaW50IHVhcnRfcHV0YyhpbnQgcG9ydCwgY2hhciBjKQoreworCVVTQVJUX1R5cGVEZWYgKnVzYXJ0ID0gZ2V0X3VzYXJ0KHBvcnQpOworCXVzYXJ0X3B1dGModXNhcnQsIGMpOworCXJldHVybiAxOworfQorCitpbnQgdWFydF9nZXRjKGludCBwb3J0LCBib29sIHdhaXQpCit7CisJY2J1Zl90ICpyeGJ1ZiA9IGdldF9yeGJ1Zihwb3J0KTsKKwlVU0FSVF9UeXBlRGVmICp1c2FydCA9IGdldF91c2FydChwb3J0KTsKKworCXJldHVybiB1c2FydF9nZXRjKHVzYXJ0LCByeGJ1Ziwgd2FpdCk7Cit9CisKK3ZvaWQgdWFydF9mbHVzaF90eChpbnQgcG9ydCkge30KKwordm9pZCB1YXJ0X2ZsdXNoX3J4KGludCBwb3J0KSB7fQorCit2b2lkIHVhcnRfaW5pdF9wb3J0KGludCBwb3J0LCB1aW50IGJhdWQpCit7CisJLy8gVE9ETyAtIGxhdGVyCisJUEFOSUNfVU5JTVBMRU1FTlRFRDsKK30KZGlmZiAtLWdpdCBhL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L3ZlY3RhYi5jIGIvc3JjL2JzcC9say9wbGF0Zm9ybS9zdG0zMmYyeHgvdmVjdGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhNjFlNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9ic3AvbGsvcGxhdGZvcm0vc3RtMzJmMnh4L3ZlY3RhYi5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEyIFRyYXZpcyBHZWlzZWxicmVjaHQKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKKyAqICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCisgKiBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorICogcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCisgKiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8ZGVidWcuaD4KKyNpbmNsdWRlIDxjb21waWxlci5oPgorI2luY2x1ZGUgPHN0bTMyZjJ4eC5oPgorI2luY2x1ZGUgPGFyY2gvYXJtL2NtLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0vc3RtMzIuaD4KKyNpbmNsdWRlIDx0YXJnZXQvZGVidWdjb25maWcuaD4KKyNpbmNsdWRlIDxsaWIvY2J1Zi5oPgorCisvKiB1bi1vdmVycmlkZGVuIGlycSBoYW5kbGVyICovCit2b2lkIHN0bTMyX2R1bW15X2lycSh2b2lkKQoreworCWFybV9jbV9pcnFfZW50cnkoKTsKKworCXBhbmljKCJ1bmhhbmRsZWQgaXJxXG4iKTsKK30KKworLyogYSBsaXN0IG9mIGRlZmF1bHQgaGFuZGxlcnMgdGhhdCBhcmUgc2ltcGx5IGFsaWFzZXMgdG8gdGhlIGR1bW15IGhhbmRsZXIgKi8KKyNkZWZpbmUgREVGQVVMVF9IQU5ETEVSKHgpIFwKK3ZvaWQgc3RtMzJfIyN4KHZvaWQpIF9fV0VBS19BTElBUygic3RtMzJfZHVtbXlfaXJxIik7CisKK0RFRkFVTFRfSEFORExFUihXV0RHX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoUFZEX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVEFNUF9TVEFNUF9JUlEpOworREVGQVVMVF9IQU5ETEVSKFJUQ19XS1VQX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoRkxBU0hfSVJRKTsKK0RFRkFVTFRfSEFORExFUihSQ0NfSVJRKTsKK0RFRkFVTFRfSEFORExFUihFWFRJMF9JUlEpOworREVGQVVMVF9IQU5ETEVSKEVYVEkxX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoRVhUSTJfSVJRKTsKK0RFRkFVTFRfSEFORExFUihFWFRJM19JUlEpOworREVGQVVMVF9IQU5ETEVSKEVYVEk0X0lSUSk7CisKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTBfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTFfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTJfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTNfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTRfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTVfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUExX1N0cmVhbTZfSVJRKTsKKworREVGQVVMVF9IQU5ETEVSKEFEQ19JUlEpOworREVGQVVMVF9IQU5ETEVSKENBTjFfVFhfSVJRKTsKK0RFRkFVTFRfSEFORExFUihDQU4xX1JYMF9JUlEpOworREVGQVVMVF9IQU5ETEVSKENBTjFfUlgxX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoQ0FOMV9TQ0VfSVJRKTsKK0RFRkFVTFRfSEFORExFUihFWFRJOV81X0lSUSk7CisKK0RFRkFVTFRfSEFORExFUihUSU0xX0JSS19USU05X0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNMV9VUF9USU0xMF9JUlEpOworREVGQVVMVF9IQU5ETEVSKFRJTTFfVFJHX0NPTV9USU0xMV9JUlEpOworREVGQVVMVF9IQU5ETEVSKFRJTTFfQ0NfSVJRKTsKK0RFRkFVTFRfSEFORExFUihUSU0yX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNM19JUlEpOworREVGQVVMVF9IQU5ETEVSKFRJTTRfSVJRKTsKKworREVGQVVMVF9IQU5ETEVSKEkyQzFfRVZfSVJRKTsKK0RFRkFVTFRfSEFORExFUihJMkMxX0VSX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoSTJDMl9FVl9JUlEpOworREVGQVVMVF9IQU5ETEVSKEkyQzJfRVJfSVJRKTsKKworREVGQVVMVF9IQU5ETEVSKFNQSTFfSVJRKTsKK0RFRkFVTFRfSEFORExFUihTUEkyX0lSUSk7CisKK0RFRkFVTFRfSEFORExFUihVU0FSVDFfSVJRKTsKK0RFRkFVTFRfSEFORExFUihVU0FSVDJfSVJRKTsKK0RFRkFVTFRfSEFORExFUihVU0FSVDNfSVJRKTsKKworREVGQVVMVF9IQU5ETEVSKEVYVEkxNV8xMF9JUlEpOworREVGQVVMVF9IQU5ETEVSKFJUQ19BbGFybV9JUlEpOworREVGQVVMVF9IQU5ETEVSKE9UR19GU19XS1VQX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNOF9CUktfVElNMTJfSVJRKTsKK0RFRkFVTFRfSEFORExFUihUSU04X1VQX1RJTTEzX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNOF9UUkdfQ09NX1RJTTE0X0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNOF9DQ19JUlEpOworREVGQVVMVF9IQU5ETEVSKERNQTFfU3RyZWFtN19JUlEpOworREVGQVVMVF9IQU5ETEVSKEZTTUNfSVJRKTsKK0RFRkFVTFRfSEFORExFUihTRElPX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNNV9JUlEpOworREVGQVVMVF9IQU5ETEVSKFNQSTNfSVJRKTsKK0RFRkFVTFRfSEFORExFUihVQVJUNF9JUlEpOworREVGQVVMVF9IQU5ETEVSKFVBUlQ1X0lSUSk7CitERUZBVUxUX0hBTkRMRVIoVElNNl9EQUNfSVJRKTsKK0RFRkFVTFRfSEFORExFUihUSU03X0lSUSk7CisKK0RFRkFVTFRfSEFORExFUihETUEyX1N0cmVhbTBfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUEyX1N0cmVhbTFfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUEyX1N0cmVhbTJfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUEyX1N0cmVhbTNfSVJRKTsKK0RFRkFVTFRfSEFORExFUihETUEyX1N0cmVhbTRfSVJRKTsKKworREVGQVVMVF9IQU5ETEVSKEVUSF9JUlEpOworREVGQVVMVF9IQU5ETEVSKEVUSF9XS1VQX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoQ0FOMl9UWF9JUlEpOworREVGQVVMVF9IQU5ETEVSKENBTjJfUlgwX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoQ0FOMl9SWDFfSVJRKTsKK0RFRkFVTFRfSEFORExFUihDQU4yX1NDRV9JUlEpOworREVGQVVMVF9IQU5ETEVSKE9UR19GU19JUlEpOworREVGQVVMVF9IQU5ETEVSKERNQTJfU3RyZWFtNV9JUlEpOworREVGQVVMVF9IQU5ETEVSKERNQTJfU3RyZWFtNl9JUlEpOworREVGQVVMVF9IQU5ETEVSKERNQTJfU3RyZWFtN19JUlEpOworREVGQVVMVF9IQU5ETEVSKFVTQVJUNl9JUlEpOworREVGQVVMVF9IQU5ETEVSKEkyQzNfRVZfSVJRKTsKK0RFRkFVTFRfSEFORExFUihJMkMzX0VSX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoT1RHX0hTX0VQMV9PVVRfSVJRKTsKK0RFRkFVTFRfSEFORExFUihPVEdfSFNfRVAxX0lOX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoT1RHX0hTX1dLVVBfSVJRKTsKK0RFRkFVTFRfSEFORExFUihPVEdfSFNfSVJRKTsKK0RFRkFVTFRfSEFORExFUihEQ01JX0lSUSk7CitERUZBVUxUX0hBTkRMRVIoQ1JZUF9JUlEpOworREVGQVVMVF9IQU5ETEVSKEhBU0hfUk5HX0lSUSk7CisKKyNkZWZpbmUgVkVDVEFCX0VOVFJZKHgpIFt4IyNuXSA9IHN0bTMyXyMjeAorCisvKiBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBtYWluIHZlY3RvciB0YWJsZSAqLworY29uc3Qgdm9pZCAqIGNvbnN0IF9fU0VDVElPTigiLnRleHQuYm9vdC52ZWN0YWIyIikgdmVjdGFiMltdID0geworCVZFQ1RBQl9FTlRSWShXV0RHX0lSUSksICAgICAgICAgICAgICAgICAvKiBXaW5kb3cgV2F0Y2hEb2cgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShQVkRfSVJRKSwgICAgICAgICAgICAgICAgICAvKiBQVkQgdGhyb3VnaCBFWFRJIExpbmUgZGV0ZWN0aW9uIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUQU1QX1NUQU1QX0lSUSksICAgICAgICAgICAvKiBUYW1wZXIgYW5kIFRpbWVTdGFtcCBpbnRlcnJ1cHRzIHRocm91Z2ggdGhlIEVYVEkgbGluZSAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShSVENfV0tVUF9JUlEpLCAgICAgICAgICAgICAvKiBSVEMgV2FrZXVwIGludGVycnVwdCB0aHJvdWdoIHRoZSBFWFRJIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShGTEFTSF9JUlEpLCAgICAgICAgICAgICAgICAvKiBGTEFTSCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShSQ0NfSVJRKSwgICAgICAgICAgICAgICAgICAvKiBSQ0MgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJMF9JUlEpLCAgICAgICAgICAgICAgICAvKiBFWFRJIExpbmUwIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJMV9JUlEpLCAgICAgICAgICAgICAgICAvKiBFWFRJIExpbmUxIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJMl9JUlEpLCAgICAgICAgICAgICAgICAvKiBFWFRJIExpbmUyIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJM19JUlEpLCAgICAgICAgICAgICAgICAvKiBFWFRJIExpbmUzIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJNF9JUlEpLCAgICAgICAgICAgICAgICAvKiBFWFRJIExpbmU0IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTBfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSAwIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTFfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSAxIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTJfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSAyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTNfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSAzIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTRfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSA0IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTVfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSA1IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTZfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbSA2IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShBRENfSVJRKSwgICAgICAgICAgICAgICAgICAvKiBBREMxLCBBREMyIGFuZCBBREMzIGdsb2JhbCBJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4xX1RYX0lSUSksICAgICAgICAgICAgICAvKiBDQU4xIFRYIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4xX1JYMF9JUlEpLCAgICAgICAgICAgICAvKiBDQU4xIFJYMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4xX1JYMV9JUlEpLCAgICAgICAgICAgICAvKiBDQU4xIFJYMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4xX1NDRV9JUlEpLCAgICAgICAgICAgICAvKiBDQU4xIFNDRSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJOV81X0lSUSksICAgICAgICAgICAgICAvKiBFeHRlcm5hbCBMaW5lWzk6NV0gSW50ZXJydXB0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU0xX0JSS19USU05X0lSUSksICAgICAgICAvKiBUSU0xIEJyZWFrIGludGVycnVwdCBhbmQgVElNOSBnbG9iYWwgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU0xX1VQX1RJTTEwX0lSUSksICAgICAgICAvKiBUSU0xIFVwZGF0ZSBJbnRlcnJ1cHQgYW5kIFRJTTEwIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU0xX1RSR19DT01fVElNMTFfSVJRKSwgICAvKiBUSU0xIFRyaWdnZXIgYW5kIENvbW11dGF0aW9uIEludGVycnVwdCBhbmQgVElNMTEgZ2xvYmFsIGludGVycnVwdCAqLworCVZFQ1RBQl9FTlRSWShUSU0xX0NDX0lSUSksICAgICAgICAgICAgICAvKiBUSU0xIENhcHR1cmUgQ29tcGFyZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU0yX0lSUSksICAgICAgICAgICAgICAgICAvKiBUSU0yIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU0zX0lSUSksICAgICAgICAgICAgICAgICAvKiBUSU0zIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU00X0lSUSksICAgICAgICAgICAgICAgICAvKiBUSU00IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShJMkMxX0VWX0lSUSksICAgICAgICAgICAgICAvKiBJMkMxIEV2ZW50IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShJMkMxX0VSX0lSUSksICAgICAgICAgICAgICAvKiBJMkMxIEVycm9yIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShJMkMyX0VWX0lSUSksICAgICAgICAgICAgICAvKiBJMkMyIEV2ZW50IEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShJMkMyX0VSX0lSUSksICAgICAgICAgICAgICAvKiBJMkMyIEVycm9yIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShTUEkxX0lSUSksICAgICAgICAgICAgICAgICAvKiBTUEkxIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShTUEkyX0lSUSksICAgICAgICAgICAgICAgICAvKiBTUEkyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShVU0FSVDFfSVJRKSwgICAgICAgICAgICAgICAvKiBVU0FSVDEgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShVU0FSVDJfSVJRKSwgICAgICAgICAgICAgICAvKiBVU0FSVDIgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShVU0FSVDNfSVJRKSwgICAgICAgICAgICAgICAvKiBVU0FSVDMgZ2xvYmFsIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFWFRJMTVfMTBfSVJRKSwgICAgICAgICAgICAvKiBFeHRlcm5hbCBMaW5lWzE1OjEwXSBJbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShSVENfQWxhcm1fSVJRKSwgICAgICAgICAgICAvKiBSVEMgQWxhcm0gKEEgYW5kIEIpIHRocm91Z2ggRVhUSSBMaW5lIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShPVEdfRlNfV0tVUF9JUlEpLCAgICAgICAgICAvKiBVU0IgT1RHIEZTIFdha2V1cCB0aHJvdWdoIEVYVEkgbGluZSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU04X0JSS19USU0xMl9JUlEpLCAgICAgICAvKiBUSU04IEJyZWFrIEludGVycnVwdCBhbmQgVElNMTIgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU04X1VQX1RJTTEzX0lSUSksICAgICAgICAvKiBUSU04IFVwZGF0ZSBJbnRlcnJ1cHQgYW5kIFRJTTEzIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU04X1RSR19DT01fVElNMTRfSVJRKSwgICAvKiBUSU04IFRyaWdnZXIgYW5kIENvbW11dGF0aW9uIEludGVycnVwdCBhbmQgVElNMTQgZ2xvYmFsIGludGVycnVwdCAqLworCVZFQ1RBQl9FTlRSWShUSU04X0NDX0lSUSksICAgICAgICAgICAgICAvKiBUSU04IENhcHR1cmUgQ29tcGFyZSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUExX1N0cmVhbTdfSVJRKSwgICAgICAgICAvKiBETUExIFN0cmVhbTcgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShGU01DX0lSUSksICAgICAgICAgICAgICAgICAvKiBGU01DIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShTRElPX0lSUSksICAgICAgICAgICAgICAgICAvKiBTRElPIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU01X0lSUSksICAgICAgICAgICAgICAgICAvKiBUSU01IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShTUEkzX0lSUSksICAgICAgICAgICAgICAgICAvKiBTUEkzIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShVQVJUNF9JUlEpLCAgICAgICAgICAgICAgICAvKiBVQVJUNCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShVQVJUNV9JUlEpLCAgICAgICAgICAgICAgICAvKiBVQVJUNSBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU02X0RBQ19JUlEpLCAgICAgICAgICAgICAvKiBUSU02IGdsb2JhbCBhbmQgREFDMSYyIHVuZGVycnVuIGVycm9yICBpbnRlcnJ1cHRzICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShUSU03X0lSUSksICAgICAgICAgICAgICAgICAvKiBUSU03IGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTBfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSAwIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTFfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSAxIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTJfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSAyIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTNfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSAzIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTRfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSA0IGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFVEhfSVJRKSwgICAgICAgICAgICAgICAgICAvKiBFdGhlcm5ldCBnbG9iYWwgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShFVEhfV0tVUF9JUlEpLCAgICAgICAgICAgICAvKiBFdGhlcm5ldCBXYWtldXAgdGhyb3VnaCBFWFRJIGxpbmUgSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4yX1RYX0lSUSksICAgICAgICAgICAgICAvKiBDQU4yIFRYIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4yX1JYMF9JUlEpLCAgICAgICAgICAgICAvKiBDQU4yIFJYMCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4yX1JYMV9JUlEpLCAgICAgICAgICAgICAvKiBDQU4yIFJYMSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDQU4yX1NDRV9JUlEpLCAgICAgICAgICAgICAvKiBDQU4yIFNDRSBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShPVEdfRlNfSVJRKSwgICAgICAgICAgICAgICAvKiBVU0IgT1RHIEZTIGdsb2JhbCBJbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTVfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSA1IGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTZfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSA2IGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShETUEyX1N0cmVhbTdfSVJRKSwgICAgICAgICAvKiBETUEyIFN0cmVhbSA3IGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShVU0FSVDZfSVJRKSwgICAgICAgICAgICAgICAvKiBVU0FSVDYgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShJMkMzX0VWX0lSUSksICAgICAgICAgICAgICAvKiBJMkMzIGV2ZW50IGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShJMkMzX0VSX0lSUSksICAgICAgICAgICAgICAvKiBJMkMzIGVycm9yIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShPVEdfSFNfRVAxX09VVF9JUlEpLCAgICAgICAvKiBVU0IgT1RHIEhTIEVuZCBQb2ludCAxIE91dCBnbG9iYWwgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShPVEdfSFNfRVAxX0lOX0lSUSksICAgICAgICAvKiBVU0IgT1RHIEhTIEVuZCBQb2ludCAxIEluIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShPVEdfSFNfV0tVUF9JUlEpLCAgICAgICAgICAvKiBVU0IgT1RHIEhTIFdha2V1cCB0aHJvdWdoIEVYVEkgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShPVEdfSFNfSVJRKSwgICAgICAgICAgICAgICAvKiBVU0IgT1RHIEhTIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShEQ01JX0lSUSksICAgICAgICAgICAgICAgICAvKiBEQ01JIGdsb2JhbCBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShDUllQX0lSUSksICAgICAgICAgICAgICAgICAvKiBDUllQIGNyeXB0byBnbG9iYWwgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVZFQ1RBQl9FTlRSWShIQVNIX1JOR19JUlEpLCAgICAgICAgICAgICAvKiBIYXNoIGFuZCBSbmcgZ2xvYmFsIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKwo=